Flash之AS3中隐藏方法addFrameScript详析

转载请注明出处:余音绕梁网

1 强大的flash隐藏方法:addFrameScript

在利用AS3进行游戏制作时,我们常常可能用到Flash中隐藏的方法:addFrameScript。它可以让我们利用ActionScript 3.0外部文件在运行中的MoveClip中插入对象。当然,它不仅在控制动画中经常用到,理所当然,它也是as3重要的设计模式实现工具。它让我们可以再外部as3文件中利用设计模式来编写代码,摆脱对flash时间轴的支持,并能实现灵活的控制。

 

2 addFrameScript方法详细介绍

mc.addFrameScript(frameNum-1,function);

mc必须为MovieClip对象。

frameNum是目标帧数,由于该方法是从0开始计数的,所以需要将目标帧数减1。

当然,此方法不仅可以让我们在帧最后结束时来消除此方法,也能让我们实现对开始帧或中间帧的控制。同时,此方法还能实现对多个帧的监控。形式如下:

mc.addFrameScript(n1,func1,n2,func2,n3,func3);

每一个触发器都是:目标帧数减1。有时候,你想从中间的帧数来启动此方法。此种方法肯定比在一个元件上设置不同的起始和终止点要好很多。不过无论如何,通常的控制方式都是这样的:

mc.addFrameScript(n1, func1, n2, func2);
    mc.gotoAndStop(1);
    . . . .
    mc.gotoAndPlay(seqBegin);

在上面的参数里,seqBegin就是动画启始片段,它一直运行直到触发器到达另一触发帧。如下面的示例:

package {

import flash.display.MovieClip;

public class AddScriptDemo extends MovieClip{

public function AddScriptDemo(){

addFrameScript(1-1,fun1,6-1,fun6,11-1,fun11);

}

private function fun1():void{

trace(“fun1() this.currentFrame: “+this.currentFrame);

}

private function fun6():void{

trace(“fun6() this.currentFrame: “+this.currentFrame);

}

private function fun11():void{

trace(“fun11() this.currentFrame: “+this.currentFrame);

}

}

}

 

3 addFrameScript方法与帧标签结合使用

在游戏制作的动作设计中,我们经常使用到帧标签,但是addFrameScript方法只能识别帧数,无法识别帧标签。为了和设计人员更好的合作,我们需要将帧标签转换为目标帧数。我们可以采用以下方法实现:

package

{

import flash.display.FrameLabel;

import flash.display.MovieClip;

public class AddScriptDemo extends MovieClip

{

public function AddScriptDemo()

{

//                       addFrameScript(1-1,fun1,6-1,fun6,11-1,fun11);

addFrameScript(getFrameByName(“a1″,this)-1,fun1,getFrameByName(“a2″,this)-1,fun6,getFrameByName(“a3″,this)-1,fun11);

}

private function fun1():void{

trace(“fun1() this.currentFrame: “+this.currentFrame);

}

private function fun6():void{

trace(“fun6() this.currentFrame: “+this.currentFrame);

}

private function fun11():void{

trace(“fun11() this.currentFrame: “+this.currentFrame);

}

public function getFrameByName(name:String,mc:MovieClip):int{

var arr:Array = mc.currentLabels;

for(var i:uint=0;i<arr.length;i++){

var frameLabel:FrameLabel = arr[i];

if(frameLabel.name == name){

return frameLabel.frame;

}

}

return -1;

}

}

}

即先获得帧标签所在的其实帧数,就是我们的目标帧数,然后使用addFrameScript方法。



发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(Spamcheck Enabled)