Справочная информация:
Я учитель информатики в средней школе, и я хотел придумать интересное / интересное задание, которое проверяет знания моих студентов в области программирования. У меня очень мало опыта программирования игр для iOS с помощью SpriteKit, но я подумал, что это будет интересным способом интеграции многих концепций учебных программ в конкурентную среду.
Игра:
Каждый ученик будет играть друг с другом в сражении один на один, где он должен программировать искусственный интеллект космического корабля, который может перемещать ракеты и стрелять в их врага. Каждый игрок начинает с 20 очков, и каждый раз, когда он попадает в ракету, их общее количество уменьшается на единицу, пока игрок не достигнет нуля и игра не закончится. Каждый игрок получает только 10 ракет, поэтому они должны использовать их с умом. Ракеты пополняются, если они выходят за границы обзора или поражают другого противника.
Проблема:
Я выполнял это задание несколько лет подряд с незначительными изменениями каждый год. Тем не менее, в этом году во время тестирования игра падает примерно до 9 кадров в секунду после начала игры. Очевидно, это отнимает большую часть удовольствия от игры и делает отладку болезненной из-за задержки.
Структура кода
Вершина
Есть только несколько SKLabelNodes, которые используются для отображения имени игрока и его рейтинга.
Космические корабли являются узлами, и каждый из них содержит массив из 10 ракет, которые также являются узлами. И космический корабль, и ракеты имеют свои собственные индивидуальные классы, которые определяют их свойства и поведение.
Также используется фоновое изображение.
Всего в GameScene добавлено всего 24 объекта, и это никогда не изменится.
Классы
- Initial View Controller (PlayerPickerViewController) - это позволяет пользователю выбирать, кто является Игроком 1 и Игроком 2. Затем он выбирает имя класса (ученика) для использования, а также изображение для своего космического корабля.
Существует структура, которая имеет статический объект для каждого космического корабля, так что они могут быть доступны в разных классах.
- Контроллер вида игры (GameViewController) - он берет GameScene и заставляет его отображаться внутри этого контроллера вида
- Game Scene (GameScene) - обрабатывает все начальные настройки для игры, включая создание переменных и добавление узлов в представление.
- Классы "Космический корабль" и "Ракета" - они обрабатывают методы и свойства, которые определяют поведение космического корабля и ракет (то есть движение, стрельбу, размер и т. Д.). Учащиеся не могут изменять этот код, чтобы они все работали в одинаковых игровых условиях.
- Классы учеников («их фамилия» .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-го поколения)?
Я ценю любую помощь, которую вы можете мне оказать, чтобы решить эту проблему с задержкой.
Спасибо.
Вот ссылка на игру, если вам интересно увидеть код и то, как классы взаимодействуют друг с другом. ИГРА
Это не самое последнее издание, но оно очень похоже на то, что сейчас используют студенты.