我正在尝试使用switch语句进行简单的碰撞检测。该语句获取某个对象的y位置,然后检测对象的x是否与另一个对象相同。问题在于,即使条件不满足,我也会在if语句内部声明if语句。该对象应该在被敌人击中后被发送回起点(敌人正在通过屏幕移动)并以19的增量移动以满足该情况。问题是我似乎无法提升它,因为每当我遇到这种情况时它会不断被送回起始点(y = 221)。当我从switch语句中删除deadObject()时,它工作正常,只有当它遇到敌人时才打印“死”。我该怎么办呢?
我一直在互联网上寻找这个但是我找不到与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;
}
答案 0 :(得分:2)
我认为这是一个简单的语法问题。你的解释器足够聪明,知道trace语句属于if语句,但是现在你引入了另一个函数而且它会混淆。
我的建议是始终遵循最佳做法并将括号放在他们所属的位置
另请参阅以下内容: Is it bad practice to use an if-statement without brackets?
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;
}
}