滑动期间TileMap中的移动滞后

时间:2013-12-18 13:41:01

标签: ipad cocos2d-x

我正在使用等距瓷砖地图(44x44尺寸)开发游戏。在iPad-1上滑动时我无法移动地图,但在iPad-2上运行正常。即使只有没有精灵的地图,移动地图也不顺畅。

我使用缓解动作来提出迟钝动作:

_tileMap->runAction(CCEaseOut::create(CCMoveTo::create(time, bottomLeft),2))  

[tileMap runAction:([CCEaseOut actionWithAction:([CCMoveTo actionWithDuration:time position:postion]) rate:2 ])]

我尝试了2d投影并关闭了子像素渲染(在ccConfig.h中)。但这个问题仍然存在。

我的滑动处理程序功能就像这样..

void GameController::SwipeHander(CCPoint vector,float speed)
{  
 CCPoint change=ccpMult(vector, speed/(1000));  //it is a wh
 CCPoint bottomLeft =ccpSub(_tileMap->getPosition(), change); //point where map gonna move  

// just to check bottomleft comes in bounding box
if (bottomLeft.x >0) {
    bottomLeft.x = 0;
}
if (bottomLeft.y>0) {
    bottomLeft.y = 0;
}
if (bottomLeft.x < -(mapWidth*_tileMap->getScale() - _screenSize.width)) {
    bottomLeft.x = -(mapWidth*_tileMap->getScale()- _screenSize.width);
}
if (bottomLeft.y <-(mapHieght*_tileMap->getScale() - _screenSize.height)) {
    bottomLeft.y = - (mapHieght*_tileMap->getScale() - _screenSize.height);
}

float dis=_tileMap->getPosition().getDistance(bottomLeft);
float time=(dis/speed);

 _tileMap->stopAllActions();
 _tileMap->runAction(CCEaseOut::create(CCMoveTo::create(time, bottomLeft),1.5));

} 

2 个答案:

答案 0 :(得分:1)

如果两个实现之间的唯一区别是您正在运行的硬件,那么听起来您有一个处理瓶颈。也就是说,你要求iPad-1满足处理时间线,因为它内置的硬件不能满足它。

除非您编写自己的自定义实现,否则您似乎不太可能重做框架以显着提高其性能。这是可能的,但你有多少时间?此外,这就是你使用框架而不是编写框架的原因。

除了一些改善iPad-1与iPad-2性能的知识(即框架中实际上不同但可修复的东西),似乎最好的选择是在某种程度上降低性能。在iPad-1上运行。

选项:

  1. 默认情况下,帧速率设置为60 fps。你应该能够以30 fps的速度逃脱。如果设备是iPad-1,请调低帧速率。您也可以仅在关键时刻减少它(例如,动作会降低帧速率,执行效果,然后在完成时增加帧速率)。
  2. 不同的界面。在iPad-1和iPad-2(或其他)系统上使用较低分辨率的图形。
  3. 使用“跳跃”代替iPad-1上的平滑移动。
  4. 描述您的游戏并找出时间瓶颈的位置。如果你有一个庞大的人工智能基础设施(运行大量的搜索?),找出一种在行动进行时关闭它们的方法。
  5. 还有其他问题......你是否必须在最古老的平台上使其工作完全相同,或者只是让它工作

答案 1 :(得分:0)

我面临着ipad 1的同样问题,我的老板也不同意“跳”。因此,不使用缓动,您可以在没有延迟运动的情况下进行滑动。 但如果完美是你呼吸的氧气,我建议使用回调功能,并在每次迭代中通过某个因素降低速度矢量。这应该工作