вторник, 12 мая 2009 г.

Формат карты

Мы будем хранить наши карты в особом формате во Flash - Массивы (Arrays).

Двумерные массивы


Нам нужны двумерные массивы для карты. Нет, это не что отличное от обычных массивом, это просто массив с другим вложенным массивом, как элементом. Смущены? Давайте посмотрим.

Обычный массив:

var myArray:Array = ["a", "b", "c", "d"];

Это было просто! Чтобы получить значение элемента:

trace(myArray[0], “ - “, myArray[0]); // a – b и так далее.

Теперь часть посложнее! Что если мы положим “a”, “b” и “c” в массив, а затем этот массив положим в другой массив. Так:

var a:Array = ["a1", "a2", "a3"];

var b:Array = ["b1", "b2", "b3"];

var c:Array = ["c1", "c2", "c3"];

var myArray:Array = [a, b, c];

И так мы объявили массив myArray и каждый элемент этого массива является тоже массивом. Значение первого элемента массива myArray[0] есть массив ["a1", "a2", "a3"], значение следующего ["b1", "b2", "b3"].

Если Вы пишете:

var myVar1:Array = myArray[2];

trace(myVar1); // c1,c2,c3

Не будем здесь останавливаться, если вы напишете :

var myVar2:Array = myArray[2][0];

trace(myVar2); // c1

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

Попрактикуемся!

var myVar3:Array = myArray[0][1];

trace(myVar3); // а2

var myVar4:Array = myArray[1][0];

trace(myVar4); // b1

Думаю картина прояснилась! Не забывайте, что нумерация элементов в массиве начинается с нулевой позиции.


Делаем Карту

Первым делом, мы создаём массив, который будет содержат информацию о каждой плитке:

var myMap:Array = [

[1, 1, 1, 1, 1, 1, 1, 1],

[1, 0, 0, 0, 0, 0, 0, 1],

[1, 0, 1, 0, 0, 0, 0, 1],

[1, 0, 0, 0, 0, 1, 0, 1],

[1, 0, 0, 0, 0, 0, 0, 1],

[1, 1, 1, 1, 1, 1, 1, 1]

];

Как видите наша карта содержится 6 рядов на 8 столбцов. Если наш герой начнёт с верхнего левого угла, ему придётся пройти 8 шагов на право и 6 шагов вниз, прежде чем он выпадет с карты и окажется в неизвестном мире.

И так важный вопрос – «Что значат эти цифры в массиве карты?». Мы будем использовать ООП (нет, не пугайтесь этого слова, оно не так страшно как звучит). Мы создадим сперва несколько различных плиток и будем использовать их как шаблон для создания всей карты.

