如何保持新的规模Cocos2D

时间:2012-08-08 00:25:17

标签: cocos2d-iphone scale

这就是我想要做的事情。

我有一个精灵,在60秒的时间内不断缩放 down 。然后,当发生碰撞时,该精灵将向上缩放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]];

我正在尝试保留新的缩放尺寸并再次开始缩小尺寸。

2 个答案:

答案 0 :(得分:0)

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

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

最后,如果要确保在完成缩放后使用特定的比例因子,请在其末尾创建一个CCCequence,其中包含CCCallFunc或CCCallBlock,并将比例因子手动和强制设置为特定值。

答案 1 :(得分: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];
        }
    }