Графика. как уже было сказано выше, содержится в папке
images.
Движек расчитан на то, чтоб один файл со спрайтом (так будем впредь
называть картинки) мог использоваться неограниченное количество
раз в пределах уровня, и при этом он будет загружена всего один раз.
Один и тот же спрайт может использоваться и на нескольких уровнях.
Для
соответствия блокам, спрайты должны иметь размер 16х16 пикселей (кроме
исключений, о котором поговорим ниже). Каждый спрайт может иметь маску.
Маска, это черно-белый спрайт. Грубо говоря, если наложить маску
поверх исходного слайда, то на экране отрисуются только те точки
исходного спрайта, где у маски белый цвет.
Вообще маску создавать
не обязательно, тогда исхожный спрайт будет показан весь. Но
рекомендуется их делать для изображений героя, а так же для спрайтов,
которые имеют форму не квадрата, полностью занимающего пространство
16х16. В таких случаях оставшееся "прозрачное" пространство нужно
закрашивать цветом фона, а если этот спрайт будет использован на разных
уровнях с разнами цветами фона, то все же понадобится маска.
Все
изображения должны иметь формат png. Если, например вы сохранили спрайт
под имени image.png и хотите добавить маску для него, сохраните ее под
названием image-mask.png и тогда маска автоматически подхватится
движком и будет использована везде.
Можно сделать и исключения в
размерах. Например, если вы хотите сделать облако, то необязательно его
разбивать на кусочки. Сделайте один спрайт нужного размера, но помните,
что для главного героя это будет лишь один блок, который находися в
одной ячейки, хотя на экране он будет занимать большее место.
Звуки в игреЗвуковой сопровождение делится на два типа:
- Звуковые эффекты формата znd, которые озвучивают некоторые действия
- Фоновая музыка в формате mod которая играет на протяжении всего уровня.
Музыку
в формате mod можно найти на бескрайних просторах интернета, либо
написать самому. Эффекты в формате znd можно получить сконвертировав их
из wav файлов при помощи утилиты wav2znd, написанная
watt"ом. Эта утилита работает прямо на смартфоне и скачать ее можно
отсюдаОписания уровнейНапомню, что уровни лежат в папке
levels, нумеруются с нуля целыми числами и имеют формат xml. Этот формат имеет много плюсов. Самый
главный это удобочитаемость. Просто заглянув в этот файл, который по
сути является текстом, уже можно судить о том что за что отвечает.
файл имеет разделы, каждый из которых я сейчас опишу:
- main - основные настройки уровня
- images - "регистрация" спрайтов для использования движком
- sounds - звуковая схема уровня
- hero - описание героя
- world - описания элементов игрового мира
- life_objects - описания движущихся объектов
И теперь подробнее:
Раздел imagesДля начала приведу пример раздела
<images>
<file="money">money</file>
<file="some_picture">kamen</file>
</images>
начинается он с тега
<images> и заканчивается закрывающим тегом
</images>, как это и должно делаться в xml
Для
того чтобы движек мог использовать спрайт, он должен быть загружен и
зарегестрирован под каким либо именем. В этом примере загружаются два
спрайта:
- Загружается спрайт money.png (и маска к нему, если существует money-mask.png. Имена файла нужно писать без расширения .png ) и регистрируется в движке под именем money
- Загружается спрайт some_picture.png и регистрируется под именем kamen
Теперь в любом месте можно использовать спрайты с именами kamen и money.
Раздел soundsРаздел может быть и пустым, вы можете удалять не нужные вам звуки.
На фон необходимо ставить музыку в формате mod а эффекты должны быть в формате znd.
Вот пример полного раздела sounds
<sounds>
<file="intro.mod">bg</file> # Если файл имеет разрешение
mod то он автоматически становится фоновой музыкой
<file="jump.znd">jump</file> # звук при прыжке
<file="shoot.znd">shoot</file> # звук при выстреле
<file="shoot.znd">fire</file> # звук при попадании
<file="money.znd">money</file> # звук при прибавлении у.е.
<file="killed.znd">killed</file> # звук при смерти героя
<file="killed.znd">finish</file> # звук при окончании уровня
</sounds>
Как
вы нареное уже заметили, в атрибуте file необходимо писать название
файла с расширением, а в содержании, заранее зарезервированные имена,
которые изменять нельзя. Как видите, один и тот же звук можно ставить
на разные события
Раздел heroОписание героя. Все поля обязательны для заполнения.
Сам
герой должен иметь 4 спрайта. 2-при движении влево, 2-при
движении вправо. При движении спрайты меняются, создавая
анимацию. Вы можете использовать хоть одно изображения на все 4
состояния, как хотите :)
вот полное содержание раздела с пояснениями:
<hero>
<left>image_name</left> # спрайт номер 1 при движении налево
<left1>image_name</left1> # спрайт номер 2 при движении налево
<right>image_name</right> # спрайт номер 1 при движении направо
<right1>image_name</right1> # спрайт номер 2 при движении направо
<weapon_left>image_name</weapon_left> # спрайт с изображением снаряда летящего влево
<weapon_right>image_name</weapon_right> # спрайт с изображеним снаряда леящего вправо
</hero>
Помните, что имена изображений (image_name) используемые здесь должны быть зарегестрированы в разделе images
Раздел mainВсе поля обязательны для заполнения:
<main>
<width>50</width> # ширина уровня в блоках
<bg>0x4caaff</bg> # цвет фона в hex
<start_x>0</start_x> # x координата места откуда появляется герой в начале
<start_y>3</start_y> # y координата места откуда появляется герой а начале
<weapon>10</weapon> # число зарядов оружия которое дается в начале уровня
<kill_danger>1</kill_danger> # 1 или 0, убиваются ли оружием опасные объекты
<panel_bg>0x4caaff</panel_bg> # цвет панели состояния сверху
<panel_txt_color>0xffffff</panel_txt_color> # цвет текста панели состояния
<panel_money_img>money</panel_money_img> # имя спрайта значка у.е. на пенели
<panel_weapon_img>bomba</panel_weapon_img>
# имя спрайта значка остатка зарядов на пенели
<panel_killed_img>mouseL</panel_killed_img>
# имя спрайта значка убитых врагов на пенели
<panel_lives_img>heroL</panel_lives_img>
# имя спрайта значка оставшихся жизней на пенели
<need_kill>1</need_kill> # количество убитых для выхода с уровня
<need_money>2</need_money> # количество у.е. для выхода с уровня
<menu_bg>0x8B6B6E</menu_bg> # цвет фона в меню
<menu_txt>0xffffff</menu_txt> # цвет текста в меню
<menu_select>0x484F74</menu_select> # цвет выбранного в меню
</main>
Раздел worldРаздел
содержит блоки данных, которые описывают игровой мир. В этом разделе
блоки разбиты на элементы, которые начинаются тегом <data> и
закрываются тегом </data>
Между ними распологаюся данные об этом элементе. Приведу пример:
<world>
<data>"type=box
image=money
x=3
y=3
money=1"
</data>
</world>
Здесь описан игровой мир который
состоит всего из одного элемента, который распологается по координатам
x=3 y=3 и имеет атрибут money.
Подробности:
type=box или
type=rectangle указывает на то что этот элемент либо еденичный (
box), либо прямоугольник из элементом (
rectangle)
x=3 указывает координату по горизонтали местоположения элемента
y=3 указывает координату по вертикали местоположения элементы
money=1 (danger=1, lom=1, exit=1) указывает на тип элемента, может и не содержать данный атрибут вообще, тогда мы получим простое "твердое тело"
Если указать
type=rectanglle, то нужно добавить еще два атрибута:
height=1 высота обьекта
width=10 ширина обьекта
При этом все элементы созданного прямоугольника будут иметь одинаковый атрибут свойства
Элементы <data> должны следовать друг за другом, не важно в какой последовательности.
<world>
<data>
...
</data>
<data>
..
</data>
..
</world>
И так, шаг за шагом мы создали игровой мир, пора его наполнить "живыми существами"
Раздел life_objectsЭтот раздел имеет такую же структуру как и раздел world, поэтому приведу пример описания одного "живого существа"
<life_objects>
<data>"img_left=mouseL # изображение элемента движущегося влево
img_right=mouseR #
изображение элемента движущегося вправо
type=danger # тип объекта.. об этом говорилось выше
x=3 # координата x
y=1 # координата y
len=2 # длинна движения влево вправо.
direction=-" # первоначальное направление + или -
</data>
</life_objects>
Все движущиеся обьекты двигаются бесконечно между 2 точками от x до x+len
ЗаключениеНадеюсь, я рассказал вам все, что поможет вам сделать игру на движке game4py.
Если что то остается непонятным, предлагаю посмотреть пример игры который идет в комплекте с game4py.
Если же, и там не найдете ответа, отвечу на ваши вопросы по почте soft@mobile-master.org с пометкой в теме письма "game4py".
В
крайнем случае, если вопрос не терпит отлагательств, воспользуйтесь
кнопкой "помощь по смс" на сайте либо, нажав меню в программе game4py и
следуйте инструкциям... В ответном смс придет номер моей аськи.
Удачного творчества, друзья!Размещение
данного текста целиком либо по частям на других интернет ресурсах а так
же в прочих изданиях, разрешается только при согласовании с автором.
©2008 Igor aka kAIST