如何让游戏单元前进到直线对角线?

时间:2013-12-02 17:21:38

标签: java game-engine game-physics

我正在为本学期的OOP课程中的最后一个项目编写一个Pacman游戏。我已经完成了很多工作,但现在我正在实现这个功能,鬼魂变成那些“摇摆不定的眼睛”并直接回到鬼屋。

为了实现这一点,我知道我需要两点:一个我想要鬼去的地方(这在我的代码中称为ghost的startTile),以及ghost的当前位置。从那里,我们可以计算X / Y距离。我知道我需要在这些方面做点什么,只是不确定是什么。

这是我目前用来尝试实现此目的的代码:

double xDistance = Math.abs(startTile.x*16+8 - position.getCenterX());
double yDistance = Math.abs(startTile.y*16+8 - position.getCenterY());
double xRatio = xDistance / yDistance;
double yRatio = yDistance / xDistance;
if((int)Math.round(startTile.x*16+8) < (int)Math.round(position.getCenterX())) {
  position.setDirection(DIRECTION_WEST);
  position.step(movementPixels*xRatio);
} else if((int)Math.round(startTile.x*16+8) > (int)Math.round(position.getCenterX())) {
  position.setDirection(DIRECTION_EAST);
  position.step(movementPixels*xRatio);
}
if((int)Math.round(startTile.y*16+8) < (int)Math.round(position.getCenterY())) {
  position.setDirection(DIRECTION_NORTH);
  position.step(movementPixels*yRatio);
} else if((int)Math.round(startTile.y*16+8) > (int)Math.round(position.getCenterY())) {
  position.setDirection(DIRECTION_SOUTH);
  position.step(movementPixels*yRatio);
}
System.out.println(position.getTileX() + " == " + startTile.x + " && " + position.getTileY() + " == " + startTile.y);
if(position.getTileX() == startTile.x && position.getTileY() == startTile.y) {
  setNewLife();
}

不幸的是,这不起作用。事实上,他们都疯狂地移动,并最终在某个地方拍摄到地图的一侧,此时position.getTileY()将返回一个像2173454这样的值或疯狂的东西......

任何帮助将不胜感激!

0 个答案:

没有答案