5D艺术网首页
商城
|
资讯
|
作品
|
博客
|
教程
|
论坛
登录
注册
加为好友
发短消息
来自:上海
性别:先生
最后登录:2011-08-28
http://yunkai.5d.cn/
1989年用basic写了自己第一个游戏程序桥牌,1994年当小学老师,2003年开始了第一份IT工作做flash技术支持,到了2011年发现自己已经做了8年的flash开发,现在致力于游戏开发。
首页
|
新闻
|
话题
|
博客
|
相册
|
艺术作品
|
社交关系
|
留言板
|
社交圈
2004/11/09 | 定时器的编写-事件源,事件,委派与相关模式简析
类别(AS3)
|
评论
(3)
|
阅读(849)
|
发表于 14:32
如果我在FLASH中用脚本打开麦克风,想实时显示麦克风的音量,怎么做呢?
一、可以在onEnterFrame事件中刷新activityLevel麦克风的音量,但是这样做,一旦影片的帧数或大或小,刷新效果不是很好。
二、使用setInterval这个定时函数来刷新activityLevel麦克风的音量,但是这样做,如果在其他需要定时器的地方无法重用,因为setInterval函数依赖于刷新activityLevel麦克风的音量方法。
三、如果我写一个定时器类,每隔一段时间通知来刷新activityLevel麦克风的音量,这样定时器也可以在需要它的其他的地方工作,因为它不依赖于任何具体的逻辑。
下面是源代码:
/**
ActionScript Class File -- Created with SAPIEN Technologies PrimalScript 3.1
@class 定时器控制类
@package lm.utils
@author yunkai
@codehint 请使用addEventListener来响应onTimer事件
@example var t=new LTimer(80);
t.addEventListener("onTimer",Deletgate(this,onTimer));
@version 041109
*/
import mx.events.EventDispatcher;
import mx.utils.Delegate;
class lm.utils.LTimer {
//定时器索引
private var _id:Number;
//相隔多少时间触发一次事件广播
private var _time:Number;
//委派引用
private var _publishMsg:Function;
//使用LEventDipatcher所需要定义的三个函数
private var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
/**
* @description 构造函数
* @param time 相隔多少时间触发一次事件广播
*/
public function LTimer(time:Number){
this._time=time;
this._publishMsg=Delegate.create(this,publishMsg);
LEventDispatcher.initialize(this);
}
/**
* @description 启动定时器
*/
public function startTimer(){
this._id=setInterval(this._publishMsg,this._time);
}
/**
* @description 结束定时器
*/
public function endTimer():Void{
clearInterval(this._id);
}
/**
* @description 定时广播onTimer事件
*/
public function publishMsg(){
this.dispatchEvent({type:"onTimer",target:this});
}
}
事件源就是定时器类,事件就是onTimer,委派在定时器内部使用了一处,在使用定时器也使用了一处,定时器内部使用委派是想将publishMsg的函数的this路径指向LTimer类的this,方便于扩展这个定时器,外面的委派使用可以参见我的BLOG关于Delegate使用技巧一文!
0
评论
Comments
日志分类
首页
[33]
AS3
[20]
工作日记
[10]
个人简介
[2]
ASV
[1]