flash 如何实现长时间不操作自动返回第一帧……求大神指点迷津……跪谢……

2024-11-18 18:31:16
推荐回答(2个)
回答1:

第一种方法,使用影片剪辑,做一个空的影片剪辑,放到舞台上,里面帧数和你的时间设置到一样,然后在最后一帧加代码让主时间轴回到第一帧。
第二种要用定时器类,Timer,TimerEvent,计时结束后,同样回到第一帧即可

回答2:

写了一个封装类,有具体应用的fla例子,看附件

注意,这是as2版本,如果需要as3,请说明,我再更新。


/**
 * 长期鼠标、键盘不操作自动返回类
 * @author 秋色烽火
 */
class com.set2get.as2.ui.IntervalInit
{
private static var _instance:IntervalInit = new IntervalInit();
private var _taskList:Array = [];
private var _cid:Number = -1;
private var _mouseOBJ:Object;
private var _keyboardOBJ:Object;
private var _delay:Number = 1;
public function IntervalInit() 
{
_mouseOBJ = { };
_keyboardOBJ = { };
_mouseOBJ.onMouseDown = function():Void {
_instance.initCheck.apply(_instance);
}
_mouseOBJ.onMouseMove = function():Void {
_instance.initCheck.apply(_instance);
}
_keyboardOBJ.onKeyDown = function():Void {
_instance.initCheck.apply(_instance);
}
}
private function initCheck():Void {
clearInterval(_cid);
_cid = setInterval(this, "callInit",  _delay * 1000);
}
/**
* 没操作时执行
*/
private function callInit():Void {
clearInterval(_cid);
for (var i:Number = 0; i < _taskList.length; i++) {
var _obj:Object = _taskList[i];
_obj.func.apply(_obj.target);
}
}
/**
* 检查是否已经添加侦听
* @param$target
* @param$callFunction
* @return 如果已经添加,返回索引,否则未添加则返回-1
*/
public function hasTask($target:Object, $callFunction:Function):Number {
for (var i:Number = 0; i < _taskList.length; i++) {
var _obj:Object = _taskList[i];
if (_obj.target == $target && _obj.func == $callFunction) {
return i;
}
}
return -1;
}
/**
* 添加侦听
* @param$target函数执行域
* @param$callFunction 执行函数
*/
public function addTask($target:Object, $callFunction:Function):Void {
if (hasTask($target, $callFunction) != -1) return;
_taskList.push( { target:$target, func:$callFunction } );
checkTask();
_instance.initCheck.apply(_instance);
}
/**
* 移除侦听
* @param$target
* @param$callFunction
*/
public function removeTask($target:Object, $callFunction:Function):Void {
var _taskID:Number = hasTask($target, $callFunction);
if (_taskID != -1) {
_taskList.splice(_taskID, 1);
checkTask();
}
}
/**
* 移除所有函数侦听
*/
public function removeALLTask():Void {
_taskList = [];
checkTask();
}
private function checkTask():Void {
if (_taskList.length == 0 ) {
Mouse.removeListener(_mouseOBJ);
Key.removeListener(_keyboardOBJ);
} else {
Mouse.addListener(_mouseOBJ);
Key.addListener(_keyboardOBJ);
}
}
/**
* 获取类实例
*/
public static function get getInstance():IntervalInit {
return _instance;
}
/**
* 延时间隔,单位(秒),最小值不能低于1秒
*/
public function set delay($value:Number):Void {
if ($value < 1 ) return;
_delay = $value;
}
}