我的游戏场景中随机加载了多个SpriteNode,但实际上是同一个SpriteNode添加了多次。我在toucheSend中有一个函数,当在与SpriteNode相同的位置释放触摸时,它将移除SpriteNode。这只适用于初始SpriteNode(添加的第一个SpriteNode),但不适用于所有其他SpriteNode。
我试图将代码“if object.contains(location)”转换为while循环,这样它就可以永远重复。那也没用。
var object = SKSpriteNode()
var objectCount = 0
func spawnObject() {
object = SKSpriteNode(imageNamed: "image")
object.position = CGPoint(x: randomX, y: randomY)
objectCount = objectCount + 1
self.addChild(object)
}
while objectCount < 10 {
spawnObject()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches {
let location = t.location(in: self)
if object.contains(location) {
object.removeFromParent()
}
}
}
我以为只要我碰一个物体,它就会消失。但这只发生在一个物体上,它工作得很好,正如第一个物体所期望的那样,但是其他九个物体没有反应。
最佳答案
好,这是使用数组跟踪派生对象的基础,以便您可以检查它们:
var objectList: [SKSpriteNode] = [] // Create an empty array
func spawnObject() {
let object = SKSpriteNode(imageNamed: "image")
object.position = CGPoint(x: randomX, y: randomY)
self.addChild(object)
objectList.append(object) // Add this object to our object array
}
while objectList.count < 10 {
spawnObject()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches {
let location = t.location(in: self)
// Check all objects in the array
for object in objectList {
if object.contains(location) {
object.removeFromParent()
}
}
// Now remove those items from our array
objectList.removeAll { (object) -> Bool in
object.contains(location)
}
}
}
注意:这并不是最好的方法,尤其是从性能的角度来看,但这足以让人理解这个想法。
关于ios - 如何使“removeFromParent()”多次工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56839329/