【问题标题】:iOS cocos2D Chipmunk Body's velocity is invalidiOS cocos2D Chipmunk Body 的速度无效
【发布时间】:2015-02-24 18:43:43
【问题描述】:

在 cocos2d-spritebuilder 3.4 中,我创建了我的物理世界和我的播放器,就像许多官方示例一样。

    self.sprite.physicsBody = [CCPhysicsBody bodyWithCircleOfRadius:10 andCenter:self.anchorPoint];
    self.sprite.physicsBody.type = CCPhysicsBodyTypeDynamic;
etc...

所以,当我尝试将精灵向右移动时,例如使用

[self.sprite.physicsBody applyImpulse: CGPointMake(32,0)];

我的应用程序出现崩溃报告:

Aborting due to Chipmunk error: Body's velocity is invalid.
    Failed condition: v.x == v.x && v.y == v.y
    Source:.../Source/libs/cocos2d-iphone/external/Chipmunk/src/cpBody.c:106

花栗鼠来源有:

-(void)applyImpulse:(CGPoint)impulse { _body.velocity = cpvadd(_body.velocity, cpvmult(CCP_TO_CPV(impulse), 1.0f/_body.mass));}

所以,我知道 MASS 默认设置为 1.0f,但我想尝试手动设置此值..):

self.sprite.physicsBody.mass = 1.0f

同样的错误,同样的结果...... 但如果我尝试设置:

self.sprite.physicsBody.body.mass = 1.0f

效果很好。 那么,这两个参数有什么区别? 为什么 applyImpulse 只取 body.mass?

【问题讨论】:

  • 虽然我不是物理学家,但很明显,您将速度与脉冲混淆了(假设您在 applyImpulse 通话中使用了速度)。我预计您将需要尝试不同的冲动值,直到身体开始按照您的预期行事(可能会根据用户行为随时间改变冲动值)。从阅读this开始。
  • 先生,问题不在于冲动。游戏运行良好,我的问题很清楚,参考花栗鼠的资料,关于质量的两个变量而不是一个。

标签: objective-c cocos2d-iphone chipmunk spritebuilder


【解决方案1】:

据我所知,Chipmunk 在施加“大”冲动时表现不佳。您应该尝试并做的是在多个帧上建立速度。

编辑:检查此链接http://forum.cocos2d-swift.org/t/ccphysics-applyimpulse-not-working/12151/12

【讨论】:

  • 感谢您的回答,但如果您不想在碰撞检测期间出现“隧道”等问题,也建议不要使用速度值。那么,正确的方法是什么?
  • 这就是为什么一个人应该在几帧上建立速度,以避免隧道和通过“薄”对撞机。我不认为有推荐的方法来做到这一点,因为即使 API 带有 ApplyImpulse,也不推荐也不现实(这就是我们使用物理库的原因)应用大脉冲而不缓和它。在我的游戏中,我必须让我的角色加速几帧,以免他穿过墙壁。祝你好运!
  • 感谢 younesouhbi,但尽管采取了所有这些预防措施(我已经尝试过),但不幸的是,Chipmunk 不使用 CCD(连续碰撞检测),因此无法避免隧道问题,以及在几帧上建立速度(实际上这是物理引擎衍生的结构问题...)。但这是 OT,我的问题是针对 body.mass 和 mass 参数..
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多