Обновить координаты спрайта в игре - PullRequest
1 голос
/ 21 октября 2011

Это действительно было хлопотно, но у меня есть два спрайта, оба из которых имеют длину 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 любит очень быстро вращаться по кругу.

Я буду любить того, кто решит мою проблему до конца моей жизни.

1 Ответ

3 голосов
/ 21 октября 2011

РЕДАКТИРОВАТЬ:

На обсуждение в этой теме, похоже, вы используете степень, где следует использовать радианы, но не там, где я думал.Попробуйте это:

CGFloat theMathx = (17*cosf(CC_DEGREES_TO_RADIANS(thyAngle))); //17 is the length of the arm
CGFloat theMathy = (17*sinf(CC_DEGREES_TO_RADIANS(thyAngle)));

Попробуйте использовать это, чтобы добавить 90 градусов к повороту.Cocos2D использует радианы вместо градусов:

...