2012-04-26 5 views
0

이 타임 라인과 통합되어야하는 액션 스크립트를 작성해야하므로 (이 경우 특정 시퀀스에서 발생해야하는 일련의 프레임을 제어해야합니다.) 나는 무엇을해야할지 생각하고있다.타임 라인 인스턴스가 첫 번째 프레임에 없음

처음 몇 프레임에는 'next_1'버튼이 있습니다.

프레임 10에서 다른 버튼 "next_2"가 필요합니다. 프레임 1에 있지 않게하려면이 버튼이 정말로 필요합니다. (보이지 않게 할 수도 있지만 클릭하지 않는 영역을 만들 것입니다).

"frame_1"에 넣지 않은 것은 Document 클래스에서 null로 렌더링됩니다.

이 문제가 해결 되었습니까? 가능한 경우 타임 라인에 스크립트를 작성하지 않아도됩니다 (장기적으로는 문서 클래스에 보관하는 것이 더 쉬워 보입니다) ...

답변

1

타임 라인의 항목은 즉시 만들어 지므로 재생 헤드가 프레임 10에 도달하지 않았 으면 next_2가 만들어지지 않습니다.

쉬운 문헌 급 용액 :

  1. 는 [ "라벨 2"를 "LABEL1"]와 같은 프레임 레이블의 배열을 생성
  2. 는 다음 버튼을 만들기 sectionIndex의 VAR을 만들고 0
  3. 로 설정 자체 레이어에 표시되므로 항상 표시됩니다.

    /************************************************** 
    * FRAME LABELS * 
    **************************************************/ 
    private function enumerateFrameLabels():void { 
        for each (var label:FrameLabel in currentLabels) { 
         addFrameScript(label.frame-1, dispatchFrameEvent); 
        } 
    } 
    
    private function dispatchFrameEvent():void { 
        dispatchEvent(new Event(currentLabel, true)); 
    } 
    

    이가를 전달합니다 :

  4. 다음 버튼을 클릭
  5. , sectionIndex, 다음 사항 gotoAndPlay을 (myLabels은 [sectionIndex])
+0

아, 네, 프레임 레이블을 사용하여 ... 그 날 생각 나게 ... – redconservatory

0

좋아, 바로 "진짜 세계 플래시 게임 개발"에서 해제 증가 타임 라인의 각 프레임 레이블에서

addEventListener("name_of_my_framelabel", frameHandler); 
addEventListener("another_framelabel", frameHandler); 

을 그리고 그들은 실제로 타임 라인에 표시 할 때 버튼에 대한 이벤트 리스너를 추가 할 수있는 스위치 문을 쓰기 :

그럼 그냥 각 프레임에 대한 이벤트 리스너를 추가 할 수 있습니다.

private function frameHandler(e:Event):void { 
      switch(e.type) { 
       case 'screen_2': 
        stop(); 
        next_2.addEventListener(MouseEvent.CLICK, click2, false, 0, true) 
       break; 
      } 
     } 
+0

물론, 당신의 버튼은 애니메이션의 중요한 부분과 분리 할 수없는 경우. 여전히 간단한 enterFrame 핸들러와 currentFrameLabel 검사만으로 충분할 것입니다. 하지만 멋진 addFrameScript를 사용하지 않으셔도됩니다 .... –