我有一个检测碰撞的问题。我使用了TiledMap并创建了一个虚拟操纵杆,因此可以在各个方向上移动,而不仅仅是向左,向右,向上,向下。观点与顶部直接成90度。
我不知道这是否是TiledMap的目的,但我认为地图很容易创建。但是现在我遇到了碰撞检测的问题。由于地图不像棋盘那样排列,我需要检查整个Sprite是否有碰撞。能告诉我这是怎么回事吗?
谢谢
答案 0 :(得分:0)
首先,我建议您结帐this question以清除一些内容,并了解碰撞检测如何与TiledMaps
一起使用。
总结:使用TileEditor,您可以向TiledMap
添加不同的图层。其中一个层可以是可用于碰撞的物体层。有关如何创建和访问图层,请查看链接的问题。
对于您的示例,有一些需要首先清除的核心问题:
口袋妖怪是一个非常简单的例子。播放器的大小只有一个磁贴,不能在它们之间移动。如果发生碰撞,玩家就无法移动。
如果这是您想要的,您可以在移动任何对象之前添加一个检查:如果下一个图块无效,则不要移动该对象。对于碰撞检查,您只需调整first answer中的示例代码。
在光谱的另一端,你可以有不同形状的物体,这些物体具有不同的比例,具有动态的速度,并且应该在TileMap上反弹物体。在这种情况下,使用box2d进行碰撞检测可能比在this answer中更聪明。
因此,根据您的需求,只需尝试调整我链接的任何答案。也许只是从一个超级简单的盒子碰撞开始尝试扩展你的代码。
答案 1 :(得分:0)
使用此方法
void isCollition(Object x, Object y) {
Boolean collide = false;
if (x.getX() + x.getwidth() < y.getX() + y.getWidth() ||
x.getY() + x.getHeight() < y.getY() + y.getHeight() {
collide = true;
}
return collide;
}