我正在摆弄 cocos2d v3 与 sprite builder 的结合。
该游戏是一款简单的捕捉和躲避游戏,物体掉落,英雄站在屏幕底部,您可以使用加速度计移动他。
我有一个关卡文件 (cclayer),其中包含一些对象 (ccnode),并且启用了物理。 在我的更新功能中,我将图层缓慢向下移动。
如果对象启用了物理,它们就会掉落。如果我将它切换到静力学物理,它们会留在原地。
我能找到的将对象与层一起移动的唯一方法是完全关闭物理。但随后碰撞将不再起作用......
这让我在过去 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);
最佳答案
这是在物理引擎中做出的设计决定。 物理体不随 parent 移动。参见:https://github.com/cocos2d/cocos2d-iphone/issues/570
您需要更改游戏设计,让您的英雄移动,而障碍物保持在同一位置。然后你实现一个类似相机的机制来跟随你移动的英雄。
我们在 flappy bird tutorial 中使用了相同的方法.
关于ios - 移动层导致物理对象留在原地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22285134/