2017-07-30 110 views
0

我創建了一個bullet類,我希望它包含一個名爲locatedInArray的屬性。 locateInArray存儲子彈存儲在GameScene類中的數組的引用。唯一的問題是,當我添加打印語句時,它顯示與遊戲場景中的實際數組相比,locateInArray具有不同的值。無論如何,通過引用而不是值傳遞數組?傳遞數組參考[Swift 3 Xcode 8]

該數組通過函數調用傳遞給項目符號實例。

bullet.shoot(from: self.mainCharacter, to: "right", fromPercentOfWidth: 0.5, fromPercentOfHeight: 0.65, addToArray: &playerBulletArray, inScene: self) 

將數組分配爲項目符號對象內的屬性。

func shoot(from character: SKSpriteNode, to direction: String, fromPercentOfWidth xPercent: CGFloat, fromPercentOfHeight yPercent: CGFloat, addToArray array: inout[SKBulletsNode?], inScene scene: GameScene) { 

    self.gameScene = scene 
    self.locatedInArray = array 
} 
+0

爲什麼哪些陣列子彈護理具有防禦呢? – Alexander

回答

0

你能創建一個包含了SKBulletsNode數組作爲屬性的類並傳遞這些對象到函數中的單?

這樣的:

class BulletArray { 
    var bullets : [SKBulletsNode]? 
} 

func shoot(from character: SKSpriteNode, to direction: String, fromPercentOfWidth xPercent: CGFloat, fromPercentOfHeight yPercent: CGFloat, addToArray array: inout BulletArray , inScene scene: GameScene) { 
    self.gameScene = scene 
    self.locatedInArray = array 
} 

退房此鏈接更多的信息: Swift: Pass array by reference?

+0

是的,locateInArray實際上是[SKBulletsNode?]類型。 –

+0

Swift中的數組和字典是通過值傳遞的,因此您必須將其包裝在一個類中以便通過引用傳遞它。 –

+0

如果有一個更簡單的解決方案可以更好,但我想這可以工作,以防萬一沒有更好的方法。不過謝謝。 –