1

私は 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();  
    }       
};

画面に新しいアイテムが追加されるたびに、ゲームがフリーズするのはなぜですか。

4

1 に答える 1