最近我一直在尝试在XNA中制作2D游戏,但我似乎已经走到了尽头。无论我在互联网上看到什么,我似乎无法找到如何使两个对象在XNA中发生碰撞的任何示例。我非常清楚如何检测某些东西是否发生碰撞,而不是在if
语句之间放置什么。
在我的情况下,它试图让玩家不通过屏幕上的任何块。我尝试了几种方法,但似乎没有一种方法可行。 :(
提前致谢!
答案 0 :(得分:3)
所以,这是一种肮脏的解决方案,但你可以保存你所在的位置,移动,然后如果碰撞,则恢复到原来的位置。
这是一个代码示例,提供检查碰撞的方法称为doesCollide()
,您执行游戏逻辑和相应移动播放器的方法称为update()
。
此外,getX(),getY(),setX()和setY()只是获取/设置播放器坐标的方法。
int lastX = player.getX();
int lastY = player.getY();
player.update();
if(player.doesCollide()){
player.setX(lastX);
player.setY(lastY);
}
当玩家高速移动时,此方法尤其面临问题,因为玩家可能会遇到障碍物或者无法靠近墙壁。 这是一个解决方案,但它甚至更脏:
int lastX = player.getX();
int lastY = player.getY();
player.update();
int moveX = player.getX() - lastX;
int moveY = player.getY() - lastY;
player.setX(lastX);
player.setY(lastY); //we're basically figuring out where the player would move
int ratio = moveY / moveX;
for(int i = 0; i < moveX; i++){ //we move the player pixel by pixel
player.setX(lastX + i);
player.setY(lastY + (int) (i * ratio));
if(player.doesCollide()){ //we revert the last pixel move
player.setX(lastX + i - 1);
player.setY(lastY + (int) ((i - 1) * ratio));
}
}