iOS SpriteKit 重叠 SKSpriteNodes / 图片

iOS SpriteKit overlapping SKSpriteNodes / images

我是初学者,正在 Swift、iOS Xcode 中组装 SpriteKit 游戏。 GameViewController 将值 name: String 传递给 GameScene。 GameScene 更新了两个 images/SKSpriteNodes,名为 apple.pngorange.png。两个 images/SKSpriteNodes 的位置大致相同,因此它们不应重叠。但经过几次更新后,它们都重叠了。我有一个模糊的想法,我创建了太多实例而不是实际上更新但不幸的是这是我知识的尽头。

如何在每次更新时停止图像重叠?谢谢你的帮助。

func updateName(name: String) {  // name:String is passed from gameViewController
 var XYZ = SKSpriteNode(imageNamed: "\(name).png")
 if (name == "apple") {
     XYZ.anchorPoint = CGPointMake(...)
     XYZ.position = CGPoint(...)
     XYZ.setScale(...)
     self.addChild(XYZ)
     // animation of apple
 } else if (name == "orange") {
     XYZ.anchorPoint = CGPointMake(another set of ...)
     XYZ.position = CGPoint(another set of ...)
     XYZ.setScale(snother set of ...)
     self.addChild(XYZ)
     // animation of orange
 }
}

与其每次都在另一个之上添加一个 child,不如使用现有的 spriteNode 并更新纹理(当您声明您的精灵时,请确保设置 name 属性 这样你就可以访问它们了)。您的函数将如下所示:

func updateName(name: String) {  // name:String is passed from gameViewController
 var XYZ: SKSpriteNode = self.childNodeWithName("\(name)") as SKSpriteNode
 if (name == "apple") {
     XYZ.texture = //set texture however you'd like
     // animation of apple
 } else if (name == "orange") {
     XYZ.texture = //set texture however you'd like
     // animation of orange
 }
 }

这样您就不会每次都创建越来越多的 XYZ 精灵,而是根据其名称获取相同的精灵节点来处理您的动画。此外,如果您同时拥有多个同名精灵,您应该将精灵本身传递给函数以确保您拥有正确的实例。

希望对您有所帮助!如果您有任何问题,请告诉我。

在 GameScene 的开头我这样声明 XYZ

    XYZ = SKSpriteNode()

函数内部,行

    var XYZ: SKSpriteNode = self.childNodeWithName("\(name)") as SKSpriteNode

returns 无 虽然

    println("\(name)") 

returns 正确的名字。设置 'name' 属性 是否意味着添加以下行?

    name.name = "\(name)"