2016-09-15 2 views
2

Я строю свою первую игру с Swift и SpriteKit, и у меня возникло много проблем с использованием ЦП и, следовательно, временем автономной работы. Я хотел знать, было ли обычной практикой выполнение определенных задач, таких как создание экземпляров плохих парней, в фоновом режиме; и если да, то как я это сделаю?Runnning SpriteKit обрабатывает фоновые потоки для улучшения использования ЦП

+0

Вы используете SKShapeNode? –

+0

Измените свой вопрос на то, что вызывает отставание, и разместите код. Люди смогут помочь вам понять, почему вы отстаете. В противном случае мы можем играть в игры до тех пор, пока не получится быстрое 4. – Knight0fDragon

ответ

5

Если это ваша первая игра, вы можете не захотеть сходить с ума несколькими потоками, если не знаете, что делаете. Имейте в виду, что манипулирование SKNode s должно выполняться в том же потоке, на котором выполняется SKView(Private) _update:. Это тот же самый поток, на котором запущены блоки runAction. Если вы этого не сделаете, вы потерпите крах. В игре SpriteKit, над которой я работал, я был многопоточным и не использовал SKAction или runAction для любого обновления. В конце концов я должен был добавить runAction для управления деревьями. Из-за этого я сейчас переписываю это в OpenGL.

Существуют определенные задачи, которые имеют смысл разгружать, например, загружать файлы или даже сетевые вызовы. Вы должны использовать GCD для этих типов вещей. Имейте в виду, что многопоточность не снижает время процессора, как вы себе представляете.

Коэффициенты вашего кода делают что-то плохое, что заставляет вас есть время процессора. Даже если вы многопоточно, вы получите тот же высокий процессор, но с проблемой более сложной отладки времени. Заметьте, я не говорю, что это невозможно.

Проведите время и выясните, почему ваше использование центрального процессора велико. На основе ваших других потоков вы не много делаете.

В качестве эксперимента возьмите этот пример космического корабля и запустите его на своем устройстве. Продолжайте добавлять корабли и посмотреть, что он делает с ЦП. Узнайте, сколько вы должны добавить до того, как CPU и FPS ухудшатся. Сравните это с вашей игрой, имея в виду, что пример космического корабля - просто простая демонстрация.

+0

Я на самом деле играл на этой демо на днях. К моему удивлению, я смог добавить около 200 кораблей без запаздывания и только ~ 20% использования процессора. Я знаю, что может показаться, что я был почти легкомыслен с вашими комментариями, но поверьте мне, я действительно их ценю и много работаю каждый день, чтобы понять, что я делаю не так, и на практике предлагаю советы. Пока мне удалось улучшить пару вещей в классе корабля, но общая тенденция к 100% -му процессору остается прежней. Похоже, что это связано с инстанцированием, чрезмерными вызовами в обновлении и некоторыми другими функциями корабля. – Sam

+0

Вы можете манипулировать SKNodes с основного потока, при условии, что они ничего не делают в основном потоке, в основном, если они не являются частью дерева сцен, – Knight0fDragon

+1

Да, я обобщил это, чтобы это было просто. Мне кажется, что легче забыть об этом, а затем попытаться проникнуть в «addChild» на то, что происходит в иерархии сцен. Я должен также указать, что это может не всегда терпеть крах. Авария произойдет, если произойдет, что время соответствует циклу рендеринга. –

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