1

所以,我正在创建一个简单的 2D 视频游戏。我最近注意到播放器可以移出屏幕,所以我添加了以下代码:

if (newX <= SIZE * TagsCanvas.SCALE) {
            newX = SIZE * TagsCanvas.SCALE;
        } else if (newX >= TagsCanvas.CANVAS_WIDTH - (SIZE * TagsCanvas.SCALE) - getAABB().getRadX()) {
            newX = TagsCanvas.CANVAS_WIDTH - (SIZE * TagsCanvas.SCALE) - getAABB().getRadX();
        }

        if (newY <= SIZE * TagsCanvas.SCALE) {
            newY = SIZE * TagsCanvas.SCALE;
        } else if (newY >= TagsCanvas.CANVAS_HEIGHT - (SIZE * TagsCanvas.SCALE) - getAABB().getRadY()) {
            newY = TagsCanvas.CANVAS_HEIGHT - (SIZE * TagsCanvas.SCALE) - getAABB().getRadY();
        }

TagsCanvas.CANVAS_WIDTH是画布对象的宽度。高度是画布对象的高度。Size 是玩家的大小,scale 是游戏的规模(目前是 2)。 getAABB().getRadX()返回从播放器中心到边缘的半径(“播放器”是一个方形框)。

现在,x 工作正常,但 Y 部分不行。它会阻止玩家向上移动离开地图(第一条语句),但它会让玩家向下移动大约 20 点。任何帮助,将不胜感激!

4

1 回答 1

0

您可以做的是使用模运算符(即整数除法后的余数)将其环绕。

假设您要移动 5 个单位: 有一个方法:

public void move(int amt){
 pos = (pos + amt) % TagsCanvas.CANVAS_WIDTH.
}

模运算符确保该值永远不会等于或大于 TagsCanvas.CANVAS_WIDTH。

于 2013-05-18T21:32:56.940 回答