gpt4 book ai didi

ios - removeFromParent() 在 SpriteKit 中不起作用

转载 作者:行者123 更新时间:2023-11-29 01:53:27 26 4
gpt4 key购买 nike

我的 SpriteKit 游戏中有一个随机生成对象副本的循环,我想使用 removeFromParent() 来删除接触到的对象。但是,当我将它添加到代码中时,该对象并没有被删除。这是生成我的对象的循环代码:

for i = 0; i<1000; ++i {
var randomNumber = CGFloat(arc4random_uniform(3000)) * 200
bubbleDuplicate.position = (CGPointMake(randomNumber, 400))
bubbleDuplicate = bubble.copy() as! SKSpriteNode
bubbleDuplicate.physicsBody?.categoryBitMask = bubbleCategory
bubbleDuplicate.physicsBody?.collisionBitMask = 0
bubbleDuplicate.physicsBody?.contactTestBitMask = 0

addChild(bubbleDuplicate)

func BubbleContact(){
bubbleDuplicate.removeFromParent()
bubble.removeFromParent()
bubbleDuplicate.setScale(0)
bubble.setScale(0)

}

}

这是我的碰撞代码,应该移除我的对象:

func didBeginContact(contact: SKPhysicsContact) {
let collision:UInt32 = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask)

if collision == (playerCategory | crateCategory) {

gameOver()
}
if collision == (playerCategory | bubbleCategory) {
NSLog("Bubble Contact")
bubbleDuplicate.removeAllActions()
bubbleDuplicate.removeFromParent()
bubble.removeAllActions()
bubble.removeFromParent()
bubbleDuplicate.setScale(0)
bubble.setScale(0)
bubbleDuplicate.alpha = 0
bubble.removeFromParent()
bubbleDuplicate.removeFromParent()

}


}

如何修复我的代码?

编辑:感谢@NikitaLeonov 的回答,我的泡泡 Sprite 现在可以正常工作了。但是,我正在尝试将相同的功能应用于另一个 Sprite 节点,并且简单地复制他的代码不会产生相同的效果。我该怎么办?这是新代码:

if (contact.bodyA.categoryBitMask == bubbleCategory) {
let node = contact.bodyB.node
//Other remove routine
NSLog("Bubble Contact")
node?.removeAllActions()
node?.removeFromParent()
} else if (contact.bodyB.categoryBitMask == bubbleCategory) {
let node = contact.bodyB.node
//Other remove routine
NSLog("Bubble Contact")
node?.removeAllActions()
node?.removeFromParent()
}else if (contact.bodyA.categoryBitMask == wormCategory) {
let node = contact.bodyB.node
//Other remove routine
NSLog("Worm Contact")
node?.removeAllActions()
node?.removeFromParent()
}else if (contact.bodyB.categoryBitMask == wormCategory) {
let node = contact.bodyB.node
//Other remove routine
NSLog("Worm Contact")
node?.removeAllActions()
node?.removeFromParent()
}

最佳答案

您使用 bubbleDuplicate 和 bubble 作为全局变量并对它们调用 removeFromParent,因此只会删除最后生成的 bubble 和 bubbleDuplicate。如您所见,这不是正确的方法。您应该在联系方法中获取需要从 contact.bodyA 和 contact.bodyB 变量中删除的节点。

func didBeginContact(contact: SKPhysicsContact) {
let collision:UInt32 = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask)

if collision == (playerCategory | crateCategory) {
gameOver()
}

if (contact.bodyA.categoryBitMask == bubbleCategory) {
let node = contact.bodyA.node
//Other remove routine
node.removeAllActions()
node.removeFromParent()
} else if (contact.bodyB.categoryBitMask == bubbleCategory) {
let node = contact.bodyB.node
//Other remove routine
node.removeAllActions()
node.removeFromParent()
}
}

此外,如果 bubble 和 bubbleDouble 以某种方式相关,我会尝试设置一个带有子节点的系统,但不会在联系方法中单独管理它们。此外,我还建议将其删除作为简化一切管理的行动。因此,除了与代码重复的明显斗争之外,还有很多机会如何改进此代码。

ps 看起来我在 SO 上为这款游戏做出了很多贡献 :) 当它发布时你应该给我一个促销代码 :D

关于ios - removeFromParent() 在 SpriteKit 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com