iOS SpriteKit 重叠 SKSpriteNodes / 图片
iOS SpriteKit overlapping SKSpriteNodes / images
我是初学者,正在 Swift、iOS Xcode 中组装 SpriteKit 游戏。 GameViewController 将值 name: String 传递给 GameScene。 GameScene 更新了两个 images/SKSpriteNodes,名为 apple.png 和 orange.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)"
我是初学者,正在 Swift、iOS Xcode 中组装 SpriteKit 游戏。 GameViewController 将值 name: String 传递给 GameScene。 GameScene 更新了两个 images/SKSpriteNodes,名为 apple.png 和 orange.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)"