-1

こんにちは友人私はcocos2dゲームを実装しています。与えられた半径で特定の距離でccspriteを回転させたいという点で。私はこれを実装しています。スプライトを時計回りに回転させ、しばらくしてから反時計回りに回転させたい。その中で何を変えるべきか。

self.isAccelerometerEnabled = NO;
        TimerFlag = 0;
        float AngleTick = 0.1;
        currentAngle -= AngleTick;
        circleCenter.x = 280;
        circleCenter.y = 160;
        newTankFish.position = ccpAdd(ccpMult(ccpForAngle(currentAngle), 120), circleCenter);
        newTankFish.rotation = currentAngle * -180 / M_PI;
        id tankFishMove  = [CCRepeat actionWithDuration:3.0];
        id TankPowerDone = [CCCallFunc actionWithTarget:self selector:@selector(TankPowerOver)];
        [newTankFish runAction:[CCSequence actions:tankFishMove, TankPowerDone, nil]];
        [CoinProjectiles addObject:newTankFish];
4

2 に答える 2

2
// For Clockwise Rotation

    float AngleTick = 0.1;
    //currentAngle -= AngleTick;
    currentAngle = currentAngle+AngleTick;

    circleCenter.x = 120;
    circleCenter.y = 140;
    CircleSprite.position = ccpAdd(ccpMult(ccpForAngle(currentAngle), 0), circleCenter);
    CircleSprite.rotation = currentAngle * -180 / M_PI;
    id CircleSpriteMove  = [CCRepeat actionWithDuration:0.1];
    [CircleSprite runAction:CircleSpriteMove];

// For Anti Clockwise Rotation
    float AngleTick1 = 0.1;
    currentAngle1 -= AngleTick1;
    //currentAngle = currentAngle+AngleTick;
    circleCenter1.x = 360;
    circleCenter1.y = 180;
    CircleSprite1.position = ccpAdd(ccpMult(ccpForAngle(currentAngle1), 0), circleCenter1);
    CircleSprite1.rotation = currentAngle1 * -180 / M_PI;
    id CircleSpriteMove1  = [CCRepeat actionWithDuration:0.1];
    [CircleSprite1 runAction:CircleSpriteMove1];
于 2012-07-09T12:58:35.310 に答える
1

別のスプライト(A)の子としてスプライト(B)を追加し、Bに100,0の位置を指定してから、そのスプライト(360度)に対してCCRotateByアクションを実行すると、希望どおりに動作することがわかります。

これはノードの任意の子ノードで機能し、基本的に親を回転の中心点として使用しますが、位置は回転の半径を決定します。

他の答えの計算を使用する必要はありませんが、もちろんそれは機能します。それはもっとたくさんのコードです。

于 2012-07-10T13:29:48.593 に答える