Tag: 游戏引擎

游戏网络弹丸实施/概念问题

我试图通过同步射弹射击和游戏网络来解决常见问题的某种解决方案,但我不确定什么是最合适的。 这是一个2D动作侧卷轴,带有几个射弹(没有即时击中武器),并且已经有很多框架(C#XNA框架和Lidgren库)。 此时我认为架构将被建模,类似于半衰期源引擎。 客户端将在过去(固定步骤30fps)并使用客户端侧预测插入远程实体~100ms或大约3帧。 服务器拥有模拟权限。 考虑使用移动编码实现似乎很好,但是当涉及到射弹时,我不确定如何最好地为所有玩家提供最佳游戏。 示例问题: 客户A. 客户B. 服务器 客户A和B只是站在一起面对面。 客户端B开始向A发射并像往常一样向服务器发送输入。 服务器检测到火灾输入并开始在其模拟中发射武器,同时将事件转发给客户端A. 客户端A接收消息但过去仍然在插入客户端B(同时射弹现在在服务器和客户端Bs机器上朝向A)。 客户端A的渲染最终到达B射击射弹并开始渲染的点。 客户A看到它并跳转,轻松地在屏幕上清除它。 然而,射弹击中了他在服务器上和客户端Bs的观点。 这也是2D sidescroller所以一切都是可见的。 这似乎是使用插值的一个基本的副作用(我认为这是必须的,但我愿意接受建议),因为即使没有任何网络延迟,也存在固有的插值延迟。 题: 我知道它不可能是完美的,但有没有更多或更好的方法可以实现混淆或改善它以使它看起来很好/无缝,或者我错过任何明显的东西? 在实际发射射弹之前,武器的发射确实有一个短暂的动画时间,我意识到我们可以利用那个时间来隐藏一些延迟,但是武器不会立即射击,而且任何我看它的方式总是与客户试图躲避射弹和其他客户看到他们的射弹击中它们之间存在巨大差距。 对于玩家正在移动的情况,我们可以在服务器上使用滞后补偿,但我不认为这可以帮助这种情况? 如果射弹击中导致客户A的位置被改变,我将不得不倒回客户A并用新数据重放他的输入,或者如果它没有,我必须从空中移除射弹(也许他们死了),丑陋无论哪种方式 :(。

实现IDisposable C#

我在理解IDisposable界面时遇到了一些麻烦 我正在开发一个游戏引擎,并在我的解决方案上运行代码分析,并被告知在我的“GrapicsEngine”类上实现IDisposable接口,因为它包含一个Bitmap实例。 当然,我搜索了互联网,以了解如何正确地做到这一点,并提出了以下代码: 这是我的class级成员: private const int BITMAP_WIDTH = 4096; private const int BITMAP_HEIGHT = 4096; private Graphics backBuffer; private Bitmap bitmap; private Color clearColor; private WindowSurface surface; private GraphicsQuality quality; private Viewport viewport; 这是我的IDispoable地区: #region IDisposable public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing == true) ReleaseManagedResources(); […]

在旋转后,查找线/点左侧的哪一点

我目前正试图在团结中编写一个着色器,如果两个国家不属于同一个玩家(视觉辅助以查看您的边界),则在风险游戏中围绕各国绘制三角形图案。 现在,我遇到了使着色器正确设置国家的问题。 它始终将国家0设置为左侧,将国家1设置为右侧 – 国家0和1以编程方式设置。 线条边界可以在0到359度之间。 我如何找到0和1国家是我在线的中点左右两点画一个点,一个.01f,一个.1f和一个1f远离每个方向的中点,然后围绕中点旋转它们适当的位置。 之后,我做了一个奇怪的检查,看看这些点是在每个国家的内部还是外部,并比较重量结果(最接近得到3分,中间得到2,最远得到1,以防万一有人建立一个真正搞砸了面向另一个国家的国家)。 在我的测试图中,接近等切的八边形,边框正确显示(在我将角度超过90且小于或等于180的情况下颠倒了国家0和1的位置之后)。 工作没有缺陷,但在其他地图中它不能很好地工作。 除了国家分配之外的所有东西都运作良好,所以我很好奇是否有人知道更好的方法来找出哪个点是左边还是一个细线,或者更好的概念方法来处理这个问题。 上面的情况基本上就是在我做的时候,红色是左边是蓝色,然后我只是检查3个不同的点,然后权衡左边和权利发现偶数/ odding它到适当的国家(一个在+/-。 01,另一个在+/- .1和第三个1,在偶数/奇数舍入问题的情况下接近)。 然后,如果我发现国家A在右边,我会翻转它们,因为它是根据我绘制的角度在左边。 (我的着色器在第一个和第二个左边渲染,因此为什么我这样做)。