2016-03-06 51 views
4

從GameplayKit開始,我正在建模一個無盡的跑步者,玩家可以通過點擊屏幕在之間交換角色。人物首先可以短距離攻擊(組件),第二跳(組件)和第三彈(組件)。我如何在GameplayKit/SpriteKit中以有效的方式建模實體和組件

我想知道什麼是建模這兩個之間的最佳方式:

  1. 創建一個有3個不同的字符實體(陣列)的一類球員,其中一個用它的組件

  2. 創建一個實體播放器有3個不同的字符組件 並添加所有的動作和動作組件(拍攝/跳躍......)

這是一個真正的大項目,所以我很擔心的最好的辦法保持代碼mantainable和可讀性的壽命長

Ps :. SpriteComponent將成爲所有實體的.sks上組件負責的可視化表示。

Ps2 :.如果可能,請使用swift示例。

謝謝你的時間。

回答

3

這取決於你做了什麼以及每個角色除了使用組件之外還做了什麼。 使用gameplayKit我可能更喜歡創建實體類而不僅僅是類。

你是否考慮過只使用1個玩家實體,而不是當你改變角色時你只是爲那個角色移除/添加組件。

說你從攻擊一到跳一個改變,你可以刪除攻擊組件

player.removeComponent.... 

,並添加跳躍成分

let jumpingComponent = ... 
player.addComponent(jumpingComponent) 

一般來說,你要確保你的組件儘可能靈活和通用。 例如,您的spriteComponent應該在其init方法中使用圖像字符串/紋理,以便您可以將相同的組件添加到每個實體,但使用不同的圖像。現在

class SpriteComponent: GKComponent { 

    let node: SKSpriteNode 

    init(texture: SKTexture) { 
      node = SKSpriteNode(texture: texture, color: SKColor.clearColor(), size: texture.size()) 
    } 
} 

您可以同時使用不同的圖像

let character1Texture = SKTexture(imageNamed: "Character 1 image" 
    let spriteComponent = SpriteComponent(texture: character1Texture) 
    addComponent(spriteComponent) 

也是一樣的動畫和其他組件的同一組件添加到每個字符。

我對待它的方式就是這樣。

說我有一個遊戲,我有10種類型的敵人差不多相同。我可能會試着讓所有10個敵人使用的所有組件都有1個敵方實體類。比我會添加使每個動態唯一或基於我將在init方法中傳遞的enumType的相關組件。

另一方面說,我有3個主要人物,都做了非常獨特的事情,也許它更容易和更乾淨,只是創建3個實體類。另外不要忘記子類化,所以你可以創建1個實體類與所有的共享組件,而不是其他2個實體的子類。

Apple在DemoBots中執行此操作,它們具有TaskBot實體,並且它們都是TaskBot的子類的FlyingBoy實體和GroundBot實體。

它真的取決於你。

+0

這可能是,但是3個角色對於每個動作(例如與wizzard,騎士和bowman的派對)有不同的精靈和動畫,以優化內存和處理管理將不利於移除視覺組件每次添加另一個具有不同參數的視覺** **玩家點擊一個按鈕?或者只是一個可視化組件,其中有3種方法可以在字符之間進行切換,並且在我們決定使用4+的情況下在這個相同的組件中添加另一個,這將是一個好的解決方案嗎感謝您的回答。對問題的答覆我會選擇這個答案作爲解決方案= D –

+1

很難確定最佳的方法是什麼,有很多可能性。你可以使用3個實體。你的Sprite組件應該在它的init方法中傳遞一個圖像名稱字符串,這樣你可以給3個實體使用相同的Sprite組件,但是具有不同的紋理。不僅僅是爲實體創建動畫組件等。您可以再次創建1個實體,並使用不同的組件在您的GameScene中創建3個實例。我更喜歡使用除組件外代碼很少的實體子類,因此可能創建3個實體即可 – crashoverride777

相關問題