【问题标题】:How do I stop a timed event from happening?如何阻止定时事件的发生?
【发布时间】:2013-11-29 05:31:27
【问题描述】:

我正在制作一个游戏,用户点击昆虫并试图获得高分。当用户点击一只昆虫时,昆虫会播放动画并在此代码中停留 2 秒:

import flash.events.MouseEvent;
import flash.display.MovieClip;
import fl.motion.Animator;
import flash.events.*;
play();
var mysound:squish = new squish(); 
this.addEventListener(MouseEvent.CLICK, kill);
this.dead = false;
function kill(e:MouseEvent):void 
{
    this.dead=true;
    mouseChildren=false
    mysound.play();
    gotoAndPlay(21);
    this.removeEventListener(MouseEvent.CLICK, kill);
    flash.utils.setTimeout(removeSelf,2000);

}

function removeSelf():void
{
    this.parent.removeChild(this);
}

当用户暂停游戏时,敌人会停止并且变得隐形。唯一的问题是,当用户点击昆虫并按下暂停按钮时,昆虫会在那里停留 2 秒。当人暂停游戏时如何取消计时器以使屏幕上没有昆虫?

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    一些提示:

    • 永远不要使用超时,它们会产生糟糕的、不可持续的、难以调试的代码。请改用计时器。 Timer 提供了一些不错的小功能,例如:重复时间、暂停、恢复和重置计时器。因此,您可以将计时器超时设置为 2000 毫秒,重复一次并设置事件侦听器 TimerEvent.TIMER_COMPLETE 以移除昆虫等。您可以在暂停游戏时暂停计时器并在需要时恢复。

    • 如果您确实使用超时,请为其分配一个 uint 并使用 clearTimeout() 方法来停止它。

    • this.parent.removeChild(this); 这样的构造是丑陋的。相反,调度一个事件作为替代方案,让父级管理死的错误(从数组中删除,显示列表等)。

    • 在每个错误实例中存储声音会占用比所需更多的内存。创建一个静态声音库类并从中调用 play() 方法。

    【讨论】:

      猜你喜欢
      • 2016-01-14
      • 2010-11-25
      • 2021-04-22
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      相关资源
      最近更新 更多