0

这就是我想要做的。

我有一个在 60 秒内不断缩小的精灵当发生碰撞时,这个精灵会放大1.5

        -(void) update: (ccTime) deltaTime 

        {if(CGRectIntersectsRect([randomSprite boundingBox], [other boundingBox]))  {

        [SAE playEffect:@"collisionSoundEffect.mp3"];
        [randomSprite runAction:[CCScaleBy actionWithDuration:3 scaleX:1.5 scaleY:1.5]];

问题是当 3 秒后它“弹出”回到它本来的大小,就好像没有发生碰撞一样。

当然哪个更小。

我想要精灵做的是在碰撞后保持newSize 。然后让精灵继续按原样缩小。

非常感谢任何帮助或指导。

谢谢你。

[thisSpriteIsConstatnlyScalingDown runAction:[CCScaleBy actionWithDuration:60 scaleX:.01 scaleY:.01]];

我正在尝试保持新的缩放大小并再次开始缩小。

4

2 回答 2

0

如果要缩放到绝对比例因子,请不要使用 CCScaleBy。改用 CCScaleTo。

CCScaleBy 的问题在于,如果您的比例为 1.5,然后按比例缩小 0.5,您最终会得到比例 1.0。但是,如果由于某种原因,当节点缩放到 1.2 时缩放被中断并再次执行,您最终会从 1.2 缩放到 0.7。

最后,如果您想确保在缩放完成后使用特定的比例因子,请创建一个 CCSequence,其末尾带有 CCCallFunc 或 CCCallBlock,并手动强制将比例因子设置为特定值。

于 2012-08-08T12:39:10.960 回答
0

我认为这是因为你有两个动作同时运行。放大操作完成后,缩小操作仍在运行。

#define kScaleDownActionTag 1
#define kScaleUpActionTag 2


    ...

    // start downscale action
    CCAction *action = /* your scale down action */;
    action.tag = kScaleDownActionTag;
    [sprite runAction:action];


    ...

    if(CGRectIntersectsRect([randomSprite boundingBox], [other boundingBox]))  
    {
        // if scale up action isn't running already
        if (![randomSprite getActionByTag:kScaleUpActionTag])
        {
            // stop downscale action and run upscale action
            [randomSprite stopActionByTag:kScaleDownActionTag];
            CCAction *action = /* your scale up action */
            action.tag = kScaleUpActionTag;
            [randomSprite runAction:action];
        }
    }
于 2012-08-08T14:23:25.060 回答