2012-08-04 2 views
0

내 수업에서 알 수없는 프레임에서 특정 애니메이션을 참조해야한다는 것을 알았습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 custum 이름을 만들고 클래스의 모든 인스턴스가 특정 애니메이션에 동일한 레이블을 지정하도록 지정해야합니다. 예를 들면 다음과 같습니다.클래스 파일의 애니메이션?

public class CanBeHurt{ 

    public CanBeHurt() extends MovieClip{ 
     // constructor code here 
    } 

    public function hurt():void{ 
     gotoAndPlay("hurt"); 
    } 
} 

이 클래스의 모든 인스턴스는 상처 애니메이션 "상처"의 시작을 표시하도록 강제됩니다. 나는

public class CanBeHurt{ 
    private var hurtAnimationLabel: String; 

    public CanBeHurt(hurtAnimationLabel: String) extends MovieClip{ 
     this.hurtAnimationLabel = hurtAnimationLabel; 
    } 

    public function hurt():void{ 
     gotoAndPlay(hurtAnimationLabel); 
    } 
} 

그러나 불행하게도 더 복잡한 객체로, 이미 생성자과 많은 애니메이션과 다른 입력 인수의 무리가를 : 또는 그런 것처럼, 프레임을 지정 생성자 문자열에 걸릴 수있다 정말로 더 이상 추가하고 싶지 않습니다. 그리고 마지막으로, 내가 생각 해낸 마지막 옵션은 다음과 같습니다

public class CanBeHurt{ 
    private var hurtAnimationLabel: String; 

    public CanBeHurt() extends MovieClip{ 
     this.hurtAnimationLabel = this.currentLabels[0]; 
    } 

    public function hurt():void{ 
     gotoAndPlay(hurtAnimationLabel); 
    } 
} 

불행하게도, 다수의 애니메이션으로, 지금은 제대로 참조 할 수 있도록 특정 순서로 내 애니메이션 레이블이 강제하고있다. 3 가지 방법 중 가장 첫 번째 방법이 가장 만족 스럽지만 더 좋은 방법이 있습니까?

+0

당신이 일반적으로 [상태 머신 (http://en.wikipedia.org/wiki/Finite를 구축 끝날 것이다 : 수년에 걸쳐 나를 위해 잘 작동했다 -state_machine)를 사용하여 애니메이션 논리를 추적합니다. 일부 애니메이션은 중단 될 수 있지만 다른 애니메이션은 시작될 때 콜백을 트리거하려는 경우도 있고, 완료 할 때가 있고 때로는 전혀 콜백을 트리거하지 않는 경우도 있습니다. 일부 애니메이션 반복, 일부 없습니다. 그 모든 논리는'MovieClip'에 합성 된 전용 클래스로 캡슐화하는 것이 가장 좋습니다 –

답변

0

효율적인 방법을 원하면 레이블 이름을 저장할 필요가 없습니다.

예 :

public class CanBeHurt{ 
    private var label: String; 

    public CanBeHurt() extends MovieClip{ 
     label= "hurtLabel"; 
    } 

    public function hurt():void{ 
     currentFrameLabel != "hurtLabel" ? gotoAndPlay("hurtLabel") : null; 
    } 
} 

당신은 현재 프레임의 레이블을 확인하고 프레임 stucking을 피하기 위해 애니메이션을 재생합니다. (애니메이션은 항상 첫 번째 프레임에 있습니다.)

게임의 경우 대부분의 개발자가 애니메이션을 제어하는 ​​함수를 사용하므로 handleAnimation 함수입니다.

예 : 난 보통 내 코드 무비 클립을 연장하지 않는

public class Example{ 
    private var label:String = "someLabel1"; 

    public Example() extends MovieClip{ 
     //constructor code here 
    } 
    private function handleAnimation(){ 
     if(condition){ 
     label = "someLabel1"; 
     } 
     if(condition2){ 
     label = "someLabel2"; 
     } 
     gotoAndPlay(label); 
    } 
} 
+0

어떻게하면 레이블 이름을 더 효율적으로 저장합니까? 반복적으로 상처 기능을 호출하지 않는 한 왜 첫 번째 프레임에서 멈추게됩니까? 그리고 반복적으로 호출하는 경우 애니메이션의 후속 프레임이 "hurtLabel"으로 명명되지 않았기 때문에 현재 레이블을 검사하는 것은 아무 것도하지 않습니다. 필요한 경우 필요한 애니메이션을 gotoAndPlay에 그냥 말할 수있을 때 handleAnimation 함수가 필요한 이유는 무엇입니까? 그리고 handleAnimation 함수를 사용하면 하나의 클래스에서 모든 애니메이션을 제한 할 수 있습니다. – Meteorites

+0

라벨에 +1 레이어를 추가 할 수 있습니다. enter_frame 이벤트 함수에서 상처 함수를 호출했다고 가정하고, 반복적으로 호출 할 수 있습니다. 프로그램을보다 명확하고 효율적으로 만들려면 클래스의 디스플레이와 핵심을 분리하여 처리하는 것이 좋습니다. – Zhafur

+0

ENTER_FRAME 이벤트를 사용하면 두 번째 프레임에 프레임 레이블이 남기 때문에 애니메이션의 첫 번째 프레임에서 두 번째 프레임에 걸릴 수 있습니다. 그리고 모든 것을 한 번에 처리하지 않고 별도로 처리하는 것이 더 효율적이라는 것을 나는 알지 못합니다. – Meteorites

0

. 생성자에서 MovieClip을 허용하는 클래스를 만들고이 참조를 저장 한 다음 함수 호출에 대한 작업을 수행합니다.

레이블 이름에 관해서는 보통 적절한 클래스에 정적 변수로 배치합니다.

은 애니메이션 구조가 더 복잡 해짐에 따라