1

我一直在为 3-4 台设备测试我的游戏,其中一台是低端设备。

游戏冻结了几次发送,然后项目出现在屏幕上。首先我认为它是因为它是低端设备。但我发现只有一次,在第一次安装时也是在 S4 中,冻结了几秒钟然后它很流畅.所以我想问题出在我的代码中。

我将所有内容保存在 TimerHandler 中,并将勾结和分数计算保存在更新处理程序中,我无法找到问题所在。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

4

你需要使用精灵池。我有类似的问题,通过使用精灵池我可以解决它

http://c0deattack.wordpress.com/2011/01/06/andengine-using-the-object-pool/
于 2013-11-30T06:09:03.920 回答