Это действительно было хлопотно, но у меня есть два спрайта, оба из которых имеют длину 17 пикселей. У них обоих есть точки привязки в ccp (0.5f, 0.0f); и что я хочу, чтобы при вращении arm1 CGPoint для arm2 был равен противоположному концу якорной части arm1. Например, под углом 45 градусов CGPoint будет просто ccp (arm1.position.y, arm1.position.x + 17);
Таким образом, я обновляю вращение для arm1 в моей функции ccTime, и она вызывает другой метод для вычисления угла поворота. По сути, происходит следующее: arm2 вращается с большой скоростью в правильной круговой области, что означает, что что-то правильно, но вращение просто супер быстрое.
-(void) callEveryFrame:(ccTime)dt{
//if the user is holding down on the screen, arm1 rotates.
if(held == true){
_theArm2.position = [self fixAngle];
timer = timer + .0166; //this gets reset after touchesEnded.
_theArm1.rotation = _theArm1.rotation - (timer * 10);
}
-(CGPoint)fixAngle{
CGFloat theAngle = _theArm1.rotation;
//I'm not to sure how the degrees works in cocos2d, so I added 90 to the angle of rotation's original position, and it works until the rotation variable changes.
CGFloat thyAngle = theAngle + 90;
CGFloat theMathx = (17*cosf(thyAngle)); //17 is the length of the arm
CGFloat theMathy = (17*sinf(thyAngle));
theMathx = theMathx + 100;//these 2 updates just change the position, because arm1's
theMathy = theMathy + 55; //CGpoint is located at ccp(100,57)
return CGPointMake(theMathx, theMathy);
}
Извините, если код ... плохой. Я относительно новичок в программировании, но все работает, за исключением того, что дурацкий arm2 любит очень быстро вращаться по кругу.
Я буду любить того, кто решит мою проблему до конца моей жизни.