1

我正在尝试制作一个需要根据事件工作的全自动游戏引擎。我面临的问题是我制作了一个地图类,并在游戏类中初始化了它。它几乎是静态的,一个游戏只存在一张地图。通过清除当前地图中的对象并添加新地图来加载新地图。您可以在此处查看地图类的来源。

http://code.google.com/p/game-engine-for-java/source/browse/src/com/gej/map/Map.java

主要问题出现在碰撞检测中,我不应该使用暴力碰撞检测。这大大减慢了游戏的速度,我只想检查靠近物体的物体的碰撞。我一直在使用 MapLoader 接口来构建地图。我认为在另一个线程中调用对象的碰撞()方法可能会有所帮助。但是,所有地图对象都在 Game 类中更新。

这是游戏课程,如果它可能有帮助的话

http://code.google.com/p/game-engine-for-java/source/browse/src/com/gej/core/Game.java

还有另一个问题,有时对象没有被销毁。我正在调用地图的 removeObject() 方法,但它需要 1 秒的延迟,有时根本不会删除。

它在一个平台游戏中给我 48-64 fps,游戏中有 158 个对象。但在太空侵略者风格的游戏中,它只给我 20-30 fps。非常感谢任何有关优化的建议...

如果有人能给我一个关于二进制间距等的教程,我将不胜感激。

4

1 回答 1

2

查看您的代码有两个建议:第一件事是您应该尽量减少碰撞检测中的对象分配,不要创建新Rectangles的,通过直接编写碰撞检测算法来处理已有的数据。

其次更重要的是:碰撞检测引擎应该使用两个级别来工作:

  • 粗略级别的碰撞已经排除了肯定太远而无法碰撞的对象(您可以在这里使用许多技术,例如大碰撞斑点的二进制空间分区算法,或对象的层次结构)
  • 一个精细级别,它将使用更精确的算法计算可能发生的碰撞的具体细节
于 2012-06-05T01:44:52.357 回答