2015-09-01 3 views
0

В настоящее время мой код порождает нового врага каждую секунду, поэтому на экране одновременно появляются несколько врагов. Я могу обнаружить столкновение, но я не могу понять, как определить, какой противник был поражен, чтобы я мог удалить его с экрана. В настоящее время, когда происходит столкновение, и я удаляю узел с экрана, последний враг икры отбрасывается, а не конкретный противник, который был поражен. Любые идеи о том, как обнаружить, кто породил врага, были поражены?Swift - Удаление определенного вражеского врага

+1

Какой игровой движок вы используете? – Igor

ответ

1

Предполагаю, вы используете SpriteKit?

Когда вы создаете нового врага, вы должны дать ему имя. Для этого сделайте enemyChildNode.name = "enemy". Затем, когда обнаружено столкновение, используйте enumerateChildNodesWithName, чтобы проверить, какой узел столкнулся.

Это, как вы объявите этот метод:

func enumerateChildNodesWithName(_ name: String, 
        usingBlock block: ((SKNode!, 
             UnsafeMutablePointer<ObjCBool>) -> Void)!) 

Для получения дополнительной информации по этому вопросу идут here.

Таким образом, вы должны использовать его как это:

enumerateChildNodesWithName("enemy") { node, stop in 
     let enemy = node as! SKSpriteNode 
     //check if enemy is being hit 
     //if true: enemy.removeFromParent() 
    } 

Я надеюсь, что это поможет вам!

+0

Спасибо за помощь. Я смог понять это, используя логику, используемую в вашем примере. – Joe

1

Нагрузки способов достижения этого, один из самых простых - это иметь ваши вражеские спрайты, но, на мой взгляд, проще всего использовать contactDelegate для вашей сцены physicsWorld.

В didBeginContact(contact: SKPhysicsContact) вы можете получить два встречных узла, обратившись к contact.bodyA.node & contact.bodyB.node. Тогда вашему врагуНод нужно только иметь функцию wasHit(), которая выполняет действие removeFromParent. (Реализовано либо подклассификация, либо расширение).

Теперь вам, вероятно, потребуется какая-то логика для сортировки различных типов, связанных с коллизией, но у вас есть варианты проверки как класса, так и categoryBitMasks.

Смежные вопросы