Cocos2d iphone Cocos2d游戏层在运行时会出现抖动,在替换相同场景后会平滑

Cocos2d iphone Cocos2d游戏层在运行时会出现抖动,在替换相同场景后会平滑,cocos2d-iphone,box2d,ccsprite,cclayer,Cocos2d Iphone,Box2d,Ccsprite,Cclayer,n'tMy游戏场景使用ReplaceSecene从关卡选择场景运行,并传入关卡编号。游戏层从plist加载数据,然后在世界空间中创建对象(带有box2d实体的CCSprite子类)。在播放关卡时,英雄角色保持在屏幕中央-我根据移动速度调整图层位置和图层比例以放大和缩小 例如: CGPoint layerPosition = ccp(((screenSize.width / 2) - ourHero.position.x) * sceneScale, ((screenSize.height / 2

n'tMy游戏场景使用ReplaceSecene从关卡选择场景运行,并传入关卡编号。游戏层从plist加载数据,然后在世界空间中创建对象(带有box2d实体的CCSprite子类)。在播放关卡时,英雄角色保持在屏幕中央-我根据移动速度调整图层位置和图层比例以放大和缩小

例如:

CGPoint layerPosition = ccp(((screenSize.width / 2) - ourHero.position.x) * sceneScale, ((screenSize.height / 2) - ourHero.position.y) * sceneScale);
[self setPosition:layerPosition];
[self setScale:sceneScale];
问题是,当速度增加且图层缩小时(不仅仅是开始时的几秒钟),第一次水平运行运动通常会突然停止。但是,如果用户重新启动关卡(按钮执行ReplaceSecene),则更换关卡的移动将非常平滑,即使是在速度下

我正在使用batchnode,并将精灵图像存储在帧缓存中。我已经尝试过在关卡选择场景中设置帧缓存和预加载声音,但这没有任何区别。我曾尝试清除级别之间的缓存,以查看是否可以使重新启动的级别显示相同的行为,但这没有起到任何作用

有谁能建议是什么原因造成的,以及我如何才能消除它

谢谢

可能的解决方案:

在init/oneter中加载所有纹理和精灵表。如果不可能一次加载所有内容,则使用线程加载。对于音频/音乐,您可以在声音引擎中使用预加载调用


。我也面临着同样的问题。最后通过使用单独的线程加载来解决问题。

当然,第一次加载游戏场景时会比较慢,因为所有对象都必须创建,而第二次只需要创建一些东西。无论如何,我建议使用时间分析器,看看是什么导致了延迟。从它的声音来看,你做的每件事都是正确的,所以让乐器来说话。感谢你的回复-花费58%在CCNode Vist上(44%在CCSpriteBatchNode访问上),29%在EAGLView swapBuffers上,约1.9%在CCTick上。但奇怪的是,在关卡的整个第一次游戏中,抖动运动都会持续——当然,所有的物体都会在某个时候被创造出来,然后抖动就会消失。再次感谢所有的反馈!!嗯,这很奇怪。你只使用1张雪碧床单,对吗?同时检查更新循环是否有可能导致延迟。是的,1张精灵表。当你说“更新循环”时,你指的是什么?谢谢你提出的解决方案。我可以问一下,您观察到的行为是在整个级别的运行过程中继续(无限期)还是在异步加载完成后停止?我这样问是因为我事先加载了所有的纹理和音频(级别初始化)-第一次运行层场景时仍然是不稳定的。带有runAction的cocos2D动画在第一次运行时需要时间。试着确认一下你的情况。尝试初始化init本身中的所有cocos2D操作,并使用runAction调用播放一次(可能在屏幕外)。在其中一个游戏中,我也只在第一次面对动画中的杰基…然后将动画初始化移到init。尝试在init中播放一次,然后停止。。。