Ios 设置旋转点的角度

Ios 设置旋转点的角度,ios,cocos2d-iphone,box2d-iphone,Ios,Cocos2d Iphone,Box2d Iphone,从我所读到的内容来看,在Box2d中,使用GetJointAngle函数可以获得旋转关节的角度,但是当尝试设置角度时,成员m_referenceAngle受到保护。不能以编程方式设置角度吗 我发现我可以将一个关节的角度应用于另一个身体,如下所示: float FirstAngle=firstArmJoint->GetJointAngle(); secondArmBody->SetTransform(b2Vec2((750.0/PTM_比率),(520.0f+100)/PTM_比率),hourAn

从我所读到的内容来看,在Box2d中,使用GetJointAngle函数可以获得旋转关节的角度,但是当尝试设置角度时,成员m_referenceAngle受到保护。不能以编程方式设置角度吗

我发现我可以将一个关节的角度应用于另一个身体,如下所示:

float FirstAngle=firstArmJoint->GetJointAngle(); secondArmBody->SetTransform(b2Vec2((750.0/PTM_比率),(520.0f+100)/PTM_比率),hourAngle)

我把它放在ccTouchesMoved中,这样当用户拖动第一个对象(从中检索FirstAngle)时,第二个对象(secondArmBody)也会移动

发生的情况是,第二个实体在图像顶部旋转,而不是在定位点旋转

有什么想法吗?

SetTransform()
可以用来设置身体的位置和旋转。这完全独立于身体上的任何关节。例如,如果要确保身体在给定时刻完全直立,可以调用

body->SetTransForm(body->GetPosition(), 0);
将0作为角度值传递(垂直)。我从来没有在有关节的身体上尝试过这个,但我怀疑它是否能正常工作

当我遇到必须以某个角度创建旋转点的问题时,我通过启用关节上的电机并调整电机速度,直到角度与我想要的角度匹配,从而解决了这个问题。这将模拟关节的真实运动。例如:

创建关节 指关节 基本上,您可以看到目标角度位于当前角度的哪一侧,然后设置电机速度以在正确方向上移动关节。希望有帮助


我发现我可以将角度应用到与关节相关的身体上:是的,我可以使用该角度(指向关节)沿我移动第一个对象的方向移动第二个对象,但它只会导致对象沿该方向旋转,与速度不匹配,或者在我释放第一个对象时停止旋转
b2RevoluteJointDef armJointDef;
armJointDef.Initialize(body1, body2,
    b2Vec2(body1->GetPosition().x,
    ((body1->GetPosition().y/PTM_RATIO));
armJointDef.enableMotor = true;
armJointDef.enableLimit = true;
armJointDef.motorSpeed = 0.0f;
armJointDef.maxMotorTorque = 10000.0f;
armJointDef.lowerAngle = CC_DEGREES_TO_RADIANS(lowerArmAngle);
armJointDef.upperAngle = CC_DEGREES_TO_RADIANS(upperArmAngle);
_world->CreateJoint(&armJointDef);
float targetAngle = SOME_ANGLE;
b2JointEdge *j = body->GetJointList();
b2RevoluteJoint *r = (b2RevoluteJoint *)j->joint;
if(r->GetAngle() > targetAngle){
    r->SetMotorSpeed(-1);
} else { r->SetMotorSpeed(1); }