使用AndEngine GLES2开发游戏
我在尝试更改从TimerHandlers回调中添加到场景中的矩形的比例时遇到问题。每当计时器计时时,它将进行百分比计算,然后在OnTimePassed ITimerCallback中尝试设置场景中矩形的比例。除非我将矩形声明为静态矩形,否则会不断收到nullreferenceexception错误。
我知道这是一个范围问题,我的问题是,我应该将需要从timercallback内部访问的对象声明为静态对象,还是有一种“可接受的方式”从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;
}
});
最佳答案
如果PlayerRecastTimer
是包含pRecast
的类的成员,则可以使用ClassName.this
引用它。
示例:如果您有一个名为LoadingScreenActivity
的类,并且有一个名为pRecast
的矩形,则可以使用以下命令在pRecast
函数中访问onTimePassed()
LoadingScreenActivity.this.pRecast.setScaleX(1);