0

我是一名网页设计专业的学生,​​在课堂上稍微接触了 Actionscript,但我的作业遇到了一些问题。任务是使用一个符号创建 10 个气球,并让它们以不同的速度上升到屏幕顶部,并停止仅使用 AS(没有时间轴动画的东西。)

我想我几乎拥有它,但我不确定为什么我不能改变每个气球的速度。他们都一起上升。有什么我做的不对吗?

    import flash.display.MovieClip;
    import flash.events.Event;

var Cball:MovieClip = new rainbow();
Cball.x = 400;
Cball.y = 575;
addChild(Cball);



var Cball1:MovieClip = new rainbow();
Cball1.x = 200;
Cball1.y = 575;
addChild(Cball1);

var Cball2:MovieClip = new rainbow();
Cball2.x = 385;
Cball2.y = 575;
addChild(Cball2);

var Cball3:MovieClip = new rainbow();
Cball3.x = 500;
Cball3.y = 575;
addChild(Cball3);

var Cball4:MovieClip = new rainbow();
Cball4.x = 600;
Cball4.y = 575;
addChild(Cball4);

var Cball5:MovieClip = new rainbow();
Cball5.x = 405;
Cball5.y = 575;
addChild(Cball5);

var Cball6:MovieClip = new rainbow();
Cball6.x = 333;
Cball6.y = 575;
addChild(Cball6);

var Cball7:MovieClip = new rainbow();
Cball7.x = 250;
Cball7.y = 575;
addChild(Cball7);

var Cball8:MovieClip = new rainbow();
Cball8.x = 100;
Cball8.y = 575;
addChild(Cball8);

var Cball9:MovieClip = new rainbow();
Cball9.x = 700;
Cball9.y = 575;
addChild(Cball9);


var xVel:Number = 0;
var yVel:Number = -5;



addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);

