移动图层会使物理对象保持原位

时间:2014-03-09 16:59:52

标签: ios iphone cocos2d-iphone

我正在摆弄cocos2d v3和sprite builder。

游戏是一个简单的捕获和避免游戏,英雄的物体站在屏幕的底部,你可以用加速度计移动他。

我有一个带有一些对象(ccnode)的关卡文件(cclayer),启用了物理。 在我的更新功能中,我慢慢向下移动图层。

如果对象启用了物理,则只会下拉。如果我将它切换到静态物理学,它们就会保留下来。

我能找到将对象与图层一起移动的唯一方法是完全关闭物理。但那时碰撞将不再起作用......

这让我在过去的4个小时左右买了。

这种情况的最佳方法是什么?

先谢谢你们!

这是我的更新功能:

    - (void)update:(CCTime)delta {


float maxX = winSize.width - _hero.contentSize.width/2;
float minX = _hero.contentSize.width/2;


CMAccelerometerData *accelerometerData = _motionManager.accelerometerData;
CMAcceleration acceleration = accelerometerData.acceleration;
CGFloat newXPosition = _hero.position.x + acceleration.x * 1000 * delta;
newXPosition = clampf(newXPosition, minX, maxX);
_hero.position = CGPointMake(newXPosition, _hero.position.y);



//level position

CGPoint oldLayerPosition = _levelNode.position;

float xNew = oldLayerPosition.x;
float yNew = oldLayerPosition.y -1.4f;

_levelNode.position = ccp(xNew, yNew);

}

1 个答案:

答案 0 :(得分:3)

这是在物理引擎中做出的设计决策。 物理机构不与父母一起移动。请参阅:https://github.com/cocos2d/cocos2d-iphone/issues/570

你需要改变游戏的设计,以便你的英雄移动,并且障碍物保持在相同的位置。然后你实现一个像机制一样的摄像机跟随你的移动英雄。

我们在flappy bird tutorial中使用了相同的方法。