В настоящее время мой код порождает нового врага каждую секунду, поэтому на экране одновременно появляются несколько врагов. Я могу обнаружить столкновение, но я не могу понять, как определить, какой противник был поражен, чтобы я мог удалить его с экрана. В настоящее время, когда происходит столкновение, и я удаляю узел с экрана, последний враг икры отбрасывается, а не конкретный противник, который был поражен. Любые идеи о том, как обнаружить, кто породил врага, были поражены?Swift - Удаление определенного вражеского врага
ответ
Предполагаю, вы используете 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()
}
Я надеюсь, что это поможет вам!
Спасибо за помощь. Я смог понять это, используя логику, используемую в вашем примере. – Joe
Нагрузки способов достижения этого, один из самых простых - это иметь ваши вражеские спрайты, но, на мой взгляд, проще всего использовать contactDelegate
для вашей сцены physicsWorld
.
В didBeginContact(contact: SKPhysicsContact)
вы можете получить два встречных узла, обратившись к contact.bodyA.node
& contact.bodyB.node
. Тогда вашему врагуНод нужно только иметь функцию wasHit()
, которая выполняет действие removeFromParent
. (Реализовано либо подклассификация, либо расширение).
Теперь вам, вероятно, потребуется какая-то логика для сортировки различных типов, связанных с коллизией, но у вас есть варианты проверки как класса, так и categoryBitMasks
.
- 1. удаление врага и пули в столкновении java
- 2. 2d платформер вражеского движения
- 3. Создание врага Конус видения
- 4. Игра вражеского компьютера Логика AI
- 5. Нерест врага
- 6. Удаление определенного элемента массива
- 7. git удаление определенного фиксации
- 8. Удаление DIV определенного класса
- 9. удаление определенного значения массива
- 10. Удаление определенного правила iptables
- 11. Удаление определенного эффекта jquery
- 12. Удаление определенного элемента массива
- 13. Получить врага из массива врагов наивысшего здоровья с помощью LINQ
- 14. Убийство одного врага заставляет каждого врага исчезнуть - C# Unity
- 15. Получение вражеского транспортного средства, чтобы следить за автомобилем игрока C++
- 16. Оптимизация Генератор врага
- 17. Отбросить врага на триггере
- 18. Здоровье для каждого врага
- 19. Врага не двигается LibGDX
- 20. Здоровье для врага
- 21. Перемещение врага в 2D?
- 22. Удаленный игрок от врага
- 23. Игра против врага игрока
- 24. Два сбоя движения врага
- 25. Алгоритм индикатора противнего врага
- 26. Удаление PHAssetCollection (Swift)
- 27. SWIFT Удаление подсмотров
- 28. Удаление ячейки tableView SWIFT
- 29. Swift tableView.reloadRows удаление ячеек
- 30. Удаление вида в swift
Какой игровой движок вы используете? – Igor