Actionscript 3 如何调用AS3交换机
我对switch语句有点纠结(我以前从未使用过switch)。当我的目标到达舞台的顶部或底部时,我有一个命中测试。当这种情况发生时,我想切换状态(所讨论的游戏是一个简单的平台,允许玩家在到达新表面时切换重力。下面是我当前的代码:Actionscript 3 如何调用AS3交换机,actionscript-3,switch-statement,Actionscript 3,Switch Statement,我对switch语句有点纠结(我以前从未使用过switch)。当我的目标到达舞台的顶部或底部时,我有一个命中测试。当这种情况发生时,我想切换状态(所讨论的游戏是一个简单的平台,允许玩家在到达新表面时切换重力。下面是我当前的代码: { ... if(player.hitTestObject(bottom)) { //Switch state to normal } if(player.hitTestObject(top)) { //
{
...
if(player.hitTestObject(bottom)) {
//Switch state to normal
}
if(player.hitTestObject(top)) {
//Switch state to inverted
}
}
switch (myGrav){
case "NORMAL":
trace("Normal")
player.gotoAndPlay(1);
oktoJump = false;
player.y = 376.5;
case "INVERTED":
trace("Inverted")
player.gotoAndPlay(8);
oktoJump = false;
player.y = 12;
}
谢谢!您的switch语句中的案例缺少一个
中断
;因此,代码将继续通过switch语句执行
这应该是:
var myGrav:String = "NORMAL";
if (player.hitTestObject(bottom))
myGrav = "NORMAL";
if (player.hitTestObject(top))
myGrav = "INVERTED";
switch (myGrav)
{
case "NORMAL":
trace("Normal")
player.gotoAndPlay(1);
oktoJump = false;
player.y = 376.5;
break;
case "INVERTED":
trace("Inverted")
player.gotoAndPlay(8);
oktoJump = false;
player.y = 12;
break;
}
switch语句中的事例缺少一个
中断
;因此,代码将继续通过switch语句执行
这应该是:
var myGrav:String = "NORMAL";
if (player.hitTestObject(bottom))
myGrav = "NORMAL";
if (player.hitTestObject(top))
myGrav = "INVERTED";
switch (myGrav)
{
case "NORMAL":
trace("Normal")
player.gotoAndPlay(1);
oktoJump = false;
player.y = 376.5;
break;
case "INVERTED":
trace("Inverted")
player.gotoAndPlay(8);
oktoJump = false;
player.y = 12;
break;
}
我更喜欢少一些变量,如果我能侥幸逃脱的话
switch (true){
case (player.hitTestObject(bottom)):
trace("Normal")
player.gotoAndPlay(1);
oktoJump = false;
player.y = 376.5;
break;
case (player.hitTestObject(top)):
trace("Inverted")
player.gotoAndPlay(8);
oktoJump = false;
player.y = 12;
break;
}
我更喜欢少一些变量,如果我能侥幸逃脱的话
switch (true){
case (player.hitTestObject(bottom)):
trace("Normal")
player.gotoAndPlay(1);
oktoJump = false;
player.y = 376.5;
break;
case (player.hitTestObject(top)):
trace("Inverted")
player.gotoAndPlay(8);
oktoJump = false;
player.y = 12;
break;
}
当我运行这个时,我得到“正常”在我的输出中。但是如果我通过top或bottom,则不会发生任何变化。这可能是我的hitTest对象现在的问题吗?这将测试case
NORMAL
和inversed
。如果要通过top
和bottom
,请添加其他case
语句。case常量与开关表达式匹配(myGrav
)是执行的。对不起,我说错了。当我说通过顶部或底部时,我的意思是当我的玩家实际通过点时(满足命中测试),不将“top”和“bottom”传递给我的switch语句。在switch代码执行内部或之后,将myGrav
设置为null或默认值,以防止案例再次执行。运行此操作时,我得到“Normal”在我的输出中。但是如果我通过top或bottom,则不会发生任何变化。这可能是我的hitTest对象现在的问题吗?这将测试caseNORMAL
和inversed
。如果要通过top
和bottom
,请添加其他case
语句。case常量与开关表达式匹配(myGrav
)是执行的。对不起,我说错了。当我说通过顶部或底部时,我的意思是当我的玩家实际通过点时(满足命中测试),而不是将“top”和“bottom”传递给我的switch语句。在switch代码执行内部或之后,将myGrav
设置为null或默认值以防止案例再次执行。我想这就是我想要的,对吗?因此,如果“player”点击“bottom”,状态将切换为正常。然后应用正常案例中的更改。我认为这就是我想要的,对吗?所以如果“玩家”点击“底部”,状态将切换到正常。然后应用正常情况下的更改。我认为情况总是恒定的。这很酷-回答很好。@Jasonturges不,开关的情况部分是对开关部分中定义的内容的评估。在这种情况下,从顶部开始的第一个从评估到真正的胜利。我认为案例总是恒定的。这很酷-回答得很好。@jasonturges不,切换的案例部分是对切换部分中定义的内容的评估。在这种情况下,第一个从自上而下到评估到真正的胜利。