2017-07-30 116 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

如果有一个更简单的解决方案可以更好,但我想这可以工作,以防万一没有更好的方法。不过谢谢。 –