我的弹丸更新功能有什么问题?

时间:2014-11-10 05:03:06

标签: c++ game-physics

以下是所有相关代码。

当弹丸初始化时,它会运行:

slope = (yTarget - yPos) / (xTarget - xPos);
if (xTarget >= xPos)
    xDir = 1;
else
    xDir = -1;
if (yTarget >= yPos)
    yDir = 1;
else
    yDir = -1;

这会在每个游戏循环发生的每次更新中运行:

xPos += t*speed*xDir;
yPos += t*speed*yDir * abs(slope);

XTarget和yTarget是弹丸应该去的地方,而xPos和yPos是弹丸目前所在的位置。速度现在是1,所以只需忽略它,t是自上次更新以来经过的滴答数(ms)。 (通常在我的电脑上为0-2)除了子弹速度似乎取决于(xTarget - xPos)'到0的距离,射弹越近越快。我会尝试用肉眼解释它。如果我向角色的右侧或左侧射击,子弹以所需的速度移动。但是,如果我在角色的上方或下方拍摄,它的拍摄速度非常快。有人能告诉我一种方法来解决这个或更好的方法来编码这整个事情吗?感谢。

1 个答案:

答案 0 :(得分:1)

dx = xTarget - xPos;
dy = yTarget - yPos;
norm = sqrt(dx*dx + dy*dy);
if (norm != 0) {
    dx /= norm;
    dy /= norm;
}

字母:

xPos += t*speed*dx;
yPos += t*speed*dy;