2017-04-14 5 views
2

좋아,이 말은 나를 미치게했다. 내 AS3 지식은 세계에서 최고는 아니지만 나는이 모든 문제에 내가 어디로 가고 있는지 알아 내려고 노력하고있다.AS3 - 여러 이미지가 두 번째 영화 클립에서 작동하지 않음 켜기/끄기

기본적으로 내가하려고하는 것은 특정 시간에 두 개의 다른 MovieClips를 보이거나 보이지 않게 만드는 것입니다.

이상한 것은 응답하는 것입니다. 그리고 다른 하나는 그렇지 않습니다. 그들은 jpeg 내용과 이름을 제외하고 모두 동일합니다. 내가 놓친 설정이 있습니까? 둘 다 MovieClip 이름과 인스턴스 이름을 일치 시켰습니다 ...하지만 아래 코드를 사용하면 HOP1이 꺼지고 켜지지만 HOP2는 거부합니다! 나는 바보 같은 명백한 선호를 놓치고 있니?

두 개의 서로 다른 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 조건은 여기 완전 중복됩니다.

HOP2.visible = false; 

는 또한 (HOP2.visible == true)(HOP2.visible) 정확하게 같은 것 또한 당신은 변수에 직접 상태를 체크의 값을 할당 할 수 있습니다 : 당신이 그것에 대해 생각한다면, 그 라인은 혼자 하나 정확히 같은 작동합니다. 일반적으로 당신이 당신의 기능을 감소시킬 수있다 :

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

하지만 난 당신이 준 코드에 정의 된 checkHOP2() 기능이 표시되지 않는 :

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

그럼 난 당신이 checkHOP2()에 전화를 참조하십시오.

마찬가지로 사용자가 게시 한 checkHOP1() 기능을 호출하는 양식이 표시되지 않습니다. 또한 checkHOP1()이라는 함수 내부에서 HOP2 인스턴스를 변경하는 이유도 알지 못합니다. 어떤 종류의 난독 화가 있다고 생각합니까?

+0

그랬어! 코드 정리와 모든 호출 이름의 이중 검사가 결합 된 것이 트릭입니다. 나는 코드를 두 배로 만들려고 할 때 충돌이 있었다고 생각하지만 트릭을 마쳤습니다! 정말 고맙습니다! – LeighPierce90