【发布时间】:2018-03-07 12:18:26
【问题描述】:
这是我的第一个问题,如果我违反任何规则或什么的,请原谅。
我一直在开发一款马里奥游戏,并且正在绘制精灵。我正在尝试确定碰撞检测。通过研究,我了解到您可以使用 Rectangle 类来执行此操作...
public void checkCollisions() {
Rectangle mr = mario.getBounds();
Rectangle gr = goomba.getBounds();
if(mr.intersects(gr)) {
System.out.println("Collision detected");
}
}
@Override
public void actionPerformed(ActionEvent e) {
updateMario();
checkCollisions();
repaint();
}
但是,即使 mario 与另一个精灵相距半屏,这也会使碰撞方法产生垃圾邮件!
所以总体问题是,当精灵彼此远离时,我如何让系统不发送垃圾邮件?
类: http://pastebin.com/PHWTzSvQ
顺便用了Zetcode游戏资源。
【问题讨论】:
-
您的问题是什么?另外,不要在其他链接中发布代码。如果它与您的问题相关,请将其发布在问题中。
-
我的问题是当精灵彼此远离时,如何让系统不向碰撞方法发送垃圾邮件,这是不应该的。
-
好吧,你不能,每个周期,你都需要检查你的角色“可能”与什么发生碰撞
-
这通常称为场景管理。您可以将您的世界划分为一个立方体,将其切成更小的部分并递归执行相同的操作并将对象分配给对象所在的每个叶立方体(bsp-trees,quad-tree,octtree,...)您然后必须只检查周围的立方体是否包含物体。尽管 SO 不是推荐平台,但我认为 David Brackeens Developing Games in Java 可能是 Java 和游戏开发方面最好的文献资源之一。
-
当您实现 2D 游戏时,立方体可能不是最好的东西 - 因为您几乎不处理 z 坐标。因此,请考虑将一张小型 2D 纸放在您的世界中,然后将其分成更小的矩形。不过,这只是一种可能的解决方案——有几种不同的技术。尝试阅读其中的一些内容并使用最适合您的方法。