所以,我正在创建一个简单的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
是画布对象的宽度。高度是画布对象的高度。大小是玩家的大小,比例是游戏的比例(目前是2)。 getAABB().getRadX()
返回从玩家中心到边缘的半径('玩家'是方框)。
现在,x工作正常,但Y部分没有。它会阻止玩家从地图上移开(第一个声明),但它会让玩家向左走20点。任何帮助将不胜感激!
答案 0 :(得分:0)
你可以做的是使用Modulo运算符(即整数除法后的余数)使其循环。
假设您要移动5个单位: 有一个方法:
public void move(int amt){
pos = (pos + amt) % TagsCanvas.CANVAS_WIDTH.
}
Modulo运算符确保该值永远不会等于或大于TagsCanvas.CANVAS_WIDTH。