【问题标题】:JavaScript game CollisionJavaScript 游戏碰撞
【发布时间】:2018-05-26 10:40:34
【问题描述】:

在线性格斗游戏中,我使用下面的公式来获得 X 碰撞和 Y 碰撞(当角色跳到另一个战士的顶部时)。 我真的不知道这个公式有什么问题,因为我在游戏中遇到了一些无意义的逻辑错误。(当发生碰撞时,我会向前和向后移动角色,所以有时我会得到无意义的位置。 除了我的公式,如果你还有其他公式,请分享。谢谢

    if (this.x < secondPlayer.x + secondPlayer.width + this.border &&
        this.x + this.width + this.border > secondPlayer.x && this.y < secondPlayer.y + secondPlayer.height + this.border &&
        this.height + this.y + this.border > secondPlayer.y && this.x != secondPlayer.x){
            return 'x';
        }
        else if (this.x == secondPlayer.x && this.y < secondPlayer.y + secondPlayer.height + this.border &&
            this.height + this.y + this.border > secondPlayer.y) {
                return 'y';
     }else{
         return 'n';
     }

【问题讨论】:

  • this.border 一个标量值(例如,23.4)还是一个对象?
  • 请解释一下“边界”代表什么。此外,您需要在条件中添加更多括号!
  • 是的,它的值(不是对象)用于字符边框。
  • @NicolasCailloux:我没有语法错误,但我认为可能在 Y 冲突中,一些逻辑问题,因为它必须在字符之上。
  • 单元测试可能会突出这个问题?您可以生成满足 if 中每个条件的测试数据,然后将它们混合并匹配一组不同的条件。

标签: javascript collision game-physics


【解决方案1】:

我没有时间给你一个准确的答案,只是将你重定向到bounding boxes。定义一个像矩形这样的结构并检查链接中的边框:

myBox.x = this.x 
myBox.y = this.y
myBox.width = this.width + this.border
myBox.height = this.height + this.border

你也可以有不同的方法:

myBox.left = this.x 
myBox.top = this.y
myBox.right = this.x + this.width + this.border
myBox.bottom = this.y + this.height + this.border

并检查: 我的左边对着对手的右边,我的上对着对手的下,然后倒转。

编辑: 使用您的代码,您不能同时检查两个冲突:您的代码说:

if (x collides) return 'x' else if (y collides) return 'y'

因此,如果您遇到“x”冲突,该函数将返回并且不检查“y”。 此外,在第二次测试中,我认为this.x == secondPlayer.x 是错误的:仅当两个玩家的位置相同时才检查“y”碰撞。但是它们可以重叠而不在同一个“x”上(例如,我跳到对手的精灵中间)!

【讨论】:

  • 这与我的 X 碰撞几乎相同,正如我在提交中解释的那样,我在字符顶部也有 Y 碰撞。这意味着我应该得到 Y 碰撞 + x 碰撞
猜你喜欢
  • 2017-12-28
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多