cocos2d-x 3.x 请教主角视角跟随 除了setPosition 还有效率更高的方法么?

我的项目中 为了使运行时效率更高 所以再进入场景前把所有内容已经加载到内存了

现在遇到的问题就是节点太多 所以使用setPosition作主角的视野跟随会严重影响效率 (因为setPosition会使所有子节点重新计算坐标信息)

那么还有其他办法可以实现场景移动么…

占楼,期待解决方法。

同问,另外问一下lua中没有位运算怎么处理碰撞时候的各种掩码?

遇到同样问题,期望来个大牛给些个提示

??没明白,你也只能用setPosition吧,我现在是场景移动有拖影,就是那种波纹状,也不知道是win系统的原因还是什么原因

— Begin quote from ____

引用第3楼airsurfish于2015-07-10 12:14发表的 :
遇到同样问题,期望来个大牛给些个提示 http://www.cocoachina.com/bbs/job.php?action=topost&tid=253415&pid=1344879

— End quote

我看你回了好几个帖子,你是做根据英雄滚动屏幕是吧?

我做法是这样的,我就1个update,这个update是game场景的update, 然后里面更新所有东西,我的滚动是根据英雄坐标,移动gamelayer层,gamelayer层下有maplayer,rolelayer,所以移动gamelayer,视角就动了。
给你看下我的滚动类。
void GameLayer::sceneScroll(Point position)
{
//获取屏幕尺寸
Size screenSize=Director::getInstance()->getWinSize();
//计算Tilemap的宽高,单位是像素
Size mapSizeInPixel=Size(MapLayer::getInstance()->getTileMap()->getMapSize().widthMapLayer::getInstance()->getTileMap()->getTileSize().width,
MapLayer::getInstance()->getTileMap()->getMapSize().height
MapLayer::getInstance()->getTileMap()->getTileSize().height);
//取英雄当前x坐标和屏幕中点x的最大值,如果英雄的x值较大,则会滚动
float x=MAX(position.x,screenSize.width/2.0f);
float y=MAX(position.y,screenSize.height/2.0f);
//舞台范围取屏幕范围,加外扩1tile,这里是128像素.
float w=screenSize.width+128;
float h=screenSize.height+128;

//地图总宽度大于屏幕宽度的时候才有可能滚动
if(mapSizeInPixel.width>screenSize.width)
{
x=MIN(x,mapSizeInPixel.width-screenSize.width/2.0f);
}
else
{
w=mapSizeInPixel.width;
}
if(mapSizeInPixel.height>screenSize.height)
{

y=MIN(y,mapSizeInPixel.height-screenSize.height/2.0f);
}
else
{
h=mapSizeInPixel.height;
}
//英雄的实际位置
Point heroPosition=Point(x,y);
//屏幕中点位置
Point screenCenter=Point(screenSize.width/2.0f,screenSize.height/2.0f);
//计算英雄实际位置和中点位置的距离
Point scrollPosition = screenCenter - heroPosition;

//将场景移动到相应位置
this->setPosition(scrollPosition);
//设置舞台范围,方便对进入舞台内的生物进行更新
Rect veiwpoint = Rect(-scrollPosition.x,-scrollPosition.y,-scrollPosition.x+w,-scrollPosition.y+h);
UnitManager::getInstance()->setStageView(veiwpoint);
}

多谢指导!
我的做法跟你的是一样的,昨天我一直觉得是设置屏幕中心导致的角色晃动,后来我注释掉了屏幕移动,发现还会有晃动,不会那么频繁了,所以可能是其他方面造成的,
我再研究一下