2013-05-08 4 views
0

어디에서나 검색 한 결과이 질문에 대한 답변을 찾을 수 없으므로 최대한 설명 드리겠습니다.AS3 Flash- 하나의 클래스에서 무비에 여러 개의 무비 클립 추가하기

내 라이브러리에 'Bluknife'및 'cat'(RPG 게임) 영화 클립 2 개가 있습니다. 두 무비 클립은 같은 이름의 as3 클래스에 연결됩니다.

은 내가 문서 클래스에 다음 코드를함으로써 무대에 이러한 항목을 모두 추가 할 수 있습니다 알고

var knife:BluKnife = new BluKnife(); 
stage.addChild(knife); 

knife.x = stage.stageWidth/2; 
knife.y = stage.stageHeight/2; 

var ct:cat = new cat(); 
stage.addChild(ct); 

ct.x = stage.stageWidth/2; 
ct.y = stage.stageHeight/2; 

그러나 나는이 모든 물건이 문서 클래스에 싶지 않아, 내 문서 클래스에서 callitems 클래스를 호출 가겠어요 어떻게 그냥 궁금 해서요

package 
{ 

    import flash.display.MovieClip; 

    import flash.display.MovieClip; 
    import flash.display.Stage; 


    public class callitems extends MovieClip 
    { 


     public function callitems() 
     { 
      var knife:BluKnife = new BluKnife(); 

      stage.addChild(knife); 

      knife.x = stage.stageWidth/2; 
      knife.y = stage.stageHeight/2; 

      var ct:cat = new cat(); 

      stage.addChild(ct); 

      ct.x = stage.stageWidth/2; 
      ct.y = stage.stageHeight/2; 
     } 

    } 

} 

: 그래서 내가 무대에이 물건의 모든 전화를 사용하고자하는 다른 클래스를 만들어 그것을 callitems 이름? callitems의 인스턴스를 만들고 문서 클래스의 무대에 추가하는 등 몇 가지 시도를 해봤습니다 (놀랄 일도 아니 었습니다). 여기에 기능이있다 :

public function Engine() 
     { 
      var calling:callitems = new callitems(); 
      stage.addChild(calling); 

     } 

나는 다음과 같은 오류가 발생했습니다 : 형식 오류 : 오류 # 1009 : null 객체 참조의 속성이나 메서드에 액세스 할 수 없습니다. callitems() 엔진()

내 문서 클래스의 이름에서 에서 당신이 액션 스크립트 클래스 이름에 CallItems (메모를 생성 할 때 낙타 케이스에 있어야한다는, 오해를 가지고 Engine

답변

1

우선이다 CallItems이 사용하는 클래스는 CallItems 인스턴스를 만드는 클래스로 컴파일되지 않습니다. 클래스 사용에서 직접 참조되는 모든 클래스가 컴파일됩니다.

해결하려면 인터페이스에 프로그래밍하고 문서 클래스가 인터페이스에 대해서만 알고 있어야합니다. 문서 클래스에 구현에 대한 참조가 없어도 인터페이스 유형의 변수를 채우는 방법은 두 가지가 있습니다.

  1. 항목을 IDE에 넣고 사용한 변수와 일치하는 인스턴스 이름을 지정하고 인터페이스를 구현하는 기본 클래스를 할당하십시오. Swf에서 사용 되었기 때문에 클래스는 여전히 swf로 컴파일되지만, 당신의 actionscript 코드는 swf를 직접적으로 알지 못한다.
  2. 외부 swf에로드하십시오. 구현은 다른 swf로 컴파일됩니다.

이제 실제 문제가 생겼습니다. CallItems 인스턴스가 자체가 아닌 스테이지에 추가됩니다. 아직 스테이지에 추가되지 않았으므로 (코드를 통해 모든 것을 만들고 추가하는 번거롭고 지루한 과정을 거치려면 무언가를 추가하는 대신 자 신의 코드를 추가하는 것이 좋습니다.) .

표시 객체는 표시 목록에있는 무언가에 추가 될 때까지 스테이지에 대한 참조가 없습니다.

callingEngine에 추가하는 이유를 생각해 볼 수도 있습니다. calling은 이미 무대에 대한 작업을 추가하고 있다고 생각할 수 있습니다 (단, 스테이지에 대한 참조는 제외).

+0

무비 클립을 무대에 올릴 수없는 이유는 추가 된 무비 클립이 다양하기 때문입니다. 변수에 저장된 값에 따라 추가됩니다. 나는 대답의 후반 부분을 이해하기 시작했다고 생각합니다. 'callItems'가 무대가 아닌 자체에 추가되어야한다고 말하고 있습니까? Amy에게 작은 코드 예제를 줄 수 있습니까? 감사합니다. -Mark –

+0

PS입니다. 귀하의 도움을 주셔서 감사합니다 지금까지, 그것은 많이 감사합니다 –

+1

당신은 새로운 연산자를 사용하는 한 클래스에 대한 참조가 있어야하고 그것은 모든 것을 모두 알고 있기 때문에 기본 클래스로 컴파일됩니다. 클래스가 사용하고있는 클래스가 사용 중이므로 변수에 있는지 여부는 중요하지 않습니다. 'Calling '에 항목을 추가하려면'stage'를'this'로 바꾸십시오. –