初学者动作脚本/ Flash - 符号的多个实例,速度

时间:2013-10-08 01:32:41

标签: actionscript-3 flash actionscript

我是一名网页设计专业的学生,​​在课堂上轻轻触及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

2 个答案:

答案 0 :(得分: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;
   } 
}

答案 1 :(得分: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

}