【发布时间】:2015-06-14 07:39:43
【问题描述】:
将 A 点和 B 点视为墙,将 O 点视为墙内的玩家。
所以它们看起来像 A O B。
我希望玩家在接触到右点 B 时向左移动。当他接触到左点 A 时向右移动。
屏幕正在渲染,玩家位置向右增加 5 或向左增加 -5。
我尝试做的事情: 我把它放在 if else if 语句中。如果 A 和 O 之间的距离为零,则玩家位置增加 +5。如果 O 和 B 之间的距离为零,则玩家位置的增量为 -5。但是一旦他接触到一面墙(比如右边的墙),他就会向后移动 -5 和 5,然后再 -5 和 5。
我明白为什么会发生这种情况,但我没有任何逻辑来实现它。
代码: 抱歉,我无法发布实际代码。我在移动互联网上。我没有电脑上网。
假设左墙在 50, 0,右墙在 550, 0,玩家在 50, 0。
//这一切都在渲染中。
If (rightWall - PlayerPos <=0){
PosIncrement = -5;
}
If (leftWall - PlayerPos <=0){
PosIncrement = 5;
}
translateX (PlayerPos);
【问题讨论】:
-
可能墙壁之间的差距只有5个单位?
-
它的发生是因为一旦玩家离开当前墙去另一个方向,另一个 if 语句被执行并且他向后移动 -5。他与墙壁碰撞并获得 5 个增量。但再次离开墙执行其他 if 语句,他再次得到 -5。墙壁之间的距离是 500 像素。
-
如果您将代码添加到问题中会更容易
-
如果玩家离开墙壁,并且他们之间的距离是500,为什么要执行任何if语句?他们都应该评估为假。
-
墙之间的距离是500。玩家和左墙之间的距离是零。
标签: java libgdx logic game-engine