Я строю свою первую игру с Swift и SpriteKit, и у меня возникло много проблем с использованием ЦП и, следовательно, временем автономной работы. Я хотел знать, было ли обычной практикой выполнение определенных задач, таких как создание экземпляров плохих парней, в фоновом режиме; и если да, то как я это сделаю?Runnning SpriteKit обрабатывает фоновые потоки для улучшения использования ЦП
ответ
Если это ваша первая игра, вы можете не захотеть сходить с ума несколькими потоками, если не знаете, что делаете. Имейте в виду, что манипулирование SKNode
s должно выполняться в том же потоке, на котором выполняется SKView(Private) _update:
. Это тот же самый поток, на котором запущены блоки runAction
. Если вы этого не сделаете, вы потерпите крах. В игре SpriteKit, над которой я работал, я был многопоточным и не использовал SKAction
или runAction
для любого обновления. В конце концов я должен был добавить runAction
для управления деревьями. Из-за этого я сейчас переписываю это в OpenGL.
Существуют определенные задачи, которые имеют смысл разгружать, например, загружать файлы или даже сетевые вызовы. Вы должны использовать GCD для этих типов вещей. Имейте в виду, что многопоточность не снижает время процессора, как вы себе представляете.
Коэффициенты вашего кода делают что-то плохое, что заставляет вас есть время процессора. Даже если вы многопоточно, вы получите тот же высокий процессор, но с проблемой более сложной отладки времени. Заметьте, я не говорю, что это невозможно.
Проведите время и выясните, почему ваше использование центрального процессора велико. На основе ваших других потоков вы не много делаете.
В качестве эксперимента возьмите этот пример космического корабля и запустите его на своем устройстве. Продолжайте добавлять корабли и посмотреть, что он делает с ЦП. Узнайте, сколько вы должны добавить до того, как CPU и FPS ухудшатся. Сравните это с вашей игрой, имея в виду, что пример космического корабля - просто простая демонстрация.
Я на самом деле играл на этой демо на днях. К моему удивлению, я смог добавить около 200 кораблей без запаздывания и только ~ 20% использования процессора. Я знаю, что может показаться, что я был почти легкомыслен с вашими комментариями, но поверьте мне, я действительно их ценю и много работаю каждый день, чтобы понять, что я делаю не так, и на практике предлагаю советы. Пока мне удалось улучшить пару вещей в классе корабля, но общая тенденция к 100% -му процессору остается прежней. Похоже, что это связано с инстанцированием, чрезмерными вызовами в обновлении и некоторыми другими функциями корабля. – Sam
Вы можете манипулировать SKNodes с основного потока, при условии, что они ничего не делают в основном потоке, в основном, если они не являются частью дерева сцен, – Knight0fDragon
Да, я обобщил это, чтобы это было просто. Мне кажется, что легче забыть об этом, а затем попытаться проникнуть в «addChild» на то, что происходит в иерархии сцен. Я должен также указать, что это может не всегда терпеть крах. Авария произойдет, если произойдет, что время соответствует циклу рендеринга. –
- 1. iOS: Фоновые потоки/многопоточность?
- 2. Does Application.Exit() убивает фоновые потоки?
- 3. Фоновые потоки в delphi
- 4. фоновые потоки в JQuery,
- 5. Фоновые потоки в WCF
- 6. Java EE и фоновые потоки
- 7. Расчет использования ЦП
- 8. Понимание «верхнего» использования ЦП
- 9. Оптимальные пороги использования ЦП
- 10. Увеличение использования ЦП
- 11. Определение использования ЦП
- 12. Очень высокое использование ЦП в SpriteKit
- 13. Высокое использование ЦП в игре SpriteKit
- 14. Инструменты использования ЦП Linux
- 15. Значение полезного использования ЦП
- 16. Android CursorAdapters, ListViews и фоновые потоки
- 17. Что касается использования ЦП
- 18. Ошибка использования ЦП
- 19. App Engine - фоновые потоки не работают
- 20. GetOpenFileName() убивает мои фоновые открытые потоки :(
- 21. Фоновые потоки, не начинающиеся до выключения сервера
- 22. iOS быстрые фоновые потоки, блокирующие основную нить
- 23. Как остановить фоновые потоки приложения в WebSphere
- 24. Хорошо использовать таблицы для улучшения использования процессора?
- 25. Использование градиентов/узоров для улучшения удобства использования?
- 26. Класс рефакторинга для улучшения повторного использования
- 27. Должен/как я могу использовать потоки для улучшения скрипта python?
- 28. Весенний загрузочный привод для использования ЦП
- 29. Непрерывно отслеживать поток для использования ЦП
- 30. Ограничение использования ЦП для Runtime.getRuntime(). Exec
Вы используете SKShapeNode? –
Измените свой вопрос на то, что вызывает отставание, и разместите код. Люди смогут помочь вам понять, почему вы отстаете. В противном случае мы можем играть в игры до тех пор, пока не получится быстрое 4. – Knight0fDragon