我在试着检测节点是否是敌人。如果是的话,我想把它移除。我正在尝试使用触摸节点的名称来检测这一点。我能够检测到节点的名称是否是敌人,但我不知道如何删除它。谢谢你的帮助!)
以下是所有相关代码:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first!
let location = touch.location(in: self)
let nodes = self.nodes(at: location);
let name = nodes.first?.name;
if (name == "enemy") {
nodes.removeFromParent() // this doesn't work
}
}
@objc open func spawnEnemies() {
let randomNumber = randomBetween(min: Int(-150), max: Int(self.frame.width + 150))
print(randomNumber)
print(self.frame.width)
var enemy = SKSpriteNode(imageNamed: "triangle")
enemy.position = CGPoint(x: CGFloat(randomNumber), y: self.frame.height + 250)
enemy.name = "enemy";
enemy.zPosition = 6.0;
enemy.physicsBody?.allowsRotation = false
enemy.zRotation = 0
enemy.physicsBody?.affectedByGravity = false
enemy.physicsBody = SKPhysicsBody(texture: enemy.texture!, size: enemy.texture!.size())
enemy.physicsBody?.affectedByGravity = false
enemy.physicsBody?.isDynamic = true
enemy.physicsBody?.categoryBitMask = enemyCategory
enemy.physicsBody?.collisionBitMask = blockerCategory
enemy.physicsBody?.contactTestBitMask = blockerCategory
enemy.setScale(CGFloat(0.03))
addChild(enemy)
}发布于 2018-02-20 02:34:55
代码的这一部分是有问题的:
let nodes = self.nodes(at: location);
let name = nodes.first?.name;
if (name == "enemy") {
nodes.removeFromParent() // this doesn't work
}变量nodes是一个SKNode实例的数组;对整个数组调用SKNode方法removeFromParent() (仅对其单个元素)是没有任何意义的。
您已经成功地测试了.first元素的名称;同样要删除它:
let nodes = self.nodes(at: location);
let name = nodes.first?.name;
if (name == "enemy") {
nodes.first?.removeFromParent()
}或者更好的分配(一轮移除多个敌人):
for node in self.nodes(at: location) {
if node.name == "enemy" {
node.removeFromParent()
}
}最后,上面的代码有一个更“滑动”的版本:
nodes.filter({ (node) -> Bool in
return node.name == "enemy"
}).forEach({ (enemy) in
enemy.removeFromParent()
})https://stackoverflow.com/questions/48876949
复制相似问题