私は 3 ~ 4 台のデバイスでゲームをテストしており、そのうちの 1 台はローエンド デバイスです。
ゲームは数回の送信でフリーズし、アイテムが画面に表示されます。最初はローエンドのデバイスだと思いました。しかし、S4でも初めてのインストールで、1秒間フリーズした後、スムーズだったことが1回だけ見つかりました。 .だから私は問題が私のコードにあると思います。
TimerHandler にすべてを保持し、Update ハンドラーに共謀とスコア計算を保持しましたが、どこに問題があるのか を見つけることができません。TimeHandler と UpdateHandler は、私たちが作成した Thread とは異なりますか?
私のコードのスニペットを見つけてください(コード全体を投稿することはできません)
private void collectPointsTimeHandler() {
mEngine.unregisterUpdateHandler(spriteTimerHandler);
spriteTimerHandler = null;
float mEffectSpawnDelay = 1.8f;
normalTimerHandler = new TimerHandler(mEffectSpawnDelay, true,
new ITimerCallback() {
public void onTimePassed(TimerHandler pTimerHandler) {
//seconds calculation
if(seconds % 2 == 0 || seconds % 3 == 0){
addNegativeItems();
getEngine().unregisterUpdateHandler(wellTimerHandler);
}else if(seconds % 5 == 0){
addQuestion();
}
}
});
mEngine.registerUpdateHandler(normalTimerHandler);
}
この関数は onLoadScene() で呼び出されます。
次に、共謀チェック部分
IUpdateHandler pointsHandler = new IUpdateHandler() {
public void reset() {
}
public void onUpdate(float pSecondsElapsed) {
Iterator<AnimatedSprite> targets = targetPoint.iterator();
AnimatedSprite _target = null;
// iterating over the targets
while (targets.hasNext()) {
_target = targets.next();
// if target passed the left edge of the screen, then remove it
// and call a fail]
if (_target.getY() >= cameraHeight) {
// removeSprite(_target, targets);
_target.setVisible(false);
_target.detachSelf();
_target = null;
targets.remove();
break;
}
if(well.checkRectangle.collidesWith(_target))
{
@SuppressWarnings("unchecked")
ArrayList<Integer> userData = (ArrayList<Integer>)_target.getUserData();
manageEffects(userData);
_target.setVisible(false);
_target.detachSelf();
_target.clearEntityModifiers();
_target.clearUpdateHandlers();
_target.reset();
_target = null;
targets.remove();
}
}
targetPoint.addAll(collectedPoint);
collectedPoint.clear();
checkCompletedScore();
}
};
画面に新しいアイテムが追加されるたびに、ゲームがフリーズするのはなぜですか。