当前位置:  开发笔记 > 编程语言 > 正文

游戏编程和事件处理程序

如何解决《游戏编程和事件处理程序》经验,为你挑选了1个好方法。

我没有编写游戏大约10年(我的最后一次经历是DJGPP + Allegro),但我想我会在周末看看XNA,看看它是如何形成的.

我印象非常深刻,但是当我继续拼凑游戏引擎时,我有一个(可能)基本问题.

您应该依靠C#的代表和活动来推动游戏多少?作为应用程序程序员,我大量使用委托和事件,但我不知道这样做是否有很大的开销.

在我的游戏引擎中,我设计了一种"追逐凸轮",它可以附加到一个物体上,然后重新计算它相对于物体的位置.当对象移动时,有两种方法可以更新追逐凸轮.

在主游戏循环中有一个"UpdateCameras()"方法.

使用事件处理程序,并使chase cam订阅object.OnMoved.

我正在使用后者,因为它允许我将事件链接在一起并很好地自动化引擎的大部分.突然之间,巨大而复杂的东西会落到少数3-5线事件处理程序中......这是一种美.

但是,如果每纳秒触发的事件处理程序变成一个主要的减速,我将删除它并采用循环方法.

想法?



1> Ray Hayes..:

如果您将某个事件视为订阅者列表,则在您的代码中,您所做的只是注册订阅者.在CLR级别,实现这一目标所需的指令数量可能很少.

如果您希望代码是通用的或动态的,那么您需要在调用事件之前检查是否订阅了某些内容.C#和.NET的事件/委托机制以极低的成本(就CPU而言)为您提供.

如果您真的关心每个时钟周期,那么您永远不会编写通用/动态游戏逻辑.这是可维护/可配置代码与直接速度之间的权衡.

写得好,我赞成事件/代表,直到我能证明这是一个问题.

你真正知道它是否是一个问题的唯一方法是分析你的代码 - 无论如何你应该为任何游戏开发做什么!

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有