b2RevoluteJoint Strictness

时间:2012-02-12 15:05:29

标签: cocos2d-iphone box2d

我游戏中的主要玩家是使用b2Revolute关节连接在一起的两足动物。这在大多数情况下效果很好,因为我可以限制每个关节的旋转以制作一个有点逼真的两足动物。但是当对两足动物施加大量的力时,它的部分会拉伸,看起来很荒谬。有没有办法限制关节的弹性?另一个问题是每个关节并不完全限制旋转。这最终导致腿部摆动近360度。有没有办法确定这个关节有多严格?我想过使用b2DistanceJoint,但这并不允许我限制旋转。

1 个答案:

答案 0 :(得分:0)

在Box2D中,计算脉冲以移动两个连接体,以便满足关节约束(例如,对于旋转关节,约束是锚点和角度限制)。这些冲动在两个机构之间共享,以便考虑其质量的影响。

两个等质量的物体将同等地移动以纠正关节约束。当身体具有不同的质量时,较轻的身体倾向于“服从”较重的身体并且更多地移动以纠正约束而不是沉重的身体,就像它们之间存在某种“啄食顺序”一样。当较轻的车身连接到两个较重的车身并且双向“啄”时会出现问题,这几乎不会导致两个关节的约束同时得到满足。

避免这种情况的一种方法是确保这种啄食顺序只有一种方式,例如。你的两足动物的躯干是最重的身体,所有相连的身体随着他们从躯干越来越远而越来越轻。这种方法一直有效,直到他在手臂末端抓住比身体重的东西,此时啄食顺序就会发生冲突。

我的猜测是你试图让两足动物抓住一些重物然后被拉,但不会被拉开?您可以通过将绳索接头连接在一起来实现此目的,绳索接头设置两个点可以分开的最大距离。例如,如果他发现自己处于某种可怕的情况,比如用一只手悬挂在悬崖边缘,另一只手抓着他的宠物大象,你可以将绳子连接起来,加入悬崖和大象。只要双手之间的最大距离。这将使他看起来超强(他必须首先尝试这样做),因为啄食顺序直接从悬崖直接到达大象并完全跳过他。