我刚刚开始在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
答案 0 :(得分:3)
正如@ daniel-messer的回答中所提到的,你可以使用Array
存储你的球,而对于你的问题的第二部分,当移除最后一个球并移动其他球时,你可以使用array.pop()
删除数组的最后一个元素,然后使用array.map()
移动其他球:
FOR
编辑:
看看代码是否有效,我添加了数字以了解球是如何移动的:
您的完整代码可以是这样的:
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
这会给你这样的东西:
希望可以提供帮助。
答案 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();
这就是诀窍。
非常感谢你的帮助