ActionScript 3循环

时间:2015-07-16 21:56:27

标签: actionscript-3 flash

我刚刚开始在AS3中使用循环,我还有很多需要学习的地方。这是个问题。下面是一个循环,在舞台上将5个球放在另一个的顶部。到现在为止还挺好。但是,我想在点击一个按钮时创建一个情况,底部球被移除,然后每个球逐个取代它下面的球,每次点击继续这个,直到所有球都消失。 。我用add / remove child创建了这种情况,我认为循环可能更有效。我只是不知道如何访问球,因为我没有实例名称或类名,我也可以参考。

var ball: gBall4M;
var i: Number;

for (i = 0; i < 5; i++) {

  ball = new gBall4M();
  ball.x = 331.30;
  ball.y = 25 + i * 17
  addChild(ball);
}
function release2Ball2(event: MouseEvent): void {

这是我想要获得的效果https://youtu.be/B4GLolw8QVA

3 个答案:

答案 0 :(得分:3)

正如@ daniel-messer的回答中所提到的,你可以使用Array存储你的球,而对于你的问题的第二部分,当移除最后一个球并移动其他球时,你可以使用array.pop()删除数组的最后一个元素,然后使用array.map()移动其他球:

FOR

编辑:

看看代码是否有效,我添加了数字以了解球是如何移动的:

enter image description here

您的完整代码可以是这样的:

function release2Ball2(event:MouseEvent): void
{
    if(balls.length > 0){
        ball = balls.pop();             // remove and get the last element of the array
        ball.parent.removeChild(ball);  // remove that element from the DisplayObjectContainer 
        function move_ball(item:Ball, index:int, array:Array):void {
            item.y += 17;
        }
        // move the rest of elements
        balls.map(move_ball, this);
    }
}

编辑2:

要做这种动画,你可以使用var balls:Array = [], ball:gBall4M; for (var i:int = 0; i < 5; i++) { ball = new gBall4M(); ball.x = 331.30; ball.y = 25 + i * 17; balls.push(ball); addChild(ball); } btn.addEventListener(MouseEvent.CLICK, release2Ball2); function release2Ball2(event:MouseEvent):void { if (balls.length > 0) { ball = balls.pop(); ball.parent.removeChild(ball); function move_ball(item:gBall4M, index:int, array:Array):void { item.y += 17; } balls.map(move_ball, this); } } 这样的:

Timer

这会给你这样的东西:

enter image description here

希望可以提供帮助。

答案 1 :(得分:0)

只需将实例保存在稍后可以使用的数组或类似内容中。

我希望您使用的是代码文件,而不是直接在Flash编辑器内的框架内编写代码。否则你可能会遇到问题。

与此类似的东西应该有效

package {
  class Main {
    var balls:Array = [];

    function createBalls() {
      var ball: gBall4M;
      var i: Number;

      for (i = 0; i < 5; i++) {

        ball = new gBall4M();
        ball.x = 331.30;
        ball.y = 25 + i * 17;
        balls.push(ball); //Save them to array
        addChild(ball);
      }
    }

    function release2Ball2(event: MouseEvent): void {
      var clickedBall:gBall4M = event.currentTarget as gBall4M; //this might be wrong depending on what you are listening for, and what type of object gBall4M is...
      for(var i=0; i<balls.length; ++i) {
        if(balls[i] == clickedBall) {
          balls[i].splice(i, 1); //remove instance from array
          removeChild(clickedBall); //remove instance from display list
          break;
        }
      }
    }
  }
}

答案 2 :(得分:0)

好的,我明白了。在第1帧上使用此代码

function release2Ball2(event: MouseEvent): void {
  if (ballA.length > 0) {
  ball = ballA.pop();
  removeChild(ball);
  ball = null
  gotoAndPlay(2);

  }
}
stop();

在第10帧使用此代码:

for (i = 0; i < ballA.length; i++) {
  ballA[i].y += 17;
stop();

这就是诀窍。

非常感谢你的帮助