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