2012-02-10 32 views
2

我在開始我的cocos2d冒險,並且有一些意識形態問題要問。我正在製作一個小型太空射擊遊戲,我是否有權使用以下課程結構?Cocos2d的最佳實踐

  • 場景
    • 背景層
      • 無限視差背景
    • 遊戲層
      • 太空飛船
      • 子彈
    • 控制層
      • 操縱桿
      • 按鈕

和後續問題 - 什麼是在其它層訪問對象的最佳實踐?例如,當操縱桿更新時,它必須旋轉太空船並移動背景。這兩個都在其他層。有沒有一些建議的方式去解決這個問題,或者我應該通過標籤獲取所需的對象並對它們進行操作?

+0

標籤應該沒問題。對於非遊戲元素,我通常使用通知 – Setrio 2012-02-10 18:08:06

回答

2

科科斯是一個很大的基於單系統,這可能不會吸引一些開發商,但往往在科科斯應用程序使用,並且是該框架的基本架構。如果您有一個主場景,並且許多後續圖層添加到該場景,並且您希望來自一個圖層的控件影響其他圖層上的精靈或邏輯,那麼將主場景設置爲單例並從遊戲杆發送信息確實沒有錯層回到場景來處理操縱其他圖層或精靈。我一直這樣做,這種技術被用在書籍和在線的無數Cocos教程中,所以如果你這樣做,你可以感覺到你沒有違反太多的規則(而且這也很容易做到)。

如果您改爲選擇使用一層中的指針將數據發送到其他層,這會讓您陷入許多麻煩,因爲一個節點不應擁有另一個沒有特定父子關係的節點用。這樣做會在您稍後移除場景並導致內存泄漏時導致本機Cocos清理方法崩潰和問題。在這種情況下,您可以使用弱引用,但這仍然取決於一個圖層期望另一個圖層總是在附近,但情況可能並非如此。

發送數據回主遊戲場景然後發送和使用相應是非常有效的。

1

這似乎是一個完全合理的方式來安排你的對象,這是我使用的一種方法。

對於訪問對象,我會保留一個顯式引用作爲成員變量的對象,並直接使用它。 (使用標籤不是一個壞的選擇,我只是覺得它可能會有點混亂)。

@interface Class1 : NSObject 
{ 
    CCLayer *backgroundLayer; 
    CCLayer *contentLayer; 
    CCLayer *hudLayer; 

    CCSprite *objectIMayNeedToUseOnBackgroundLayer; 
    CCNode *objectIMayNeedToUseOnContentLayer; 

} 
1

關於標籤,一個方法我用它來確保我分配標籤編號是唯一的是如下定義枚舉:我也只需要設定ZORDER

typedef enum 
{ 
    kTag_BackgroundLayer = 100, 
    kTag_BackgroundImage, 
    kTag_GameLayer = 200, 
    kTag_BadGuy, 
    kTag_GoodGuy, 
    kTag_Obstacle, 
    kTag_ControlLayer = 300 
    kTag_Joystick, 
    kTag_Buttons 
}; 

大部分的時間和標記屬性CCNodes(即CCSprites,CCLabelTTF等)相同,因此您可以實際使用枚舉來定義您的zOrder。

+0

這是一個很棒的提示,謝謝! – clops 2012-04-02 08:15:44