首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >touchesBegan If语句问题

touchesBegan If语句问题
EN

Stack Overflow用户
提问于 2018-02-20 02:21:20
回答 1查看 41关注 0票数 1

我在试着检测节点是否是敌人。如果是的话,我想把它移除。我正在尝试使用触摸节点的名称来检测这一点。我能够检测到节点的名称是否是敌人,但我不知道如何删除它。谢谢你的帮助!)

以下是所有相关代码:

代码语言:javascript
复制
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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-20 02:34:55

代码的这一部分是有问题的:

代码语言:javascript
复制
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元素的名称;同样要删除它:

代码语言:javascript
复制
let nodes = self.nodes(at: location);
let name = nodes.first?.name;

if (name == "enemy") {
    nodes.first?.removeFromParent()
}

或者更好的分配(一轮移除多个敌人):

代码语言:javascript
复制
for node in self.nodes(at: location) {
    if node.name == "enemy" {
        node.removeFromParent()
    }
}

最后,上面的代码有一个更“滑动”的版本:

代码语言:javascript
复制
nodes.filter({ (node) -> Bool in
    return node.name == "enemy"
}).forEach({ (enemy) in
    enemy.removeFromParent()
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48876949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档