2012-05-05 9 views
1

にメンバ変数を参照すると、私はTimerHandlersコールバックの中からシーンに追加した長方形のスケールを変更しようとする問題を抱えていAndEngine GLES2AndEngineとTimerHandlers:シーン

でゲームを開発します。タイマーが刻々と変化する度に、パーセント計算が行われ、OnTimePassed ITimerCallbackの中でシーン内の矩形の尺度を設定しようとします。矩形を静的として宣言しない限り、nullreferenceexceptionエラーが発生します。

私はこれがスコープの問題であることを知っています。私は静的なtimercallbackからアクセスする必要のあるオブジェクトを宣言する必要がありますか、または内部からアクティビティレベルオブジェクトにアクセスするための "受け入れられた方法"タイムコアーバック?

PlayerRecastTimer = new TimerHandler(0.5f, true, new ITimerCallback(){ 
    private float recastTime = playerSpellToCast.getRecastTime(); 

    public void onTimePassed(TimerHandler pTimerHandler) { 
     if(recastTime == 0) { 
      mAct.GetEngine().unregisterUpdateHandler(pTimerHandler); 
      mAct.GetQueue().RemovePlayerSpell(); 
      pRecast.setScaleX(1); 
      RunScene(); 
     } 

     float recastScale; 

     recastScale = recastTime/playerSpellToCast.getRecastTime(); 
     pRecast.setScaleX(recastScale); //blows up here when attempting to scale the rectangle 
     recastTime -= 0.5; 
    } 
}); 

答えて

2

あなたPlayerRecastTimerpRecastを含むクラスのメンバーである場合は、ClassName.thisを使用して、それを参照することができます。

例:あなたはLoadingScreenActivityという名前のクラスを持っており、それがpRecastと呼ばれる四角形を持っている、あなたは

LoadingScreenActivity.this.pRecast.setScaleX(1); 
+0

を使用してonTimePassed()機能でpRecastにアクセスできる場合、これらは両方とも同じクラスのメンバーであるが、場合でも、私はまだNullReferenceを取得することをお勧めする構文を使用します。 – Maxmanzero

+0

は、pクラスのメンバーですか?通常、 "p"接頭辞はパラメータ変数であることを意味します。これは、関数が完了した後に変数が存在しないことを意味します。クラス内の矩形への参照、またはTimerHandlerクラスへの参照を格納する必要があります。 –