-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

如果您添加一个精灵 (B) 作为另一个精灵 (A) 的子对象,并给 B 一个 100,0 的位置,然后在其上运行 CCRotateBy 操作(360 度),您会发现它完全符合您的要求。

这适用于节点的任何子节点,它基本上使用父节点作为旋转的中心点,而位置决定了旋转的半径。

您不需要在其他答案中使用任何计算,但当然可以。这只是更多的代码。

于 2012-07-10T13:29:48.593 回答