gpt4 book ai didi

swift - 如果多次触摸,如何从父节点中删除节点?

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:45 24 4
gpt4 key购买 nike

我正在制作一款游戏,当按下按钮时,子弹会射向坏人。我做了一个函数,每当它被调用时它都会添加更多的坏人。

代码如下:(多次调用该方法)

 func BadGuyPosition()
let BadGuyCircle = SKSpriteNode(imageNamed: "CircleBadGuy")
BadGuyCircle.zPosition = 1
//var mininmum = self.size.width / 600
let TooMuch = self.size.height - 60

let PointToShow = UInt32(TooMuch)

BadGuyCircle.position = CGPointMake(CGRectGetMaxX(self.frame) + 20 , CGFloat(arc4random_uniform(PointToShow) ))

let action2 = SKAction.moveToX(-100, duration: 5.0)
let remove = SKAction.removeFromParent()

BadGuyCircle.runAction(SKAction.sequence([action2,remove]))

//Physics BadGuy
BadGuyCircle.physicsBody = SKPhysicsBody(rectangleOfSize: BadGuyCircle.size)
BadGuyCircle.physicsBody?.categoryBitMask = Numbering.Badguy
BadGuyCircle.physicsBody?.contactTestBitMask = Numbering.Laser
BadGuyCircle.physicsBody?.affectedByGravity = false
BadGuyCircle.physicsBody?.dynamic = true

self.addChild(BadGuyCircle)

我想要这样,如果 2 颗子弹与坏人接触,坏人就会从父级中移除。

我知道当一颗子弹与敌人接触时,它会从父级中移除。 (这里是代码)

func didBeginContact(contact: SKPhysicsContact) {
let A : SKPhysicsBody = contact.bodyA
let B : SKPhysicsBody = contact.bodyB

if (A.categoryBitMask == Numbering.Badguy) && (B.categoryBitMask == Numbering.Laser) || (A.categoryBitMask == Numbering.Laser) && (B.categoryBitMask == Numbering.Badguy)
{

runAction(BadGuyLostSound)
bulletsTouchedBadGuy(A.node as! SKSpriteNode, Laser: B.node as! SKSpriteNode)

}









}

func bulletsTouchedBadGuy(BadGuy: SKSpriteNode, Laser: SKSpriteNode){

Laser.removeFromParent()
BadGuy.removeFromParent()


}

任何人都可以告诉我我怎样才能使敌人从父级中移除需要不止一颗子弹。

最佳答案

删除冲突节点的最佳方法是使用方法 didFinishUpdate,如果您删除或启动从 didBeginContact 中删除节点的方法,您的游戏可能会崩溃搜索同时正在被删除的碰撞节点..

class BadGuy: SKSpriteNode {
var badGuyBulletCollisionsCounter: Int = 0
init() {
let texture = SKTexture(imageNamed: "CircleBadGuy")
super.init(texture: texture, color: nil, size: texture.size())
...
// fill this part with your BadGuy code
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

声明一个全局变量:

var nodesToRemove = [SKNode]()

didBeginContact 方法中:

func didBeginContact(contact: SKPhysicsContact) {
let A : SKPhysicsBody = contact.bodyA
let B : SKPhysicsBody = contact.bodyB
if (A.categoryBitMask == Numbering.Badguy) && (B.categoryBitMask == Numbering.Laser) || (A.categoryBitMask == Numbering.Laser) && (B.categoryBitMask == Numbering.Badguy)
{
badGuy = A.node as! BadGuy
badGuy.badGuyBulletCollisionsCounter += 1
runAction(BadGuyLostSound)
bulletsTouchedBadGuy(badGuy, Laser: B.node as! SKSpriteNode)
}
}

bulletsTouchedBadGuy 方法中:

func bulletsTouchedBadGuy(badGuy: BadGuy, laser: SKSpriteNode){
nodesToRemove.append(laser)
if badGuy.badGuyBulletCollisionsCounter == 2 {
nodesToRemove.append(badGuy)
}
}

最后:

override func didFinishUpdate() 
{
nodesToRemove.forEach(){$0.removeFromParent()}
nodesToRemove = [SKNode]()
}

关于swift - 如果多次触摸,如何从父节点中删除节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497346/

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