2014-01-31 4 views
1

무대에 이미 추가 된 Sprite/DisplayObject가있는없이 내 스테이지 에 대한 참조를 얻으려면 어떻게해야합니까? DisplayObject없이 ActionScript-3에서 스테이지를 얻으시겠습니까?


추가 정보 : 나는 유틸리티 클래스 인 정적 클래스가 있으며 정적 클래스 생성자에서 초기화하려고하지만 또한 스테이지에 대한 참조가 필요합니다. 내 AS-3 응용 프로그램에서 호출되어

public class UtilClass 
{ 
    trace("init: " + stage); 
} 

우선 내 주요 스프라이트/DisplayObject의 생성자이며 무대에 액세스 할 수 있습니다. 그래서 그 시점에서 무대가 존재합니다. 다음 나는 UtilClass 유틸리티 메서드를 호출합니다. 이제는 첫 번째 사용에서 자체적으로 초기화해야합니다 (스테이지가 이미 존재하는 경우).
무대 객체가 유틸리티 클래스 외부에서 초기화되지 않고 어디서나 액세스 될 수 있는지 알고 싶습니다.

편집 :

public class SimpleSprite extends Sprite 
{ 
    public static var aaa:int = 12; 

    public static function test():void 
    { 
     trace("here I am"); 
    } 

    trace(aaa, Capabilities.screenResolutionX+", "+Capabilities.screenResolutionY); 
    test(); 
} 
+0

나는 그것이 당신이 생각하는 클래스에 전달해야합니다. 수업에는 방법이 필요합니다. – putvande

답변

1

무대 참조가 플랫폼에 따라, 당신의 MainTimeline 또는 Main 인스턴스에서 사용할 수 있습니다. 필요한 경우 다른 클래스에 해당 참조를 전달하기 위해 코드를 추가 할 수 있습니다. 클래스에는 Stage 매개 변수를 받아 들여 클래스 내부에 저장하는 메서드 (정적 인 경우)가 있어야합니다.

public class UtilClass { 
    private static var theStage:Stage=null; 
    public static function initialize(s:Stage):void { 
     if (theStage) return; // we're initialized already 
     theStage=s; 
    } 
    // once you call this, you can "trace(theStage)" and get correct output 
    // other methods can also rely on theStage now. 
} 

그러면 UtilClass.initialize(stage);으로 전화하면됩니다.

+0

위 질문에 대한 답변이 ** "AS-3에서는 불가능"**하는 방법입니다. **. – Bitterblue

+0

유틸리티 클래스 *에서 스테이지 참조를 초기화 할 수 없습니다 *. 어쨌든 스테이지에 액세스 할 수있는'Main' 스프라이트/MC 인스턴스에서 시작하는 메인 코드 실행 스레드에서 해당 클래스의 메소드를 호출해야합니다. 또한 메소드 외부에 코드를 두는 것은 정적 변수/함수를 처리 할 경우 컴파일되지 않습니다 (IIRC에서는 여기에 질문을했습니다). 그렇습니다. 독립 실행 형 클래스의 환경을 발견하는 "부트 스트랩"은 "AS3에서는 불가능합니다 **". 외부로부터이 정보를받는 것입니다. – Vesper

+0

사실 그것은 잘 컴파일됩니다. _ 뭔가 다른 것을 제외하고는 "메서드 외부에 퍼팅 코드가 컴파일되지 않습니다"_ (내 편집 참조). – Bitterblue

0

UtilClass를 초기화하고 스테이지 참조를 전달해야합니다. 스테이지 레퍼런스를 '관리'하기위한 클래스 만 가져야합니다.

이 같은 (그냥 빨리 예) 시도 할 수 있습니다 : 당신이 (당신이 당신의 논리를 포함하기 시작 메인 클래스 나) 응용 프로그램을 시작할 때

public class StageReference 
{ 
    public static const STAGE_DEFAULT:String = 'stageDefault'; 
    protected static var _stageMap:Dictionary; 

    public static function getStage(id:String = StageReference.STAGE_DEFAULT):Stage 
    { 
     if (!(id in StageReference._getMap())) 
      throw new Error('Cannot get Stage ("' + id + '") before it has been set.'); 

     return StageReference._getMap()[id]; 
    } 

    public static function setStage(stage:Stage, id:String = StageReference.STAGE_DEFAULT):void 
    { 
     StageReference._getMap()[id] = stage; 
    } 

    public static function removeStage(id:String = StageReference.STAGE_DEFAULT):Boolean 
    { 
     if (!(id in StageReference._getMap())) 
      return false; 

     StageReference.setStage(null, id); 

     return true; 
    } 

    protected static function _getMap():Dictionary 
    { 
     if (!StageReference._stageMap) StageReference._stageMap = new Dictionary(); 

     return StageReference._stageMap; 
    } 
} 

StageReference.setStage(stage); 

때 당신은 무대 참조를 얻을 필요가있다

trace('Checking the Stage: ', StageReference.getStage()); 
관련 문제