评论:动画事件


我们希望能够使用代码来移动物体,使屏幕刷新一次又一次。看到使用enterFrame事件早期电影的一个例子。现在,使用这种方法在3中,你只需要为enterFrame事件添加一个监听器:


AddEventListener(event.enter_frame,onEnterFrame);


别忘了进口。




动画事件


我们希望能够使用代码来移动物体,使屏幕刷新一次又一次。看到使用enterFrame事件早期电影的一个例子。现在,使用这种方法在3中,你只需要为enterFrame事件添加一个监听器:


AddEventListener(event.enter_frame,onEnterFrame);


别忘了进口的事件类和创建一个命名的方法在每一帧。人们常常疑惑,怎么能一架执行enterFrame(成帧)的事件吗事实上,播放头是不是真的在下一个框架,它停留在第一帧,而不是播放头移动到下一帧之前的enterFrame事件的形成,但在另一方面:闪光告诉播放头移动时,能想到一个enterFrame作为计时器,但一些做不准确的。
让我们先看看3动画:


包{
进口flash.display.sprite;
进口flash.events.event;
公开课一、动画原型延伸雪碧{
私人var球:雪碧;
公共职能一、动画原型(){
init();
}
私有函数init():无效{
球=新雪碧();
addChild(球);
Ball.graphics.beginFill(0xFF0000);
(0, 0, 40)ball.graphics.drawcircle;
Ball.graphics.endFill();
球,x=20;
球。Y = stage.stageheight / 2;
Ball.addEventListener(event.enter_frame,onEnterFrame);
}
私有函数onEnterFrame(事件:事件:void){
球;
}
}
}


init函数创建一个精灵球和电影的名字建立事件听。onEnterFrame函数负责运动的球和屏幕刷新。这是学习这本书的内容的基础上,并使用Actionscript创建动画的基础,所以一定要掌握它。

显示列表


在3,人们可以创造出很多不同类型的视觉对象,包括影片剪辑、图形、按钮、文本框、位图、元件和基本形状。这些对象没有真正的层次,和他们的创作,删除,操作方法是不同的。例如,在井手,你可以用attachmovie,复制或先建立云的影片剪辑把影片剪辑的舞台上。文本框可以在开发环境中创建,也可以由代码创建,在使用位图、视频和组件时,它们来自其他星球,它们最终很难聚集在一起。


为3,这些对象都有一个统一的所有权。舞台上所有可见的对象从DisplayObject类继承的。换句话说,这些对象是以同样的方式,一个大家庭,成员工作和创建、插入、删除操作在相同的方式。不管如何创建雪碧电影,电影剪辑或文本框,我们需要使用新的关键字来创建任何类型的对象。为了证明这一点,看看下面的三个例子:


无功mytextfield:TextField =新的文本框();
无功mymovieclip:影片剪辑=新的影片剪辑();
无功mysprite:雪碧=新的精灵();


如果我们创建一个电影剪辑或雪碧电影,我们可以直接绘制,如:


MySprite.graphics.beginFill(0xFF0000);
(0, 0, 40)mysprite.graphics.drawcircle;
MySprite.graphics.endFill();


但是只有这些代码不能看到效果,这将导致下一个将要讨论的显示列表。Ldquo;显示列表;一个新名词,可以理解为由视觉对象组成的树。默认是可见的。在舞台上,我们可以有许多电影剪辑或视觉对象(文本框,图形等),并加入他们在舞台上。


这些影片也可以嵌套的多层次的视觉对象,这就是我们所说的显示列表。的最大区别2和3显示列表是在2,当附加或先建立云的影片剪辑的方法来创建影片剪辑,它必须指定所在的树。作为一个结果,电影剪辑应放置在列表中指定的位置。当电影被删除,它不能改变其列表中的位置或删除列表中的。


在3,一些雪碧电影创作后,它不会自动添加到显示列表。在上面的例子中,我们发现,在创建一个精灵,它不涉及亲子电影的问题(母)和深度(深度),所以它可以在它直观的列表。说到阶段(阶段),我们可以把这些显示对象的幕后的演员,虽然我们看不到他们,但他们确实存在,准备出场,我们使用addChild添加对象到显示列表,文档类为根,加上孩子,和它将被设置为可见。
现在,在前面的例子中,加入雪碧对象和addChild方法如下:


无功mysprite:雪碧=新的精灵();
MySprite.graphics.beginFill(0xFF0000);
(0, 0, 40)mysprite.graphics.drawcircle;
MySprite.graphics.endFill();
addChild(mysprite);


如果你在尝试这个代码感兴趣,请把它们写在类框架的初始化函数,你给了。注:圈的默认位置为0,0点,可以改变它的x和y的属性。而且,你不需要设置深度(深度)为2时你创建一个新的电影。虽然深度管理是自动执行的,我们也有一个指定的深度或深度变化的方法,这部分将再次使用。
使用removechild方法从显示列表中删除一个对象,使用该对象的名称作为参数。首先,要删除一个对象不是摧毁它。对象保持不变,但它暂时被删除。当它被添加到显示列表,物体将保持原来的状态。换句话说,如果绘制对象,或一些外部信息已加载,无需重绘或重新加载的信息后,它将被添加到显示列表。二、对象后,重新加入到显示列表,你也可以在它的显示列表中指定的位置,这被称为重新定义父。


从一个视频剪辑中删除一个对象,然后将其加载到另一个电影剪辑中,并保持刚刚删除的状态在过去是不可能的。事实上,不需要删除该影片,因为一个孩子只能有一个父代,将其添加到另一个父类中,将自动从父代中删除。请看下面的示例:


包{
进口flash.display.sprite;
进口flash.events.mouseevent;
公共类抚育延伸雪碧{
机车的parent1:雪碧;
机车的parent2:雪碧;
私人var球:雪碧;
公共职能重新排列(){
init();
}
私有函数init():无效{
parent1 =新的精灵();
addChild(parent1);
(1, 0)parent1.graphics.linestyle;
parent1.graphics.drawrect(50 - 50, 100, 100);
parent1 x = 60;
parent1 y = 60;
parent2 =新的精灵();
addChild(parent2);
(1, 0)parent2.graphics.linestyle;
parent2.graphics.drawrect(50 - 50, 100, 100);
parent2 x = 170;
parent2 y = 60;
球=新雪碧();
parent1.addchild(球);
Ball.graphics.beginFill(0xFF0000);
(0, 0, 40)ball.graphics.drawcircle;
Ball.graphics.endFill();
Ball.addEventListener(MouseEvent.CLICK,onballclick);
}
公共功能onballclick(事件:事件:void){
parent2.addchild(球);
}
}
}


在这个班上有三个精灵对象:parent1,parent2,和ball.parent1,的parent2膜直接加入显示列表和画了一个正方形的电影。球膜添加到parent1,是添加一个显示列表,可见相当。当球被点击时,它将被添加到parent2膜。注意这里是X没有变化,Ball的代码Y坐标,这是因为球的移动加载到不同地点的不同雪碧电影。雪碧电影被删除,然后添加到显示列表,和球仍然会出现。