Для примера, если у нас цифра 1, тогда мы создаём плитку из шаблона Tile1. Затем, в игре, когда мы достигнем эту плитку, мы будем проверять свойства этих объектов. (Они могут иметь множество свойств, но в основном нас будут интересовать два: walkable («ходильная») и frame(кадр).

Walkable – это свойство показывает, может ли персонаж пройти по этой плитке (в случае

walkable=true) или нет (walkable=false). Не стоит использовать hitTest по двум причинам – очень медленный и его не используют в плиточных играх.

Frame – это свойство, которое говорим нам, какой именно кадр плитки нам нужно отобразить в данной позиции. Когда мы создаём каждую плитку, то все они стартуют с начального кадра 1. Об этом мы ещё поговорим подробнее.

И так создаём плитку, код в первом кадре:

var tile1:BasedTile = new BasedTile ();

tile1. walkable=false;

tile1. frame=2;


Класс BasedTile:

package

{

import flash.display.Sprite;

public class BasedTile extends Sprite

{

public var walkable:Boolean = false;

public var frame:uint = 1;

public function BasedTile()

{

}

}

}

среда, 18 марта 2009 г.

Почему плитки?

Прежде чем мы нырнём в код игр, давайте поговорим немного о «плиточных» играх. Почему надо исползать «плитки»? Легче ли делать игры основанные на «плитка» или может быть они более сложные чем игры основанные на рисунках (графики)? Хорош ли Flash для плиточных игр?

Плитки использовались давным-давно для создания игр. Было время, когда компьютер не имел скоростные гигагерцы и сотни мегабайт оперативной памяти. Медленная скорость и ограниченная оперативная память обязывала девелоперов использовать мозги и умные решения, дабы игра выглядело хорошо, и работала быстро.

И так, Вы хотите использовать красивый задний фон в Вашей игре, но картинка будет слишком большой и это сделает игру медленной. Что же делать? Разрезать картинку на части (плитки)!

На картинке Вы можете видеть, что части картинки одинаковые. 1 тоже самое что 2, 3 тоже самое что 4 и 5-7 одинаковые. Если ты режешь картинку и повторно используешь одни и теже части в разных областях – ты создал «плитку». Большая картинка гораздо больше по размеру файла, чем размер «плиток».

Ещё одна очень приятная особенность «плиток» - если нужно будет изменить часть фона, то Вам не нужно будет перерисовывать всё, Вы можете изменить 1 «плитку». Вы можете использовать заново плитки с другими объектами. К примеру, у Вас есть плитка с изображением травы, но Вам не обходимо плитка с изображением цветка на траве, всего лишь нужно взять изображение травы из плитки и дорисовать цветок!


Flash и плитки

Как Вы знаете, Flash основан на векторе, Flash файлы имеют маленький размер и Вы можете изменять размеры экрана. Обязательно ли нужно использовать плитку в играх? Ну, Вы можете с лёгкостью сделать игру основанную на графическом изображении, но когда Ваша игровая область станет больше и Вам понадобится больше деталей (фич), Вы рискуете получить проблему. Некоторые вещи так просто сделать в играх основанных на плитке (изометрия, нахождение путей, глубина и другие). Не забывайте, плиточные игры существуют давно и большое количество концепций и теорий подходят для использования во Flash.

Грустная часть о плиточных играв во Flash – мы не будем возможности рисования или временную шкалу, наша игра будет сделанная на AS3 и в основном мы будем писать кучу кода, двигать и изменять изображения прямо на рабочей области.

Хорошая идея использовать битмап изображения как содержимое плиток. Да, мы можем нарисовать всё что угодно во Flash и иметь изображение в векторе, но когда мы запустим игру, Flash Player-у придётся рассчитывать вектор на экране в каждом кадре, а мы не хотим ничего, чтобы замедляло нашу игру. Битма - они пре-рендеренные (уже готовые) и выглядят обычно гораздо лучше. Обычно, лучше всего сохранить картинку в формате GIF/PNG с прозрачным фоном (для объектов).

Достаточно скучных разговоров, давайте что-нибудь делать! :)

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


Добро пожаловать!

Добро пожаловать! 

Здесь вы сможете прочесть небольшой справочник по созданию «плиточных» игры в среде Adobe Flash.

В основном, данный мануал основан на OutsideOfSociety от Klas Kroon. Советую посмотреть в любом случае, это один из лучших справочников, который вы сможете найти.

Данный мануал подразумевает наличие среднего знания AS3. Будет немного сложно, если Вы не занимались созданием игр прежде. (В любом случае, т.к. я занимаюсь адаптированным переводом с английского, который сам автор тоже знал не очень то хорошо, то возможно будут ошибки, но я всё же постараюсь сохранить изложения автора максимально близким к тексту).
 
Для разработки понадобится Flash Player 9 версии и выше и Flash CS3 и выше. 

Примеры, код и исходные файлы, представленные здесь являются бесплатными. Использовать согласно лицензии CC.  

Я надеюсь, что Вы найдёте этот мануал полезным :)

Спасибо!
Tony / 2003 - 2009

вторник, 17 марта 2009 г.

Старт :)

Всем привет!
Сразу перейдём к делу - будем изучать игры! Есть нужда поближе познакомится с Flash технологией со стороны создания игр. Да, да, старые любимые плиточные игры с Dendy и Sega и алгоритмы, техники и т. д. (я бы не поверил, что когда-нибудь придётся этим заниматься :) )
На начальном этапе, я полностью посвящу свою деятельность следующим аспектам:
  • Tonypa Manual - адаптированному переводу с английского+AS1 на внятный русский+AS3. (Сам автор сего чудного материала вроде сам хотел сделать адаптацию на AS3, но как я читал в блогах, идея была заброшена по причине плохого знания AS3. Жаль конечно... )
  • Хи3 - чудный блог о "хитростях", буду часто ссылаться на посты :)
  • GameDev - кое какие статьи будут переводы и отсюда, но чуть позже.
  • Книги/Видео - Gary Rosenzweig /Todd Perkins/Макар Джоб и другие как побочный материал.
А теперь, собственно, коротко зачем я это всё затеял.
Цель, поверьте, самая эгоистичная - освоить самому и иметь под рукой справочник (чтобы сказать "ох, ну нихрена же, вот спасибо автору за такой хороший сборник!". ЧСВ зашкаливает от одной мысли :D ). В общем, проект "My Level" открыт!
(аплодисменты)