- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 swift 和 spriteKit 的新手。我正在创建横向滚动游戏。我希望它从屏幕右侧的任意高度添加多个节点(称为 Impenitrible)并向左移动。我创建“Impenitrible”节点的功能是:
func spawnImpenitrible(){
Impenitrible.physicsBody = SKPhysicsBody(rectangleOfSize: Impenitrible.size)
let actionDone = SKAction.removeFromParent()
var MinValue = sand.size.height
var MaxValue = self.size.height - Impenitrible.size.height / 2
var spawnPoint = UInt32(MaxValue - MinValue)
Impenitrible.position = CGPoint(x: self.size.width - 60 , y: CGFloat(arc4random_uniform(spawnPoint)))
Impenitrible.physicsBody?.categoryBitMask = physicsCategory.impenitrible
Impenitrible.physicsBody?.contactTestBitMask = physicsCategory.sub
Impenitrible.physicsBody?.affectedByGravity = false
Impenitrible.physicsBody?.dynamic = true
self.addChild(Impenitrible)
}
我调用这个函数:
var impenitribleTimer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("spawnImpenitrible"), userInfo: nil, repeats: true)
我通过从“更新”函数中的 x 位置减去一个数字来移动它。
添加一次 Impenitrible 效果很好。但是一旦它再次调用该函数,应用程序就会崩溃并出现错误:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'试图添加一个已经有父级的 SKNode我哪里做错了?任何帮助都会很棒!谢谢。
最佳答案
首先,我想指出您的代码行:let actionDone = SKAction.removeFromParent()
实际上是无用的,因为您从未调用 runAction
来使用它。
错误消息很好地总结了它。 “试图添加一个已经有父节点的 SKNode”。您实际上从未调用过 removeFromParent()
。
添加 Impenitrible
一旦你发现效果很好,因为在开始时,Impenitrible
没有父级。后续调用将发生冲突,因为 Impenitrible
已经具有通过第一次调用添加的父级。
一个快速而肮脏的修复是在下一次调用 spawnImpenitrible
之前执行 runAction(SKAction.removeFromParent())
,在某处引用 Imprenitrible
。
关于ios - 如何将多个节点添加到场景并一次移动所有节点。 swift 。 SpriteKit ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132851/
我是一名优秀的程序员,十分优秀!