iOS SpriteKit重叠SKSpriteNodes / images

时间:2015-08-28 00:57:20

标签: ios image swift sprite-kit skspritenode

我是初学者,并在Swift,iOS Xcode中组装了一个SpriteKit游戏。 GameViewController将值 name:String 传递给GameScene。 GameScene更新两个名为 apple.png orange.png 的图像/ SKSpriteNodes。两个图像/ 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
 }
}

2 个答案:

答案 0 :(得分:2)

不是每次都添加一个子项,而是使用现有的spriteNode并更新纹理(当您声明您的sprite时,请确保设置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精灵,而是根据其名称获取相同的spriteNode来处理动画。此外,如果您同时拥有多个具有相同名称的精灵,则应该将精灵本身传递给函数以确保您拥有正确的实例。

希望这有帮助!如果您有疑问,请告诉我。

答案 1 :(得分:0)

在GameScene的开头,我像这样宣布了XYZ

    XYZ = SKSpriteNode()

在函数内部,行

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

虽然

,但仍返回nil
    println("\(name)") 

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

    name.name = "\(name)"