Actionscript 3 使用for循环设置动画?
我使用for循环将多个对象添加到舞台上,从那里我想设置它们的动画,但当我尝试只移动一个球时 这是我的密码 (球从外部类中拉出)Actionscript 3 使用for循环设置动画?,actionscript-3,for-loop,Actionscript 3,For Loop,我使用for循环将多个对象添加到舞台上,从那里我想设置它们的动画,但当我尝试只移动一个球时 这是我的密码 (球从外部类中拉出) 包 { 导入flash.display.Sprite; 导入flash.events.Event; 公共类Main扩展了Sprite { 私人var球:球; 私有变量ax:Number=4; 公共功能Main() { init(); } 私有函数init():void { 对于(变量i:Number=0;i
包
{
导入flash.display.Sprite;
导入flash.events.Event;
公共类Main扩展了Sprite
{
私人var球:球;
私有变量ax:Number=4;
公共功能Main()
{
init();
}
私有函数init():void
{
对于(变量i:Number=0;i<10;i++)
{
球=新球();
ball.x=Math.random()*stage.stageWidth;
ball.y=Math.random()*stage.stageHeight;
addChild(ball);
}
addEventListener(Event.ENTER_FRAME,onEnterFrame1);
}
私有函数onEnterFrame1(事件:事件):void
{
ball.x+=ax;
}
}
}
谢谢大家! 您应该将所有对象推入数组,并更改每个球的x属性
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
private var ball:Ball;
private var ax:Number = 4;
private var balls:Array;
public function Main()
{
init();
}
private function init():void
{
balls = new Array();
for(var i:Number = 0; i < 10; i++)
{
ball = new Ball();
ball.x = Math.random() * stage.stageWidth;
ball.y = Math.random() * stage.stageHeight;
addChild(ball);
balls.push(ball);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame1);
}
private function onEnterFrame1(event:Event):void
{
for(var i:int = 0; i < balls.length; i++)
{
balls[i].x += ax;
}
}
}
}
包
{
导入flash.display.Sprite;
导入flash.events.Event;
公共类Main扩展了Sprite
{
私人var球:球;
私有变量ax:Number=4;
私有变量球:数组;
公共功能Main()
{
init();
}
私有函数init():void
{
balls=新数组();
对于(变量i:Number=0;i<10;i++)
{
球=新球();
ball.x=Math.random()*stage.stageWidth;
ball.y=Math.random()*stage.stageHeight;
addChild(ball);
推(球);
}
addEventListener(Event.ENTER_FRAME,onEnterFrame1);
}
私有函数onEnterFrame1(事件:事件):void
{
对于(变量i:int=0;i
创建10个球
private-var-ball:ball代码>
var-ball:ball在init方法中,仅在for之前
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class Main extends MovieClip
{
private var ballsContainer:MovieClip;
private var ax:Number;
public function Main()
{
init();
}
private function init():void
{
ax = 4;
ballsContainer = new MovieClip();
addChild(ballsContainer);
var ball:Ball;
for (var i:Number = 0; i < 10; i++)
{
ball = new Ball();
ball.x = Math.random() * stage.stageWidth;
ball.y = Math.random() * stage.stageHeight;
ballsContainer.addChild(ball);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame1);
}
private function onEnterFrame1(event:Event):void
{
for (var i:Number = 0; i < ballsContainer.numChildren; i++)
{
Ball(ballsContainer.getChildAt(i)).x += ax;
}
}
}
}
包
{
导入flash.display.MovieClip;
导入flash.events.Event;
公共类Main扩展了MovieClip
{
私人var ballsContainer:MovieClip;
私有变量ax:数量;
公共功能Main()
{
init();
}
私有函数init():void
{
ax=4;
ballsContainer=新电影剪辑();
addChild(ballsContainer);
var球:球;
对于(变量i:Number=0;i<10;i++)
{
球=新球();
ball.x=Math.random()*stage.stageWidth;
ball.y=Math.random()*stage.stageHeight;
ballsContainer.addChild(ball);
}
addEventListener(Event.ENTER_FRAME,onEnterFrame1);
}
私有函数onEnterFrame1(事件:事件):void
{
for(变量i:Number=0;i
你可以让球自己控制自己的运动
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.getTimer;
public class Ball extends MovieClip {
private var currentTime = getTimer();
public function Ball(){
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame1(event:Event):void {
diff = currentTime - prevTime;
x += diff * ax
prevTime = currentTime;//update for next go around
}
}
}
那么,为什么要使用计时器而不是帧来设置动画呢?嗯,你不必这么做,但你不能总是确定两帧之间的时间。在这种情况下,您的速度总是恒定的,即使您的帧速率不是恒定的 如果您这样做,您将得到错误,因为您不能将init()中的局部变量用于另一个方法。在这种情况下,使用MovieClip而不是Array是过分的。;)在大多数情况下,这是过分的,除非你想旋转/平移/缩放一定数量的所有球。然后你可以使用movieclipOr,在这种情况下,
Sprite
更合适。哦,onEnterFrame1是一个糟糕的命名。在给出示例代码时,您可以立即修复它;)谢谢你的工作!!!好的,那么为什么我们要把球推到球阵列中呢?这是因为数组可以包含多个对象吗?好的,在onEnterFrame1函数中还有一件事,为什么我们要把ipackage
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.getTimer;
public class Ball extends MovieClip {
private var currentTime = getTimer();
public function Ball(){
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame1(event:Event):void {
diff = currentTime - prevTime;
x += diff * ax
prevTime = currentTime;//update for next go around
}
}
}