AndEngine GLES2 を使用したゲームの開発
TimerHandlers コールバック内からシーンに追加した四角形のスケールを変更しようとすると問題が発生します。タイマーが作動するたびにパーセンテージの計算が行われ、OnTimePassed ITimerCallback 内でシーン内の四角形のスケールを設定しようとします。長方形を静的として宣言しない限り、nullreferenceexception エラーが発生し続けます。
これはスコープの問題であることはわかっています。私の質問は、timercallback 内からアクセスする必要があるオブジェクトを static として宣言する必要があるか、または timercallback 内から Activity レベルのオブジェクトにアクセスするための「受け入れられる方法」があるかということです。
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;
}
});