2017-04-14 71 views
2

好吧,这一直让我疯狂。我的AS3知识并不是世界上最好的,但我正试图弄清楚所有这些都会出错。AS3 - 多个图像打开/关闭不使用第二个影片剪辑

基本上,我想要做的是在某些时候,使可见/隐藏两个不同的影片剪辑。

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

我会提及,我将不得不修改代码以使用两个不同的影片剪辑,但现在我只想让这两个文件关闭!

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; 
       } 
      } 
     } 

    } 

} 
+0

HOP2没有针对初学者申报。跟踪HOP2可能无法访问。然后,你可能会有2个相同的HOP2副本。跟踪所有儿童的陈列容器名称。 – Organis

回答

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()。它是否会造成某种混淆?

+0

这样做!代码清理和双重检查所有调用名称的结合起到了诀窍。我认为在试图将代码翻倍时存在冲突,但这已经成功了!非常感谢! – LeighPierce90