AS3脚本编写的计时器效果代码
AS3脚本编写的计时器效果代码
发布时间:2017-01-07 来源:查字典编辑
摘要:publicfunctionShowTimer(){stage.scaleMode=StageScaleMode.NO_SCALE;stag...

publicfunctionShowTimer(){

stage.scaleMode=StageScaleMode.NO_SCALE;

stage.align=StageAlign.TOP_LEFT;

initMc();

}

AS3里新加了很多的常量来代替字符串。这给我们带来了很大的方便。比如要限制影片的缩放模式为固定尺寸,AS2时的代码为

Stage.scaleMode="noScale";

值是一个字符串,在输入的时候是没有代码提示的,很容易输错(我经常是到帮助文档里把字符串复制过来)。而在AS3里的代码为:

stage.scaleMode=StageScaleMode.NO_SCALE;

原来的字符串“noScale”由常量StageScaleMode.NO_SCALE代替。这样可以使用代码提示自动完成,有效避免了因为输错而造成的程序bug(而且很方便)。同样的字符串常量还有一些事件类型比如MouseEvent.CLICK代替”click”等等。

复制代码 代码如下:

privatefunctioninitMc():void{

showTxt=newTextField();

addShow(showTxt,10,10,310,20);

addLabel(setDelayLabel,10,40,"delay:");

//...othercode

}

添加文本框和按钮。注意,需要再次引用的文本框必须显式初始化,否则在其他地方引用此变量将返回null。

复制代码 代码如下:

privatefunctionaddLabel(txt:TextField,x:uint,y:uint,text:String):void{

txt=newTextField();

txt.x=x;

txt.y=y;

txt.text=text;

addChild(txt);

}

AS3里所有的东西都是new出来的。仅仅new出来还不行,必须使用addChild()把它添加到显示列表里。

复制代码 代码如下:

privatefunctionaddBtn(mc:Sprite,...,clickHanlder:Function):void{

mc.mouseChildren=false;

mc.graphics.beginFill(0x000000,0.3);

mc.graphics.drawRect(0,0,w,h);

mc.buttonMode=true;

mc.addEventListener(MouseEvent.CLICK,clickHanlder);

addChild(mc);

//

txt=newTextField();

txt.name="btnText";

mc.addChild(txt);

}

在AS3里想要mc成为一个按钮必须设置:

mc.buttonMode=true;

这时看到鼠标经过mc时并没有变成手形,原因在最后一行,把txt添加到了mc里用来显示按钮文字,以致鼠标事件的目标对象为txt而不是期望的mc。为了解决这个问题需要加上一句:

mc.mouseChildren=false;

以保证mc为鼠标事件的目标对象(targetobjects)。

AS3里所有的可见对象都是DisplayObject的子类,而DisplayObject是EventDispatcher的子类

Sprite→DisplayObjectContainer→InteractiveObject→DisplayObject→EventDispatcher→Object

也就是说所有的可见对象都可以直接addEventListener。

mc.addEventListener(MouseEvent.CLICK,clickHanlder);

这里用常量MouseEvent.CLICK代替了事件类型“click”。此类常量以后不再赘述。

mc.graphics.beginFill(0x000000,0.3);

mc.graphics.drawRect(0,0,w,h);

AS3里所有的绘图方法都放在了Graphics里。Sprite的graphics属性就是一个Graphics。除了基本的beginFill,beginBitmapFill之类,又增加了新的drawCircle、drawEllipse、drawRect等方法,再也不用没完没了地moveTo、lineTo了。

publicfunctionstartTimer(event:MouseEvent):void{

//...codehere

}

下面是主要的内容了:Timer。

vardelay:uint=setDelayTxt.text;

varrepeatCount:uint=setRepeatCountTxt.text;

if(timer==null){

timer=newTimer(delay,repeatCount);

}

uint是AS3新加的数据类型,表示32位的正整数(int表示32位有符号的整数)。Timer的构造函数接受两个参数,delay是“timer”事件延迟的毫秒数,repeatCount是循环的次数,默认为0,即一直循环下去直到stop或者reset。

timer.addEventListener(TimerEvent.TIMER,timerHandler);

timer.addEventListener(TimerEvent.TIMER_COMPLETE,timerCompleteHandler);

timer广播两个事件,每隔delay指定的毫秒广播一次“timer”事件,循环repeatCount次之后广播“timerComplete”事件。

timer.start();

startBtn.getChildByName("btnText").text="stop";

timer在start之后开始执行,此时running属性为true。把startBtn设置为“stop”,注意AS3是拿不到startBtn的child的,因为Sprite不是动态类,无法声明它的child。这时候想要拿到startBtn内的文本框就要使用getChildByName方法。当然要先给child一个name:

//functionaddBtn

txt.name="btnText";

最后是stop和reset的区别:reset在stop之后把currentCount属性设为0。可以通过最后编译的swf体会一下。

fla文件下载

Flash动画

在线播放

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Flash教程学习
热门Flash教程学习
网页设计子分类