function onLoop(evt:Event):void {


// THis is for balloon number A ********************
Cball.x += xVel;
Cball.y += yVel;
// Check for collisions on every frame
if (Cball.y >= 575) {
    yVel = -5;
}// end if
if (Cball.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number A script ******************


// THis is for balloon number 1 ********************
Cball1.x += xVel;
Cball1.y += yVel;
// Check for collisions on every frame
if (Cball1.y >= 575) {
    yVel = -5;
}// end if
if (Cball1.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 1 script ******************


    // THis is for balloon number 2 ********************
Cball2.x += xVel;
Cball2.y += yVel;
// Check for collisions on every frame
if (Cball2.y >= 550) {
    yVel = -5;
}// end if
if (Cball2.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 2 script ******************

    // THis is for balloon number 3 ********************
Cball3.x += xVel;
Cball3.y += yVel;
// Check for collisions on every frame
if (Cball3.y >= 550) {
    yVel = -5;
}// end if
if (Cball3.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 3 script ******************

    // THis is for balloon number 4 ********************
Cball4.x += xVel;
Cball4.y += yVel;
// Check for collisions on every frame
if (Cball4.y >= 550) {
    yVel = -5;
}// end if
if (Cball4.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 4 script ******************

    // THis is for balloon number 5 ********************
Cball5.x += xVel;
Cball5.y += yVel;
// Check for collisions on every frame
if (Cball5.y >= 550) {
    yVel = -5;
}// end if
if (Cball5.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 5 script ******************

    // THis is for balloon number 6 ********************
Cball6.x += xVel;
Cball6.y += yVel;
// Check for collisions on every frame
if (Cball6.y >= 550) {
    yVel = -5;
}// end if
if (Cball6.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 6 script ******************

    // THis is for balloon number 7 ********************
Cball7.x += xVel;
Cball7.y += yVel;
// Check for collisions on every frame
if (Cball7.y >= 550) {
    yVel = -5;
}// end if
if (Cball7.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 7 script ******************

    // THis is for balloon number 8 ********************
Cball8.x += xVel;
Cball8.y += yVel;
// Check for collisions on every frame
if (Cball8.y >= 550) {
    yVel = -5;
}// end if
if (Cball8.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 8 script ******************

    // THis is for balloon number 9 ********************
Cball9.x += xVel;
Cball9.y += yVel;
// Check for collisions on every frame
if (Cball9.y >= 550) {
    yVel = -5;
}// end if
if (Cball9.y <= 25) {
    yVel = 0;
} // end if
// End of balloon number 9 script ******************
} // end onloop function
4

2 回答 2

1

您为每个球设置了相同的 yVel,因此球将以相同的速度上升。

所以尝试为球设置不同的 yVel。

var ySpeeds:Array = [-10,-9, -8, -7, -6, -5,-4,-3,-2,-1];

var save:Array = ySpeeds.concat();//save the speed

for (var i:int = 1; i <= 10; i++) {

   var ball:MovieClip = this['Cball' + i] as MovieClip;//get the target ball

   ball.x += xVel;
   ball.y += ySpeeds[i - 1];//set position

   if (ball.y >= 550) {
      ySpeeds[i - 1] = save[i - 1];//reset the speed
   } else if (ball.y <= 25) {
     ySpeeds[i - 1] = 0;
   } 
}
于 2013-10-08T02:11:51.620 回答
0

转到您制作的气球符号并调出它的动作脚本,然后将其添加到它的第一帧。

var yVel:Number = 0.0;

下一个代码适用于您的主时间线。这段代码应该几乎和你的一样,只是没有所有的打字。我不是在运行前创建每个对象,而是动态地创建它们并将它们存储在一个数组中。(有关进一步说明,请参见本文底部。)

import flash.display.MovieClip;
import flash.events.Event;

var xPosition:Number = 10.0;
var balloons:Array = new Array();
var numBalloons:int = 10;

for(var index:int = 0; index < numBalloons; index++) {
    var cBall:MovieClip = new rainbow();

    cBall.x = xPosition;
    cBall.y = 400; // <- [Insert Window Height Here] - [The Radius of the Movie Clip]

    cBall.yVel = (1 + (Math.random() * (10 - 1)); // Min + Math.random() * (Max - Min)
                                                  // Gives you a velocity (1 U 10)

    balloons.push(addChild(cBall)); // Your adding a new balloon to the array and
                                    // adding it to the stage at the same time

   xPosition += 10; // <- [Insert the Diameter of One Balloon here] and maybe
                              // some buffer space

}

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void {

    for(var index:int = 0; index < numBalloons; index++) {
        if(balloons[index].y > 0) {
            balloons[index].y += yVel; // Update each balloons y position each frame
        }
    }

}

我发现使用类而不是时间线进行编码更容易,但是这段代码应该可以工作。如果您使用类或时间线进行编码,它仍会“编译”成“.swf”。在大多数情况下,动态创建对象比一个一个创建对象要容易得多。同样在你的问题中你说“......让它们以不同的速度上升到屏幕顶部......”但是在你的代码中它们都以相同的速度运行,所以在我的代码中我只是为每个气球分配了一个随机的 yVel . 如果您有任何问题或代码不起作用,请告诉我,不过我现在在没有 Flash 的实验室,因此可能需要一段时间才能回复您。

顶部的进一步解释:
不必键入以下代码十次,

var Cball1:MovieClip = new rainbow();
Cball1.x = 200;
Cball1.y = 575;
addChild(Cball1);

我只是使用这段代码

for(var index:int = 0; index < numBalloons; index++) {
    var cBall:MovieClip = new rainbow();

    cBall.x = xPosition;
    cBall.y = 400; // <- [Insert Window Height Here] - [The Radius of the Movie Clip]

    cBall.yVel = (1 + (Math.random() * (10 - 1)); // Min + Math.random() * (Max - Min)
                                                  // Gives you a velocity (1 U 10)

    balloons.push(addChild(cBall)); // Your adding a new balloon to the array and
                                    // adding it to the stage at the same time

   xPosition += 10; // <- [Insert the Diameter of One Balloon here] and maybe
                              // some buffer space

}
于 2013-10-08T04:43:16.170 回答