我一直在为 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();
}
};
任何想法,为什么每次在屏幕上添加新项目时游戏都会冻结。