我正在使用Cocos2d 2.0並且沒有其他人(沒有BOX2D等)。我有一個角色,併爲它添加了一個影子作爲CCSprite子節點。它在移動時會產生很好的「飛行效果」,但不幸的是,當角色旋轉時,孩子們也會這樣做,而影子卻以不切實際的方式移動。看到這樣的畫面:Cocos2d:以真實的方式在CCSprite後面獲得陰影的算法
在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,如果是的話有沒有任何常見的模式來解決這個問題?
提示:添加精靈和陰影(位置偏移量)作爲ccnode的子節點。移動節點,僅旋轉精靈,陰影位置仍然是偏移到精靈位置。問題解決了(據我瞭解)。 – LearnCocos2D 2013-02-22 19:59:24
@ LearnCocos2D奇妙的是,非常感謝(簡直就是天才)。你應該複製並粘貼這個答案,以便我可以接受它,並upvote。 – mm24 2013-02-22 23:44:28
好,不是100%確定它是否適合你 – LearnCocos2D 2013-02-23 18:44:43