我在 andEngine 中使用这个 TimerHandler 在特定时间生成精灵。
mScene.registerUpdateHandler(new TimerHandler(0.02f, true, new ITimerCallback() {
@Override
public void onTimePassed(TimerHandler pTimerHandler) {
addSpriteTime1 += 2; // because timer update = 0.02 seconds
if (addSpriteTime1 == nextSprite1Time) {
addFace();
addSpriteTime1 = 0;
}
addSpriteTime2 += 2;
if (addSpriteTime2 == nextSprite2Time) {
addFace2();
addSpriteTime2 = 0;
}
addSpriteTime3 += 2;
if (addSpriteTime3 == nextSprite3Time) {
addFace3();
addSpriteTime3 = 0;
}
}
}));
现在我在类级别声明了 int 变量..
private int nextSprite1Time = 100;// initial value, could be changed during game
private int nextSprite2Time = 100;
private int nextSprite3Time = 100;
然后我有一个方法可以让我改变速度或下一个SpriteTimes。
private void speed(int f, int g, int h){
this.nextSprite1Time = f;
this.nextSprite2Time = g;
this.nextSprite3Time = h;
Log.e("Time Changed", String.valueOf(this.nextSprite1Time+ "," + this.nextSprite2Time + ","+ this.nextSprite3Time));
}
问题是当我尝试改变速度时..
speed(30, 50, 70);
它只是一起停止,现在添加了精灵,
有谁知道我做错了什么或者可以采取不同的做法吗?
首先 - 您的日志消息speed
方法是not错误 - 你为什么使用Log.e
方法?那是为了错误......使用Log.d
(调试)或Log.i
(信息)代替。
回到你的问题。我不太明白你的意思,但我确实看到了一个问题:
可以这么说nextSprite1Time = 100
and addSpriteTime1 = 70
。到这里为止,一切都很好,对吧?还有五个onTimePassed
调用时,将添加一个新的精灵。
但现在你变了nextSprite1Time
to 60
. addSpriteTime1
还是70
,并且由于它大于 60,因此将never添加一个新的精灵!
解决方案:使用>=
代替==
,并且不要将计数器归零,而是减少nextSpriteTime
例如,对于 sprite 1:
addSpriteTime1 += 2;
if(addSpriteTime1 >= nextSprite1Time) {
addFace();
addSpriteTime1 -= nextSprite1Time;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)