AS3 - 多个图像打开/关闭不使用第二个MovieClip

时间:2017-04-14 13:50:51

标签: actionscript-3 flash

好的,这让我疯了。我的AS3知识并不是世界上最好的,但我试图解决所有这些问题。

基本上,我尝试做的是在某些时候,制作可见/不可见的两个不同的MovieClip。

奇怪的是,一个人正在回应。而另一个则不是。除了jpeg内容和名称之外,它们都是相同的。我缺少一个设置吗?两者都匹配MovieClip名称和实例名称...但是当我使用下面的代码时,HOP1关闭/打开,但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;
                }
            }
        }

    }

}

1 个答案:

答案 0 :(得分:1)

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()功能的表单。而且我也不明白为什么在名为HOP2的函数中更改checkHOP1()实例。它是否被认为是某种混淆?