Игра Spritekit испытывает значительное отставание на симуляторе iPad - PullRequest
0 голосов
/ 24 марта 2019

Справочная информация: Я учитель информатики в средней школе, и я хотел придумать интересное / интересное задание, которое проверяет знания моих студентов в области программирования. У меня очень мало опыта программирования игр для iOS с помощью SpriteKit, но я подумал, что это будет интересным способом интеграции многих концепций учебных программ в конкурентную среду.

Игра: Каждый ученик будет играть друг с другом в сражении один на один, где он должен программировать искусственный интеллект космического корабля, который может перемещать ракеты и стрелять в их врага. Каждый игрок начинает с 20 очков, и каждый раз, когда он попадает в ракету, их общее количество уменьшается на единицу, пока игрок не достигнет нуля и игра не закончится. Каждый игрок получает только 10 ракет, поэтому они должны использовать их с умом. Ракеты пополняются, если они выходят за границы обзора или поражают другого противника.

Проблема: Я выполнял это задание несколько лет подряд с незначительными изменениями каждый год. Тем не менее, в этом году во время тестирования игра падает примерно до 9 кадров в секунду после начала игры. Очевидно, это отнимает большую часть удовольствия от игры и делает отладку болезненной из-за задержки.

Структура кода

Вершина Есть только несколько SKLabelNodes, которые используются для отображения имени игрока и его рейтинга. Космические корабли являются узлами, и каждый из них содержит массив из 10 ракет, которые также являются узлами. И космический корабль, и ракеты имеют свои собственные индивидуальные классы, которые определяют их свойства и поведение. Также используется фоновое изображение. Всего в GameScene добавлено всего 24 объекта, и это никогда не изменится.

Классы

  1. Initial View Controller (PlayerPickerViewController) - это позволяет пользователю выбирать, кто является Игроком 1 и Игроком 2. Затем он выбирает имя класса (ученика) для использования, а также изображение для своего космического корабля. Существует структура, которая имеет статический объект для каждого космического корабля, так что они могут быть доступны в разных классах.
  2. Контроллер вида игры (GameViewController) - он берет GameScene и заставляет его отображаться внутри этого контроллера вида
  3. Game Scene (GameScene) - обрабатывает все начальные настройки для игры, включая создание переменных и добавление узлов в представление.
  4. Классы "Космический корабль" и "Ракета" - они обрабатывают методы и свойства, которые определяют поведение космического корабля и ракет (то есть движение, стрельбу, размер и т. Д.). Учащиеся не могут изменять этот код, чтобы они все работали в одинаковых игровых условиях.
  5. Классы учеников («их фамилия» .swift) Внутри этого класса есть две функции, которые должны программировать ученики (одна для player1 и одна для player2). Здесь студенты определяют стратегию перемещения и стрельбы. Каждый кадр, соответствующая функция вызывается для перемещения игрока. Когда игроки выбираются в PlayerPickerViewController, игра понимает, какой из классов учеников должен называться в каждом кадре (основываясь на их имени и названии класса, которые названы одинаково).

Когда я собираю и тестирую игру на своем персональном MacBook Pro, игра запускается так, как ожидается (без задержки). Тем не менее, каждый студент работает на Mac со следующими характеристиками:

  • iMac (21,5 дюйма, конец 2013 г.)
  • Процессор 2,9 ГГц Intel Core i5
  • Память 8 ГБ, 1600 МГц, DDR3
  • Графика NVIDIA GeForce GT 750M 1024 МБ

Мне кажется, что, хотя компьютеры стареют, они все равно должны быть в состоянии справиться с этой упрощенной игрой, в которой всего 20+ узлов.

Изменится ли симулятор (например, iPad Pro с 12,9-дюймовым 3-м поколением и iPad 6-го поколения)?

Я ценю любую помощь, которую вы можете мне оказать, чтобы решить эту проблему с задержкой. Спасибо.

Вот ссылка на игру, если вам интересно увидеть код и то, как классы взаимодействуют друг с другом. ИГРА Это не самое последнее издание, но оно очень похоже на то, что сейчас используют студенты.

1 Ответ

1 голос
/ 25 марта 2019

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

Профилируйте свою игру с помощью инструментов на одном из iMac.Это позволило бы вам увидеть, что является причиной низкой частоты кадров.

Выберите «Продукт»> «Профиль в XCode», чтобы профилировать ваш проект в «Инструментах».Выберите инструмент Time Profiler из списка шаблонов.В следующей статье показано, как использовать инструмент Time Profiler:

Поиск медленных точек в вашем коде с помощью инструмента Time Profiler

Поскольку ваши студенты должны тестировать игруна их Mac альтернатива - сделать версию игры для Mac.Игра будет лучше работать на Mac, чем на iOS Simulator.Код SpriteKit одинаков как для Mac, так и для iOS.Основное отличие заключается в обработке событий мыши на Mac вместо сенсорных событий на iOS.Xcode имеет кроссплатформенный шаблон игрового проекта, который позволяет создавать игры, которые работают как на Mac, так и на iOS.

...