|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
FlashScreensaversMaker能够迅速的将您的Flash作品转化为屏保程序。
动画事务
我们但愿可以利用代码让物体动起来,并同意屏幕重复地革新。后面看过一个利用enterFrame影片事务的示例。如今把这类办法使用到AS3中,只必要增添一个enterFrame事务的侦听器便可:
addEventListener(Event.ENTER_FRAME,onEnterFrame);
别忘了导进Event类,并创立一个名为onEnterFrame的办法。人们经常利诱,只要一帧怎样能实行enterFrame(进进帧)事务呢?现实上,播放头并不是真正地在进进下一帧,它只停止在第一帧上,并非把播放头挪动到下一帧才构成了enterFrame事务,而是用另外一种办法:Flash告知播放头什么时候举行挪动,能够把enterFrame当作一个准时器,只是有些不准确。
上面我们看看第一个AS3动画:
package{
importflash.display.Sprite;
importflash.events.Event;
publicclassFirstAnimationextendsSprite{
privatevarball:Sprite;
publicfunctionFirstAnimation(){
init();
}
privatefunctioninit():void{
ball=newSprite();
addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0,0,40);
ball.graphics.endFill();
ball.x=20;
ball.y=stage.stageHeight/2;
ball.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
privatefunctiononEnterFrame(event:Event):void{
ball.x++;
}
}
}
init函数创立了一个名为ball的Sprite影片,并为其创建事务侦听。onEnterFrame函数卖力ball的活动及屏幕革新事情。这是进修本书内容的基本,也是利用ActionScript创立动画的基本,以是务需要把握。
显现列表
在AS3之前,人们能够创立多个分歧范例的可视化工具,包含影片剪辑,图形,按钮,文本框,位图,组件和基础外形。这些工具没有真实的条理布局,它们的创立、删除、操纵办法也均不不异。好比,在IDE中,可使用attachMovie,duplicateMovieClip或createEmptyMovieClip的办法将影片剪辑安排于舞台上,文本框能够在开辟情况中创立也能够用代码创立。而在利用位图(bitmap),视频(video)及组件(component)时,它们就像是来自于其余星球,终极被倔强地放在一同。
关于AS3来讲,这些工具都有了一致的回属。在舞台上一切可见的工具都承继自DisplayObject类。换句话讲,这些工具都是一个小家庭的成员,并以不异的情势事情,利用一样的体例举行创立,置进,删除,操纵。不管创立Sprite影片,影片剪辑或文本框的办法都十分邻近,我们必要利用new关头字来完成,创立恣意范例的工具。为了证实这一点,请看上面三条示例:
varmyTextfield:TextField=newTextField();
varmyMovieClip:MovieClip=newMovieClip();
varmySprite:Sprite=newSprite();
假如我们创立的是一个影片剪辑或Sprite影片的话,就能够间接内里举行绘制,如:
mySprite.graphics.beginFill(0xff0000);
mySprite.graphics.drawCircle(0,0,40);
mySprite.graphics.endFill();
但只要这些代码,还不克不及看到效果,这就激发了接上去要会商的显现列表。“显现列表”是个新名词,能够了解为一颗由可视工具组成的树。舞台就是树根,默许为可见的,在舞台上,我们能够有良多影片剪辑或可视工具(文本框,图形等),把它们到场舞台后,也就成为可见的了。
这些影片中大概还嵌套着良多层的可视工具,这就是我们所谓的显现列表。AS2与AS3显现列表最年夜的分歧在于,AS2中,当利用attach或createEmptyMovieClip办法创立影片剪辑时,必需指定它位于树的哪一个地位。如许一来,影片剪辑要安排在列表的指定地位。当删除该影片时,一样也没法改动它在列表中的地位或在列表中移除它。
在AS3中,创立了一些Sprite影片后,不会主动被到场显现列表。在下面的示例中我们发明,创立一个Sprite后,其实不触及父级影片(parent)或深度(depth)的成绩,如许就能够在它没有到场视觉列表之前就对其举行操纵了。说到舞台(Stage),能够把这些显现工具看做是幕后的演员,固然看不到,但的确存在,并时候筹办着表态的一刻,我们利用addChild办法把工具到场显现列表。将文档类作为树根,向内里到场孩子时,会本人被设置为可见的。
如今,在后面的例子中再到场创立Sprite工具和addChild办法,以下:
varmySprite:Sprite=newSprite();
mySprite.graphics.beginFill(0xff0000);
mySprite.graphics.drawCircle(0,0,40);
mySprite.graphics.endFill();
addChild(mySprite);
假如人人有乐趣试一下这段代码的话,请把它们写进后面所给的类框架的init函数中。请注重,绘制出的圆默许地位是0,0点,能够改动其x和y属性。还要注重,创立新影片时不再必要像AS2那样往设置深度(depth)。固然深度办理为主动实行,但我们另有指定深度或改动深度的办法,这部分等未来用到时再讲。
利用removeChild办法,从显现列表中删除一个工具,并以该工具的名字作为参数。第一,删除一个工具,不是往扑灭它,工具仍然坚持原样,只是临时被移除,当再次被到场到显现列表中,工具仍坚持本来的形态。换句话讲,假如显现工具内里绘制了图形,或是已加载了一些内部信息,那末将它从头到场显现列表后,就不用再往重绘或重载这些信息。第二,把该工具从头到场显现列表后,还能够为它指定处在显现列表中的地位,这就是我们所熟知的重定父级。
从一个影片剪辑中删除一个工具,再把它加载到另外一个影片中剪辑中,并坚持方才被删除时的形态,在之前是不成能完成的。现实上,偶然其实不必要往删除影片,由于,一个子工具只能有一个父级,把它到场到另外一个父级中,就会主动从本来的父级中删除。请看上面示例:
package{
importflash.display.Sprite;
importflash.events.MouseEvent;
publicclassReparentingextendsSprite{
privatevarparent1:Sprite;
privatevarparent2:Sprite;
privatevarball:Sprite;
publicfunctionReparenting(){
init();
}
privatefunctioninit():void{
parent1=newSprite();
addChild(parent1);
parent1.graphics.lineStyle(1,0);
parent1.graphics.drawRect(-50,-50,100,100);
parent1.x=60;
parent1.y=60;
parent2=newSprite();
addChild(parent2);
parent2.graphics.lineStyle(1,0);
parent2.graphics.drawRect(-50,-50,100,100);
parent2.x=170;
parent2.y=60;
ball=newSprite();
parent1.addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0,0,40);
ball.graphics.endFill();
ball.addEventListener(MouseEvent.CLICK,onBallClick);
}
publicfunctiononBallClick(event:MouseEvent):void{
parent2.addChild(ball);
}
}
}
该类中有三个Sprite工具:parent1,parent2,ball。parent1,parent2影片间接到场显现列表,并在影片中绘制了正方形。Ball影片被到场到parent1,就相称于到场了显现列表并可见。当小球被点击时,它将被到场parent2影片中。请注重,没有改动Ball的x,y坐标的代码,之以是发生挪动是由于Ball被加载到了分歧地位的Sprite影片中。Sprite影片被删除后再被到场显现列表,Ball仍会呈现。
本地或全局转换应用于任何对象。但非真正意义上的3D,层的位置关系其显示问题。 |
|