2017-12-31 186 views
8

Tôi đang cố gắng phát triển một trò chơi cơ bản và tôi có một cảnh với một số nút con được thêm vào nút gốc. Mỗi nút có một trong hai tên, hoặc là friend hoặc enemy.Làm thế nào để có được tất cả các nút con với tên trong Swift với Scene Kit

Nếu người dùng chạm vào một trong các nút enemy Tôi muốn xóa tất cả các nút con có tên enemy.

Tôi đã thử một vài thứ, nhưng dường như không thể làm được gì.

Trong chức năng touchesBegan tôi:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touch = touches.first! 
    let location = touch.location(in: gameView) 
    let hitList = gameView.hitTest(location, options: nil) 

    if let hitObject = hitList.first { 
     let node = hitObject.node 

     //This doesn't work 
     gameScene.rootNode.childNodes(passingTest: { (node, UnsafeMutablePointer<ObjCBool>) -> Bool in 
     node.removeFromParentNode() 
    } 
} 

Tôi cũng đã cố gắng sử dụng gameScene.rootNode.enumerateChildNodes(withName:) nhưng tôi không thể nhận được rằng làm việc một trong hai.

Những gì tôi có thể được làm việc là nếu tôi làm điều gì đó như thế này trong đó thay vì:

if node.name == "enemy" { 
    node.removeFromParentNode() 
} 

Tuy nhiên điều này sẽ chỉ loại bỏ các nút duy nhất bị bắn trúng, không phải tất cả trong số họ. Làm thế nào tôi có thể nhận được tất cả các nút con với một tên nào đó trong Swift với Scene Kit?

+0

enumerateChildNodes (withName: "kẻ thù", sử dụng: {nút, _ trong }) –

+0

@ElTomato này mang lại cho tôi một lỗi 'Đối số bổ sung 'bằng cách sử dụng' trong cuộc gọi ' – maxshuty

+0

' enumerateChildNodes (withName:) 'nên hoạt động, đây là một ví dụ: https://stackoverflow.com/a/26748966/1187415 –

Trả lời

3

Lọc ra các nút với phù hợp với tên và loại bỏ chúng khỏi nút cha:

gameScene.rootNode.childNodes.filter({ $0.name == "Enemy" }).forEach({ $0.removeFromParentNode() }) 
Các vấn đề liên quan