2013-02-22 61 views
0

我正在使用Cocos2d 2.0並且沒有其他人(沒有BOX2D等)。我有一個角色,併爲它添加了一個影子作爲CCSprite子節點。它在移動時會產生很好的「飛行效果」,但不幸的是,當角色旋轉時,孩子們也會這樣做,而影子卻以不切實際的方式移動。看到這樣的畫面:Cocos2d:以真實的方式在CCSprite後面獲得陰影的算法

enter image description here

在3D遊戲,這將被照顧的圖形引擎與3D矩陣,並在遊戲中的光源的位置。然而,我的遊戲非常簡單,不需要任何3D圖形,所以我需要找到一個程序化的近似值。

首先嚐試使用「setPosition」和「setRotation」方法,但沒有多大幫助(陰影不改變位置)。

-(void) setPosition:(CGPoint)position 
{ 
    [super setPosition:position]; 


    CCSprite * shadow = (CCSprite *)[self getChildByTag:belowByOneZFirst]; 
    if (shadow!=nil) { 
     [shadow setPosition:shadowOriginalPosition]; 
     CCLOG(@"Setting shadow position"); 
    } 

} 

-(void) setRotation:(float)rotation 
{ 
    [super setRotation:rotation]; 
    CCSprite * shadow = (CCSprite *)[self getChildByTag:belowByOneZFirst]; 
    if (shadow!=nil) { 
     [shadow setRotation:0]; 
     CCLOG(@"Setting shadow rotation"); 
    } 

} 

我現在有兩條可能的路徑。一種是使陰影成爲一個獨立的CCSprite(而不是將它添加爲子對象),另一個是嘗試將setter修改爲「SET_DIRTY_RECURSIVELY()」宏(它可以檢查一個孩子是否有特定的標記,如果是的話)不適用此更改)。

第一種方法有點過於複雜,第二種方法聽起來不錯,但仍然有點太複雜。

此外,只是不「改變」陰影的相對位置並不能完全解決問題。我應該寫一些代碼來適應陰影的相對位置,考慮到Sprite在屏幕內的相對位置(比如我把我的太陽設置在左上角,然後陰影會根據相對於太陽)。

有沒有其他人有類似的算法來實現與Cocos2d,如果是的話有沒有任何常見的模式來解決這個問題?

+1

提示:添加精靈和陰影(位置偏移量)作爲ccnode的子節點。移動節點,僅旋轉精靈,陰影位置仍然是偏移到精靈位置。問題解決了(據我瞭解)。 – LearnCocos2D 2013-02-22 19:59:24

+0

@ LearnCocos2D奇妙的是,非常感謝(簡直就是天才)。你應該複製並粘貼這個答案,以便我可以接受它,並upvote。 – mm24 2013-02-22 23:44:28

+0

好,不是100%確定它是否適合你 – LearnCocos2D 2013-02-23 18:44:43

回答

0

提示:將精靈和陰影(位置偏移量)都添加爲ccnode的子節點。移動節點,僅旋轉精靈,陰影位置仍然是偏移到精靈位置。問題解決了(據我瞭解)。