我想用基于图块的地图创建2D游戏。我的主要问题是碰撞。如果我的路上有一棵树,我怎么能让我的精灵不穿过树?
答案 0 :(得分:4)
的伪代码:
some_event() {
if (bullet.x == monster.x && bullet.y == monster.y) {
collision_occurs();
}
}
当然语义会被触发,事件处理程序是否更有意义(例如:{/ 1}} 当x和y坐标相遇时,而不是{ {1}}他们在collision_occurs()
被解雇时遇到)取决于游戏。
如果你要进行更多的分析,你会注意到子弹和怪物各不是1个像素,所以看起来更像:
if
这些细节随之而来。基本上你有移动对象,这些对象共享坐标。 当这些坐标作为其代表对象的属性足够接近时,会发生“碰撞”,并且会遵循一些方法。
答案 1 :(得分:0)
这样的事情背后的一般想法(我使用松散的一般术语)是每个对象'在你的游戏中(无论是树,汽车,w / e)是一组多边形。现在,这些相应多边形中的每一个都具有一组边界,它们具有(可能)设置或已知大小。实际上,您可以将游戏中的每个对象看作一组空心多边形。例如,把这个'空心''汽车和墙壁我刚刚掀起(我是一个可怕的艺术家,所以忍受我):
现在,尽管实际上你的汽车和墙壁会有很好的细节和颜色填充,但是作为处理碰撞的程序员,你唯一关心的是边界。
在程序中,您将在游戏中的每个对象上附加一个处理程序,用于侦听程序中的更改。 (例如汽车移动),它可以检测到类似的事情,发生了碰撞吗?比赛结束了吗?汽车经过我,我不应再展示了。等等,因为你关心碰撞,你会特别注意以下任何一个:A)汽车听众说它碰到了什么 或者B)墙上的听众说了什么。从那里你可以改变程序的逻辑来处理你想要发生的任何事情(停止汽车动画运动和增加伤害,显示游戏结束屏幕,无论如何)。
从那里,真的,最好的方法就是尝试。 Java有很多图形框架,每个图形框架都有自己的细微差别。试试吧!或经过一番研究后选择一个,世界就是你的游乐场。
编辑
形状碰撞的一个例子是在Javafx中,它的处理方式如下:(对于这段代码来说,归功于jewlesea。)
private void checkBounds(Shape block) {
boolean collisionDetected = false;
for (Shape static_bloc : nodes) {
if (static_bloc != block) {
static_bloc.setFill(Color.GREEN);
if (block.getBoundsInParent().intersects(static_bloc.getBoundsInParent())) {
collisionDetected = true;
}
}
}
if (collisionDetected) {
block.setFill(Color.BLUE);
} else {
block.setFill(Color.GREEN);
}
}