cocos2d-x背景地图移动卡顿很严重,请各路cocosChina大神指点指点~

cocos2d-x背景地图移动卡顿很严重,跪求各位大神解决方法。
我是用开启循环的方法(scheduleScriptFunc)来进行均匀的x移动。
比如:x=x-5;
但是这样并不会平滑移动,会经常卡顿,有时候非常严重,一直在卡,严重影响游戏的体验。
本人公司在做一个横版飞行的游戏,我负责游戏背景这一块,一直搞不定,我看cocos2d自带的demo中有一个地图移动有时候也会卡顿,但是没我的严重。

其他方法也试过,比如改成action的方式,moveto/moveby也是卡。
哎,网上没有解决方法,搜索很久了,请问各位大神啊~~~~~~~~~~~~~

代码逻辑很简单,就开启一个循环,一个图自动循环移动坐标,就这样简单的逻辑,iphone5s和ipd5都会卡~:6:

谢谢各位大大了,非常欢迎回帖交流…
用的是2.1.4的版本

等一下,我把代码贴出来.

我输出过进入循环的时间,卡顿的原因应该是,进入循环的时候是不定的,我设置的定时器是30毫秒,但是有时候会300毫秒进一次~然后就卡顿了

代码如下:

CCSprite *spr1;
CCSprite *spr2;

void HelloWorld::update(float t){
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
if(spr1->getPositionX()<-visibleSize.width/2){
spr1->setPositionX(spr1->getPositionX()+visibleSize.width*2);
}

if(spr2->getPositionX()<-visibleSize.width/2){
    spr2->setPositionX(spr2->getPositionX()+visibleSize.width*2);
}

spr1->setPositionX(spr1->getPositionX()-5);
spr2->setPositionX(spr2->getPositionX()-5);

}

bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}

CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
spr1 = CCSprite::create("bg.png");
spr1->setPosition(ccp(visibleSize.width/2, visibleSize.height/2));
this->addChild(spr1);

spr2 = CCSprite::create("bg.png");
spr2->setPosition(ccp(visibleSize.width/2+visibleSize.width, visibleSize.height/2));
this->addChild(spr2);

this->schedule(schedule_selector(HelloWorld::update), 0.0f);

return true;

}

因为背景每帧都应该会移动,所以每帧都需要更新位置。解决方法:不要用schedule()方法,用scheduleUpdate()。

没有区别啊,兄弟,刚试了…

那可能就是你的帧速不行了。找性能瓶颈优化吧。

Simulator的话卡很正常。用真机调试就好了

就1张图片真机都会卡,这和性能有关系吗…

真机我试过iPhone4s、iPhone5s、ipd5 都会卡…就一张图片

是你处理的方式有问题,你得根据人的步幅来移动,整体上就协调了,没看到东西也没法给你太准确的回复

— Begin quote from ____

引用楼主swf520520于2014-06-23 21:03发表的 cocos2d-x背景地图移动卡顿很严重,请各路cocosChina大神指点指点~ :
cocos2d-x背景地图移动卡顿很严重,跪求各位大神解决方法。
我是用开启循环的方法(scheduleScriptFunc)来进行均匀的x移动。
比如:x=x-5;
但是这样并不会平滑移动,会经常卡顿,有时候非常严重,一直在卡,严重影响游戏的体验。
本人公司在做一个横版飞行的游戏,我负责游戏背景这一块,一直搞不定,我看cocos2d自带的demo中有一个地图移动有时候也会卡顿,但是没我的严重。
http://www.cocoachina.com/bbs/job.php?action=topost&tid=209404&pid=tpc

— End quote

不要调用schedule方法,官方也不鼓励调用schedule方法,这是一个吃性能的方法,控制不好,物的其反。
地图是一个sprite精灵,直接对sprite:runAction(ccmove:create(xxxxx));
我每秒移动600像素都没问题,一点卡顿都没有

这是正解,runAction之前记得先stopAction,不然容易错乱

delataX=t*speed:11:

update里面写楼上的方法是正解

update(dt)

deltaX = dt *speed
ENTITY:setPosition xxxxxxx

另外…… 这东西从3gs用到5s……要是只是你的有问题那肯定还是你自己的问题

这个我也试过啊…

楼主这个问题解决了嘛?