移动层导致物理对象停留在原地
Posted
技术标签:
【中文标题】移动层导致物理对象停留在原地【英文标题】:Moving layer causes physics object to stay in place 【发布时间】:2014-03-09 16:59:52 【问题描述】:我正在与 sprite builder 结合使用 cocos2d v3。
这个游戏是一个简单的接球和躲避游戏,物体落下,英雄站在屏幕底部,你可以用加速度计移动他。
我有一个包含一些对象(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】:这是在物理引擎中做出的设计决策。 物理身体不随父母移动。参见:https://github.com/cocos2d/cocos2d-iphone/issues/570
你需要改变你的游戏设计,让你的英雄移动,而障碍物保持在相同的位置。然后你实现一个类似相机的机制来跟随你移动的英雄。
我们在flappy bird tutorial 中使用了相同的方法。
【讨论】:
感谢您的回复,确实成功了!我仍然存在的唯一问题是,除非我在对象上启用了重力,否则碰撞不会触发。我当然可以在 Physicsnode 上将重力设置为 0,00,但是碰撞也不会触发。我一定很简单,但似乎无法找出它是什么:-(再次感谢您的帮助!! 我刚刚接受了你的回答。这是我目前拥有的版本:cocos2d-iphone version 3.0.alpha 好的,最新版本是RC3。你可以尝试切换到那个,看看是否能解决问题。以上是关于移动层导致物理对象停留在原地的主要内容,如果未能解决你的问题,请参考以下文章