我在尝试运行我的游戏时收到错误:“尝试添加已有父节点的 SKNode”。
如果我将 SKSpriteNode 在本地添加到函数中,它就可以正常运行。但是当我尝试在全球范围内声明它时,我收到了该错误。任何解决此错误的帮助都会很棒。我认为这与self.bee.removeFromParent()
但我无法让它发挥作用。
let bee = SKSpriteNode(imageNamed: "Bee")
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(addBee),
SKAction.waitForDuration(0.5)
])
))
func addBee() {
bee.name = "Bee"
let actualY = random(min: 0, max: siz e.height+bee.size.height ) // random
bee.position = CGPoint(x: size.width + bee.size.width/2, y: actualY)
self.addChild(bee)
let slopeToPlayer = (bee.position.y - player.position.y) / (bee.position.x - player.position.x)
let constant = bee.position.y - slopeToPlayer * bee.position.x
let finalX : CGFloat = bee.position.x < player.position.x ? 500.0 : -500.0 // Set it to somewhere outside screen size
let finalY = constant + slopeToPlayer * finalX
let distance = (bee.position.y - finalY) * (bee.position.y - finalY) + (bee.position.x - finalX) * (bee.position.x - finalX)
let beeSpeed = random(min: CGFloat(50), max: CGFloat(150))
let timeToCoverDistance = sqrt(distance) / beeSpeed
let moveAction = SKAction.moveTo(CGPointMake(finalX, finalY), duration: NSTimeInterval(timeToCoverDistance))
let removeAction = SKAction.runBlock { () -> Void in
self.bee.removeFromParent()
}
bee.runAction(SKAction.sequence([moveAction,removeAction]))
}
您不能添加相同的单个实例SKNode
两次。这就像说一个人可以同时存在于两个地方一样。
当您创建Bee node
在全球范围内,在addBee
函数,您正在尝试添加相同的实例Bee
一次又一次。
如果要添加多个节点,则应该创建节点的单独实例。这就是从函数内部本地创建它们的原因。
func addBee() {
let bee = SKSpriteNode(imageNamed: "Bee")
bee.name = "Bee"
addChild(bee)
}
获取碰撞节点的参考。
func didBeginContact(contact: SKPhysicsContact) {
var bodyA : SKPhysicsBody!
var bodyB : SKPhysicsBody!
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask
{
bodyA = contact.bodyA!
bodyB = contact.bodyB!
}
else
{
bodyB = contact.bodyA!
bodyA = contact.bodyB!
}
// The two nodes that have collided
let node1 = bodyA.node
let node2 = bodyB.node
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)