2017-04-14 10 views
2

これは私を狂ったものにしています。私のAS3の知識は世界で最高のものではありませんが、私はこのすべてで間違っているところで解決しようとしています。AS3 - 複数の画像のオン/オフを切り替える

基本的に、私がしようとしているのは、特定の時間に、2つの異なるMovieClipsを表示/非表示にすることです。

奇妙なことは、1つが応答しています。もう一つはそうではありません。彼らはjpegの内容と名前を除いて同じものです。私は行方不明の設定はありますか?両方ともMovieClipの名前とインスタンスの名前が一致しています...しかし、以下のコードを使用すると、HOP1はオフ/オンになりますが、HOP2は拒否します!私はちょっと愚かに明白な好みを欠いているだけですか?

2つの異なるMovieClipsで動作するようにコードを変更する必要がありますが、今は両方のファイルをオフにするだけです。

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をトレースするとアクセスできなくなる可能性があります。次に、HOP2の2つの同一のコピーが重複している可能性があります。問題のディスプレイコンテナの名前を持つすべての子をトレースします。 – Organis

答えて

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

拳の事if条件は、ここでは、完全な冗長です。あなたが考えてみれば、これらの行は、これだけで1とまったく同じように動作:

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インスタンスを変更する理由もわかりません。何らかの難読化があると思われますか?

+0

それでした!コードのクリーンアップとすべての呼び出し名のダブルチェックが組み合わされたのがこのトリックでした。私は、コードを倍増させようとするときに衝突があったと思うが、それはトリックだ!どうもありがとうございます! – LeighPierce90

関連する問題