|
Май
17
|
Это первая из серии статей о пошаговом создании игр для iPhone. Не для кого не секрет, что освоение OpenGL и Quartz требует солидной подготовки. В этом уроке мы упростим процесс разработки, не прибегая к данным технологиям. Для графики воспользуемся классом UIImageView.
В двух частях я расскажу абсолютно обо всех аспектах разработки игры для iPhone. Приложение будет включать графику, звуки, механизм и даже простейший компьютерный интеллект.
Игра, которой мы займемся, называется iTennis (по правилам и механизму это аналог Pong). Я выбрал ее в качестве первого варианта, поскольку iTennis не требует особой анимации. Вот это как будет выглядеть на практике:
Приступаем… Все необходимые для проекта изображения находятся [здесь].
Откройте XCode и создайте приложение на основе представления с именем “iTennis“
Распаковав архив с изображениями, перетащите их все в относящуюся к проекту папку “Resources“. После этого она должна выглядеть так:
Мы готовы приступать к программированию. Для начала установим связи IBOutlet, чтобы взаимодействовать с изображениями через код. Еще одна задача — добавить к игре ряд переменных, которые понадобятся позже. Откройте “iTennisViewController.h” и внесите следующий код:
Как видим, спецификаторов IBOutlet у нас порядочно. Это объясняется количеством объектов, с которыми необходимо взаимодействовать. Переменными “ballVelocity” и “gameState” пока можно пренебречь. Итак, мы готовы к созданию интерфейса. Дважды щелкнув на файле “iTennishViewController.xib“, откроем его в редакторе Interface Builder. На видео ниже я настраиваю интерфейс.
Видео. Создание интерфейса. Нажмите на ссылку чтобы проиграть. (13 мб)
Установив связи, закройте редактор IB и вернитесь в XCode. Теперь нужно настроить несколько постоянных величин. В принципе, можно их жестко запрограммировать, но в качестве констант значения проще редактировать, отлаживая механизм игры. Откройте файл “iTennisViewController.m” и добавьте следующий код:
Остановлюсь подробнее на задаче констант. Две первые — состояния игры. С их помощью мы определяем, что отображается на экране — пауза, запущенная игра, название. Позже мы добавим к игре еще несколько состояний. Две следующие переменные — значения скорости полета мяча. Поскольку игра двухмерная, вектор скорости может складываться из значений X и Y. Следующая строка синтезирует переменные, с помощью которых мы автоматически создадим методы “getter” и “setter“. Теперь прописываем метод “viewDidLoad“. Добавьте следующий код:
Для начала установим состояние игры на паузу — ведь она не запускается сразу же после загрузки интерфейса. Теперь создаем вектор скорости мяча. Откорректируйте заданные ранее константы, увеличив или уменьшив его скорость. Следующим шагом приступаем к созданию экземпляра класса “NSTimer“. Первый параметр — “timestep“. Временной шаг мы установили равным 0,05 с — редактирование данного значения будет менять скорость всей игры. Настраиваем параметр “target”, сообщающий таймеру о расположении функции обратного вызова “callback“. Теперь переходим непосредственно к ней. Предлагаем таймеру вызывать “self.gameLoop” каждые 0,05 с. Опция “userInfo” нас не интересует. Последний параметр сообщает таймеру о необходимости повтора.
Задав начальные значения, создадим цикл игры. Добавьте приведенный ниже метод:
Для начала проверим, находится ли игра в запущенном состоянии (на паузе движение мяча нам ни к чему). Если игра не запущена, выводится заданная ранее метка “tapToBegin“, предлагающая пользователю нажать на экран для запуска игры.
Если игра запущена, начинаем перемещать мяч в соответствии с вектором скорости. Следующие несколько строк отвечают за проверку отскока. Если мяч попал в область экрана, значит, его вектор его движения нужно обратить, имитируя “отскок”. Без этого кода мяч просто улетит за пределы экрана.
Последним фрагментом пропишем метод “touchesBegan“. С его помощью мы будет запускать игру из состояния паузы. Добавьте следующий код:
Сначала этот код проверяет, находится ли игра в состоянии паузы. В случае подтверждения метка “tapToBegin” скрывается — игра переходит в рабочее состояние. Позже мы напишем код, который в данной функции будет контролировать ручное управление пользователя игрой.
Будучи сознательными разработчиками приложений для iPhone, очистим все выделенные ранее ресурсы, добавив к методу “dealloc” следующий код:
На этом первую часть урока по созданию игры можно считать завершенной. Исходный код можно загрузить отсюда. Не забываем комментировать.











Май 25th, 2009 at 11:39
Хорошо написано. А это все на основе личного опыта?
Сентябрь 4th, 2011 at 11:18
Все работает, проверенно на xCode 4.1
Ноябрь 1st, 2011 at 11:45
Я когда пытаюсь синтезировать рисунки XCode ругается, говорит “Type of property ‘ball’ (UIImageView) does not match type of ivar ‘ball’ (UIImage *_strong)”
интересно что не так я сделал?