【问题标题】:Player Movement Direction Logic玩家移动方向逻辑
【发布时间】: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


【解决方案1】:

如果玩家应该在墙之间,这意味着左侧墙的位置应该始终低于玩家位置。玩家位置应等于或大于 50 且等于或小于 550

所以正确的逻辑可以是

If (rightWall - PlayerPos <=0){
    PosIncrement = -5;
}
If (PlayerPos - leftWall <=0){
    PosIncrement = 5;
}

【讨论】:

  • 谢谢。我解决了这个问题。 playerPos 在渲染方法中被重置。另外,我的逻辑对于左墙不正确。现在可以使用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 2021-04-18
  • 1970-01-01
相关资源
最近更新 更多