2016-12-03 12 views
1

HaxeFlixel의 기능을 배우고 getter/setter 속성을 사용하여 변수를 MenuState에서 PlayState에 호출하려면 기본 게임을 작성합니다. 그것은 그 일을 반환 MS 변수로HaxeFlixel : 다른 클래스에서 getter/setter 변수를 호출하는 방법

class MenuState extends FlxState 
{ 
    @:isVar public var myVar(get, null):Bool; 

    public function get_myVar():Bool 
    { 
     return myVar; 
    } 
} 

class PlayState extends FlxState 
{ 
    private var _foo:Bool; 

    override public function create():Void 
    { 
     // var ms = new MenuState; doing it like this doesn't return anything 
     _foo = MenuState.get_myVar(); 
     if (_foo) 
     { 
      // do this thing 
     } 
     else 
     { 
      // do that thing 
     } 
    } 
} 

, 나는 오류 Class<MenuState> has no field get_myVar를 얻을없이 : 코드는 다음과 같이 보인다. 아마도 코드를 작성하는 방법이 아닌 것 같지만, 지금은 작동 시키려고합니다. 본질적으로 내가 뭘 하려는지 PlayState 읽을 수 있지만 쓸 수없는 변수를 쓸 MenuState 가져 오는 것입니다. 그 일에 대해 어떻게 생각해?

답변

1

myVar 코드에서 MenuState의 게터 기능이 static이 아니므로 MenuState.get_myVar()과 같은 코드에 액세스 할 수 없습니다. 난 myVar 정적 문제를 해결하는 것이 될 것이라고 생각합니다.

get_myVar()으로 직접 전화하지 않아도됩니다. getter는 MenuState 외부의 myVar에 액세스 할 때마다 호출됩니다. trace("message");get_myVar에 추가하여 테스트 할 수 있습니다.

0

생성자 함수 (예 : public function new())를 사용하여 인스턴스를 만들어야합니다. 이런 이유로 보통 생성자 함수를 사용하여 var에 대해 별도의 class.hx를 만든 다음 playstate에 인스턴스를 만듭니다.

그렇지 않으면, 내가 공유 할 필요가 바르를 저장하는 레지스트리 클래스를 만드는 것, 예를 들어, 다음, 기본 패키지에 Reg.hx 같은라는 새로운 클래스를 생성 :

package; 

//imports etc. 

class Reg { 

    public static var myVar:Bool; 
} 

는 다음 방금 필요 원하는 클래스에 import Reg을 입력하면 해당 클래스에 액세스 할 수 있습니다. 나는 그것을 어쨌든 그렇게하는 것을 좋아한다!