Мое приложение (Swift 2) не удаляет какие-либо узлы, когда они отваливаются от сцены. В конечном итоге они занимают место и сокращают частоту кадров. Мой код можно найти по адресу https://github.com/Ph0enix0/Loominarty-Confirmed/blob/master/Loominarty%20Confirmed/GameScene.swift Спасибо!SKSpriteNode не удаляет, когда падает с сцены
ответ
Для вашей ситуации, исходя из того, как вы перемещаете пулю, самым простым решением будет использование последовательности действий. Как это:
func SpawnBullets(){
var bullet = SKSpriteNode(color: SKColor.orangeColor(), size: CGSize(width: 10, height: 20))
bullet.zPosition = -5
bullet.position = CGPointMake(player.position.x, player.position.y)
let action = SKAction.moveToY(self.size.height + 30.0, duration: 0.6)
let remove = SKAction.runBlock({bullet.removeFromParent(); println("Bullet removed from scene")})
let sequence = SKAction.sequence([action,remove])
bullet.runAction(sequence)
bullet.physicsBody = SKPhysicsBody(rectangleOfSize: bullet.size)
bullet.physicsBody?.categoryBitMask = physCat.bullet
bullet.physicsBody?.contactTestBitMask = physCat.enemy
bullet.physicsBody?.affectedByGravity = false
bullet.physicsBody?.dynamic = false
self.addChild(bullet)
}
Вы, наверное, знаете об этом, но не мешало бы отметить, что удаление вне экрана узлов является хорошей привычкой, потому что каждый узел добавляется в дерево узлов остается там и потребляет ресурсы до тех пор, пока не будет удалена.
я бы удалил 'bullet.runAction (SKAction.repeatActionForever (action))', или вы забыли добавить эту строку? –
Удаление вышеупомянутой линии помешало бы врагам размножаться. Спасибо! –
На самом деле вам не требуется repeatActionForever. Просто скопируйте и вставьте мой код. В основном вы создаете действие для перемещения маркера из точки A в точку B. Не нужно повторять это навсегда. Также подумайте, не использовать NSTimer для повторения нереста ... Вы должны делать все это с помощью действий. NSTimer не учитывает приостановленное состояние сцены, узла или представления. – Whirlwind
- 1. Обнаружение, когда пользователь удаляет SKSpriteNode
- 2. SKSpritenode, взаимодействующий с физическим телом сцены
- 3. Редактор сцены Xcode7 SKSpriteNode пользовательский класс
- 4. 2d элементы наложения не отображаются поверх сцены сцены сцены
- 5. Как управлять движением персонажа сцены с помощью SkSpriteNode
- 6. получить USERDATA из SKSpriteNode с помощью редактора сцены
- 7. Сделать перемещение символа SKSpriteNode с платформой SKSpriteNode
- 8. Всплывающая подсказка JavaFX 8 удаляет прозрачность сцены
- 9. Создатель сцены удаляет импорт в файле fxml
- 10. Что я делаю неправильно, когда переключаю сцены?
- 11. Nodejs падает, когда соединение с базой не
- 12. SKSpriteNode подпрыгивает, когда он не должен
- 13. Как остановить звук SKSpriteNode после его удаления из сцены (Swift)?
- 14. Ограничение перемещения объекта SKSpriteNode в фиксированную область внутри сцены
- 15. Corona Storyboard не удаляет элемент из предыдущей сцены
- 16. Сделать снимок SKSpriteNode, когда экран не прослушивается
- 17. На SKSpriteNode не должен влиять другой SKSpriteNode
- 18. SKSpriteNode UserInteractionEnabled Не работает
- 19. Когда этот код падает?
- 20. SKSpriteNode с цветом не показывает
- 21. Swift: обнаружить, когда SKSpriteNode даже коснулся
- 22. Swift - отсутствует SKSpriteNode с места по умолчанию
- 23. SKSpriteNode не вынимая
- 24. Как сделать SKSpriteNode не падать (Swift)
- 25. Изображение SKSpriteNode не отображается
- 26. SceneKit падает до 30FPS, когда не перемещается
- 27. Camel Consumer не восстанавливается, когда ActiveMQ падает
- 28. Позиционирование Проблема SKSpriteNode с iAd
- 29. Колонка не центр, когда он падает самозагрузки
- 30. C++ SDL Player не падает, когда прыжки
Код, который вы связали, ничего не делает, кроме вращающихся спрайтов, означает, что они никогда не покидают экран. В любом случае, если вы хотите удалить узел из родителя после его выхода из экрана, вы можете сделать это несколькими способами: 1) использовать метод intersectsNode(), 2) использовать последовательность действий (и удалить узел после определенного события), 3) использовать физика граничит вокруг сцены и обнаруживает контакты, которые укажут, что узел находится вне экрана. Вы можете начать здесь: http://stackoverflow.com/q/30551951/3402095 – Whirlwind
Дерьмо, извините. Я использовал неправильный файл. Загрузка файлов проекта. Проклятый github для mac взял мировую программу hello по умолчанию на xcode. –
Исправлено! Я забыл нажать кнопку синхронизации на github для mac. Хорошая работа, я. –