这个switch / case语句总是默认,我不希望发生这种情况。此外,我没有错误。有人可以告诉我我的问题是什么吗?该功能总能追踪我的预期,但我希望它能在推台上放置推土机。
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.ui.Mouse;
//START SCREEN
var startScreen: MovieClip;
var bulldozer: MovieClip;
startClick.addEventListener(MouseEvent.CLICK, startGame);
function startGame(event: MouseEvent): void {
startScreen.parent.removeChild(startScreen);
startClick.parent.removeChild(startClick);
var enemyGenerator: Number = Math.random();
switch (enemyGenerator) {
case 0.8 <= enemyGenerator && enemyGenerator <= 1:
stage.addChild(bulldozer);
bulldozer.x = stage.x = 150;
bulldozer.y = stage.y = 150;
break;
case 0.6 <= enemyGenerator && enemyGenerator < 0.8:
stage.addChild(bulldozer);
bulldozer.x = stage.x = 250;
bulldozer.y = stage.y = 250;
break;
case 0.4 <= enemyGenerator && enemyGenerator < 0.6:
stage.addChild(bulldozer);
bulldozer.x = stage.x = 350;
bulldozer.y = stage.y = 350;
break;
case 0.2 <= enemyGenerator && enemyGenerator < 0.4:
stage.addChild(bulldozer);
bulldozer.x = stage.x = 400;
bulldozer.y = stage.y = 400;
break;
case 0 <= enemyGenerator && enemyGenerator < 0.2:
stage.addChild(bulldozer)
bulldozer.x = stage.x = 450;
bulldozer.y = stage.y = 450;
break;
default:
trace (enemyGenerator);
}
startClick.removeEventListener(MouseEvent.CLICK, startGame);
}
答案 0 :(得分:1)
因为你错了。
问题1 :enemyGenerator
变量的值类型是什么?
- 答案:int
问题2:您的切换条件的值类型是什么? - 答案:布尔
因此将int与布尔值进行比较总是假的......
ex: 0.9 == true // will be false
您需要将您的开关更改为IF-ELSE IF条件......如下所示
var enemyGenerator: Number = Math.random();
if(enemyGenerator >= 0.8)
{
stage.addChild(bulldozer);
bulldozer.x = stage.x = 150;
bulldozer.y = stage.y = 150;
}
else if(enemyGenerator >= 0.6)
{
stage.addChild(bulldozer);
bulldozer.x = stage.x = 250;
bulldozer.y = stage.y = 250;
}
else if(enemyGenerator >= 0.4)
{
stage.addChild(bulldozer);
bulldozer.x = stage.x = 350;
bulldozer.y = stage.y = 350;
}
else if(enemyGenerator >= 0.2)
{
stage.addChild(bulldozer);
bulldozer.x = stage.x = 400;
bulldozer.y = stage.y = 400;
}
else
{
stage.addChild(bulldozer)
bulldozer.x = stage.x = 450;
bulldozer.y = stage.y = 450;
}
另外,为什么不在IF语句之前或之后添加子buldozer ..除了在每个if / case分支中总是写它?
答案 1 :(得分:0)
案例陈述仅在您完全等同时才起作用。像这样:
case condition 1:
如果您想进行比较,则需要将其转换为if
和else if
答案 2 :(得分:0)
您的个案陈述无效。 Switch-case操作符仅执行相等性检查。如果您执行Math.random()
调用,则会收到一个永远不会严格等于某个值的值。要从给定的N
种可能性中进行选择,您可以使用int
并像这样随机调用:
var r:int=Math.floor(N*Math.random());
然后,r
将保存一个从0到N-1的值,然后您可以切换。
switch(r) {
case 0: // bla bla
case 1: // bla bla bla
...
case N-1: // you know the drill
}
答案 3 :(得分:0)
这是一个棘手的问题。一旦以上人员回答正确的事情就是动作脚本有它的技巧。
如果您只是将switch (enemyGenerator)
替换为switch (true)
,那么您的开关可以正常工作。
我只想表明你想做的事情是可能的,但我建议使用Adrian所描述的if语句。
干杯