2017-04-14 73 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