停止并继续For循环

时间:2012-12-25 09:51:53

标签: actionscript-3 for-loop

我在循环方面遇到了问题。这是一场捶打鼹鼠的游戏。首先,有一个for循环负责为我的痣产生不同的孔位置。我想要它以便循环将(1)生成一个数字(2)停止生成(3)根据刚刚生成的数字,为它运行一个函数。一旦完成运行该功能,然后(4)开始第二轮产生另一个数字......然后继续进行9轮。我的代码在这里。

var molePosX:Array = [166.90, 494.8, 810.7];
var molePosY:Array = [282.55, 512.45, 730.35];
var moleInUse:Boolean = false;

if (moleInUse == false){
for(var i:uint = 1; i<10; i++){
var randomHole:Number = Math.floor(Math.random()*10)+1; //Generate 10 number
trace(randomHole);
}
}


switch (randomHole){
case 1: trace("1");
moleRun(molePosX[0],molePosY[0]);
break;
case 2: trace("2");
moleRun(molePosX[1],molePosY[0]);
break;
case 3: trace("3");
moleRun(molePosX[2],molePosY[0]);
break;
case 4: trace("4");
moleRun(molePosX[0],molePosY[1]);
break;
case 5: trace("5");
moleRun(molePosX[1],molePosY[1]);
break;
case 6: trace("6");
moleRun(molePosX[2],molePosY[1]);
break;
case 7: trace("7");
moleRun(molePosX[0],molePosY[2]);
break;
case 8: trace("8");
moleRun(molePosX[1],molePosY[2]);
break;
case 9: trace("9");
moleRun(molePosX[2],molePosY[2]);
break;
case 10: trace("10");
break;
}



function moleRun(xPos:Number,yPos:Number){
    moleInUse = true;
    var mole2:Mole = new Mole();
    mole2.x = xPos;
    mole2.y = yPos;
    addChild(mole2);
    moleInUse = false;
}

非常感谢!!!

2 个答案:

答案 0 :(得分:0)

你应该用最后一个破碎的迭代号开始循环。为(1)生成随机数编写单独的函数会很容易。像:

 // this is a global or instance variable
 var iter:uint = 1;
 // funcation to generate the random number and updating the value of iteration
 function taskNumber1() {
    for(var i:uint = iter; i<10; i++) {
      var randomHole:Number = Math.floor(Math.random()*10)+1; //Generate 10 number
      iter = i;
      break;
   }
   return randomHole;
}

试试吧。

答案 1 :(得分:0)

抱歉,这不是一个真正的答案,只是建议删除那个长的switch语句。我添加了这个作为答案,因为评论并没有真正格式化代码......

看起来你想要它:

Where index/randomHole = xPos, yPos
1 = 0, 0
2 = 1, 0
3 = 2, 0
4 = 0, 1
5 = 1, 1
6 = 2, 1
7 = 0, 2
8 = 1, 2
9 = 2, 2

您可以计算出来,而不是使用长切换语句:

x = (index - 1) % 3;
y = Math.floor((index - 1) / 3.0);

或保留您的变量名称:

var xPosIndex:int = (randomHole - 1) % 3;
var yPosIndex:int = Math.floor((randomHole - 1) / 3);
moleRun(molePosX[xPosIndex],molePosY[yPosIndex]);

硬编码3是行长度,因为看起来每行中有3个值(x从0变为2)。 index / randomHole值为10将产生x = 0,y = 3(从另一个“row”开始)