0

我正在尝试使用 switch 语句进行简单的碰撞检测。该语句获取某个对象的 y 位置,然后检测该对象的 x 是否与另一个对象相同。问题是我在 case 中有 if 语句,即使条件不满足,它也会遍历整个 if 语句。该对象应该在被敌人击中后被送回起点(敌人正在通过屏幕移动)并以 19 为增量移动,因此符合条件。问题是我似乎无法将它向上移动,因为每当我遇到这种情况(y = 221)时,它都会不断被送回起点。当我从 switch 语句中删除 deadObject() 时,它工作正常,并且只在遇到敌人时打印“dead”。我该如何解决这个问题?

我一直在互联网上四处寻找这个,但我找不到任何与 switch 语句中的 if 语句相关的 AS3。谢谢你的帮助

public function enterFrame(me:Event)
    {
        position = objectA.y
        switch(position)
        {
            case 221:
                if (objectA.x == enemy1.x || objectA.x == enemy1.x + 10)
                    trace("dead1");
                    deadObject()
                if (objectA.x == enemy2.x || objectA.x == enemy2.x + 10)
                    trace("dead1");
                    deadObject()
                if (objectA.x == enemy3.x || objectA.x == enemy3.x + 10)
                    trace("dead1");
                    deadObject()
                break;
          }
     }

public function deadObject()
    {
        objectA.x = 133;
        objectA = 240;
    }
4

1 回答 1

2

我相信这是一个简单的语法问题。您的解释器足够聪明,可以知道 trace 语句属于 if 语句,但现在您抛出另一个函数,它会感到困惑。

我的建议是始终遵循最佳实践并将括号放在它们所属的位置

另请参阅以下内容: 使用不带括号的 if 语句是不好的做法吗?

    public function enterFrame(me:Event)
    {
        position = objectA.y;
        switch(position)
        {
            case 221:
                if (objectA.x == enemy1.x || objectA.x == enemy1.x + 10)
                {
                    trace("dead1");
                    deadObject();
                }
                if (objectA.x == enemy2.x || objectA.x == enemy2.x + 10)
                {
                    trace("dead1");
                    deadObject();
                }
                if (objectA.x == enemy3.x || objectA.x == enemy3.x + 10)
                {
                    trace("dead1");
                    deadObject();
                }
                break;
        }
   }
于 2013-06-17T16:59:30.507 回答