AS3 - 多个图像转 On/Off 不适用于第二个 MovieClip

AS3 - Multiple Images Turn On/Off Not Working with Second MovieClip

好吧,这让我发疯了。我的 AS3 知识不是世界上最好的,但我正在努力弄清楚我在这方面哪里出了问题。

基本上,我想做的是在某些时候制作 visible/invisble 两个不同的 MovieClip。

奇怪的是,有人在回应。而另一个不是。除了 jpeg 内容和名称之外,它们都是相同的。有没有我缺少的设置?两者都匹配了 MovieClip 名称和实例名称......但是当我使用下面的代码时,HOP1 变成 off/on,但 HOP2 拒绝!我只是错过了一些愚蠢的明显偏好吗?

我会提到,我必须修改代码以使用两个不同的 MovieClip,但现在我只想关闭两个文件!

package  {

    import flash.display.MovieClip;
    import flash.events.TimerEvent;
    import flash.ui.Mouse;
    import flash.utils.Timer;
    import com.boo.CustomDate;
    import com.boo.ScreensaverSimple;

    public class Generic extends MovieClip {

        // This is where you can set the Hour of Power time start and end time (in 24 hour format e.g. 1330 for 1:30pm)
        // If there is no hour of power, simply set both numbers to 0
        private var HourOfPowerStartTime:Number = 0;
        private var HourOfPowerEndTime:Number = 0;

        private var ss:ScreensaverSimple;

        public var time_check_timer:Timer;

        private var delay_add_timer:Timer;

        public function Generic() {
            Mouse.hide();

            ss = new ScreensaverSimple;
            ss.setScreensaver(screens);

            HOP2.visible = false;

            time_check_timer = new Timer(1000);
            time_check_timer.addEventListener(TimerEvent.TIMER, checkTime);

            delay_add_timer = new Timer(1,1);
            delay_add_timer.addEventListener(TimerEvent.TIMER, addAllChildren);
            delay_add_timer.start();    
        }

        public function addAllChildren(evt:TimerEvent=null):void {
            delay_add_timer.removeEventListener(TimerEvent.TIMER, addAllChildren);
            delay_add_timer.stop();
            delay_add_timer = null;

            time_check_timer.start();

            checkTime();
        }

        public function checkTime(evt:TimerEvent=null):void {
            checkHOP2();
        }

        private function checkHOP1():void {
            if(HourOfPowerStartTime == 0 && HourOfPowerEndTime == 0)
            {
                if(HOP2.visible == true)
                {
                    HOP2.visible = false;
                }

                return;
            }

            var CurrentTime:Number = CustomDate.return24HourNumber();

            if(CurrentTime >= HourOfPowerStartTime && CurrentTime <= HourOfPowerEndTime)
            {
                if(HOP2.visible == false)
                {
                    HOP2.visible = true;
                }
            }
            else
            {
                if(HOP2.visible == true)
                {
                    HOP2.visible = false;
                }
            }
        }

    }

}
if(HOP2.visible == true)
{
    HOP2.visible = false;
}

首先,if 条件在这里完全多余。如果您考虑一下,这些行的工作方式与单独使用这一行完全相同:

HOP2.visible = false;

此外 (HOP2.visible == true)(HOP2.visible) 完全相同,您还可以将条件检查的值直接分配给变量。通常你可以减少你的功能:

private function checkHOP1():void {
  HOP2.visible = (HourOfPowerStartTime || HourOfPowerEndTime);
  if (!HOP2.visible) return;
  var CurrentTime:Number = CustomDate.return24HourNumber();
  HOP2.visible = (CurrentTime >= HourOfPowerStartTime && CurrentTime <= HourOfPowerEndTime);
}

然后我看到你打电话给 checkHOP2() :

public function checkTime(evt:TimerEvent=null):void {
    checkHOP2();
}

但我没有看到您提供的代码中定义的 checkHOP2() 函数。

同样,我没有看到您调用 checkHOP1() 函数的表单。而且我也不明白为什么要在名为 checkHOP1() 的函数中更改 HOP2 实例。它应该是某种混淆吗?