2012-08-08 47 views
0

這是我想要做的。如何保持新的比例尺寸Cocos2D

我有一個精靈在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]]; 

我試圖保持新的縮放大小,並開始從那裏再縮小。

+0

是你的整個更新方法嗎? – giorashc 2012-08-08 06:49:54

+0

我不明白你的問題。在動畫結束時,精靈必須具有作爲參數給出的比例(我測試了它並且它工作正常)。如果您同時執行多個動畫,則應該使用CCScaleTo。那麼你到底有什麼問題? – 2012-08-08 08:31:06

+0

@giorashc不,那不是我的整個更新方法。 – 2012-08-08 08:54:55

回答

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]; 
     } 
    } 
+0

謝謝,這就是我正在做的和我正在尋找的解決方案。 – 2012-08-10 07:02:10

0

如果要縮放到絕對比例因子,請不要使用CCScaleBy。改用CCScaleTo。

CCScaleBy的問題在於,如果您的比例是1.5,而您縮小了0.5,則最終的比例爲1.0。但是,如果由於某種原因,當節點縮放到1.2時,縮放會被中斷並再次執行,您最終將從1.2縮放到0.7。最後,如果要確保在完成縮放後使用特定比例因子,請在其末尾創建一個CCCallFunc或CCCallBlock的CCS序列,並手動並強制設置比例因子爲特定值。

+0

感謝您的信息 - 非常有幫助。 – 2012-08-10 07:02:53