Движение объекта в пределах более чем одного экрана

Февраль 3rd, 2009

Одной из первых задач, которые должен решить начинающий программист флэш игр – это то, как заставить героя (будь то космический корабль, воин или черепашка ;) ) двигаться по экрану не только в пределах обозначенных разрешением монитора (например 1024х768), но и за ними.

Как же это сделать?

Давайте посмотрим на проблему со стороны. У нас есть герой, у нас есть экран монитора. Если герой перемещается в какую-либо сторону он неуклонно двигается к границе экрана, рано или поздно достигнет ее и скроется за ней. Но это недопустимо.

Следовательно, герой вообще не должен перемещаться, он должен стоять на месте. В то же время весь мир во круг него должен двигаться. Таким образом будет достигнута иллюзия перемещения героя по местности, намного превышающей размеры монитора.

Давайте посмотрим более подробно, как это можно реализовать с помощью Flash.

1. Добавляем экземпляр клипа героя на сцену, размещая его посередине экрана (в библиотеке должен быть клип с именем player).

1
_root.attachMovie ("player", "player", 1, {_x:Stage.width / 2, _y:Stage.height / 2});

2. Добавляем экземпляр клипа локации на сцену. Это может быть просто пустой клип, к которому потом можно будет добавлять другие клипы, которые будут создавать атмосферу игрового уровня (например, если вы делаете космический экшн, можно будет добавить звезды, астероиды, планеты и прочие элементы).

1
_root.attachMovie (“location”, “location”, 0);

Обратите внимание: клип игрока расположен над клипом с локацией.

Теперь, когда у нас есть оба клипа на сцене, надо заставить двигаться клип с локацией, для создания иллюзии передвижения.
3. Давайте создадим объект game, в котором будем хранить все данные об игре:

1
2
3
4
5
6
game = {};
game.player = {};
game.location = {};
game.player.clip = _root[“player”];
game.location.clip = _root[“location”];
game.player.speed = 1;

Теперь, мы имеем удобные ссылки, которые можем использовать для обращения к клипам практически из любого места кода. А вот собственно и сам механизм передвижения клипа локации:

1
2
3
4
5
public function moveLocationClip ():Void
{
    game.location.clip._x += Math.cos (game.player.clip._rotation / RAD_DEG) * game.player.speed;
    game.location.clip._y += Math.sin (game.player.clip._rotation / RAD_DEG) * game.player.speed;
}

где: RAD_DEG – это константа, позволяющая переводить значение выраженное в радианах в градусы (RAD_DEG = 180 / Pi);
game.player.speed – скорость движения объекта (посмотрите, ранее мы присвоили этому свойству значение 1, т.е. скорость равна 1 пиксель / кадр);
game.player.clip._rotation – угол поворота клипа игрока на сцене, он определяет в какую сторону будет двигаться локация.

Поместив данную функцию в обработчик onEnterFrame мы добьемся того, что с наступлением каждого нового кадра, локация будет перемещаться по оси x и y в соответствии с углом поворота клипа игрока и его скорости.

Можете посмотреть что получилось здесь:

The Flash plugin is required to view this object.


backgroundmoving
Пример .fla здесь:
backgroundmoving

Создание Flash игр ,

Cassiopeia – Доска счета

Февраль 3rd, 2009

Рад представить новую фичу Игры – доска счета. Теперь пользователь сможет регистрироватся, отсылать свой счет, а так же смотреть счет других игроков.

Доска счета Cassiopeia

Доска счета Cassiopeia

Все данные хранятся в xml файле, который лежит на сервере. Отправка данных работает через скрипт Perl. Пока что (из соображений производительности) в таблицу могут попасть только 50 человек с наивысшим значением High score. Т.е. если таблица уже содержит 50 записей, и кто-то отправил High score, значение которого выше самого низкого значения из таблицы, то таблица будет пересортирована и последняя запись будет удалена.

Создание Flash игр , ,

Проверка плагина подсветки ActionScript кода

Январь 28th, 2009

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

Плагин поддерживает огромное количество языков и имеет мощную систему настроек. Советую. :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private function sortScore ():Void
{
    var id:Number = 0;
    cassio.fw.sHs = {};
    for (var i:Number = 0; i < cassio.fw.hs.nLength; i++)
    {
        for (var j:Number = 0; j < cassio.fw.hs.nLength; j++)
        {
            if (cassio.fw.hs[id].score < cassio.fw.hs[j].score && !cassio.fw.hs[j].isChecked)
                id = j;
        }
       
        cassio.fw.sHs[i] = {};
        cassio.fw.sHs[i].score = cassio.fw.hs[id].score;
        cassio.fw.sHs[i].username = cassio.fw.hs[id].username;
       
        cassio.fw.hs[id].isChecked = true;
        id = getFirstUncheckedElementId ();
    }  
}

Создание Flash игр ,

Изменение тематики блога

Январь 28th, 2009

Добрый день уважаемые посетители.

Вот уже скоро год, как я начал писать статьи по SilkTest, переводить различные статьи по автоматизационной тематике, отвечать на ваши вопросы и, в целом, популяризовать SilkTest. Однако, времена меняются, надо идти вперед.

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

Как всегда, я надеюсь на ваш отклик и участие.

Удачи.

Новости

Фаза 7. Шлифовка.

Январь 17th, 2009

«Собирание камней прошло» удачно, теперь надо отшлифовать то, что получилось. Вот план, надеюсь завершающей фазы разработки Cassiopeia.

Read more…

Cassiopeia, Создание Flash игр , , ,

Automation effectiveness

Январь 4th, 2009

When we start script development we can focus on the following benefits:

  • Time
  • Budget
  • Quality

Automation could be effective only in the case when one of the listed benefits is reached. All three benefits are very hard target that is almost unreachable. Stakeholders should identify desired benefits as it strongly influences the automation process.

Let’s consider any benefit in detail.

Read more…

SilkTest

Cassiopeia навигационная карта

Январь 4th, 2009

Новый год прошел, хлопушки отгремели, шампанское выпито… самое время вновь взятся за работу.  Вот я уже взялся. И у меня есть чем похвастаться. Теперь в Cassiopeia игроки смогут пользоватся навигационной картой и перемещатся между 16-ю локациями. В настоящий момент игрок ничем не ограничен и может попасть в любую локацию сразу же. Но! Что его ждет там? :)

Пока что ничего особого, кроме холодных звезд и кучи врагов. Каждая локация отличается двумя характеристиками: уровнем пиратства и технологическим уровнем развития. Эти две характеристики влияют на количество пиратов (врагов) в области и оборудованием установленным на их кораблях. Таким образом, у нас получается набор локаций с различным уровнем сложности.

А вот и скриншот:

Навигационная карта

Навигационная карта

Cassiopeia , ,

Cassiopeia бизнес идея

Декабрь 24th, 2008

Вот уже более полу года я тружусь над проектом флэш игры, но досих пор у меня небыло четкого представления полной картины. С чего игра будет начинатся, где будет проходить основные действия, что пользователь должен делать в том или ином случае. Но недавно я осознал что мне надо, как говорится, чотко и ясно.

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

2. Управление.

3. Доска счета.

4. Об авторах.

При выборе первого пункта, пользователь сразу попадает в игровую область. Предположительно в тренировочную локацию. Игрок может в любое время (если в локации нет врагов) перемещатся между локациями с помощью гиперпрыжка и навигационной карты.

В каждой локации, по крайней мере в первой версии игры, будут находится враги (разного уровня сложности). В дальнейшем в локациях будут размещены стационарные объкты, а так же квесты.

Если пользователь решит покинуть игру, его прогресс сохраняется. В следующий раз он может продолжить с учетом достигнутого ранее.

Идеи ,

Cassiopeia – Время собирать камни

Декабрь 23rd, 2008

Начинается разработка 6 фазы игры Cassiopeia. Главная задача этой фазы, сгруппировать всю наработанную функциональность воедино, придать ей определенный смысл. Так, например, одной из важных задач будет разработка навигационнной карты что даст возможность переключатся между локациями, что в свою очередь увеличит игровое пространство. Это позволит игроку встретить больше врагов, заработать больше очков, что в свою очередь сделает доступным улучшать корабль (что было разработано в предыдущей фазе).

Вот подробный план того, что я хочу сделать:

Фаза 6. (0/5) Время собирать камни.-
1. Разработка навигационной карты.
1.1. Добавление 9 областей на карту.
1.2. Добавление солнца и движущихся планет (в бэкграунд)
1.3. Разработка пользовательского интерфейса для выбора места назначения для гиперпрыжка.
1.4. Добавление кнопки вызова навигационной карты на сцену.
1.5. Блокирование возможности совершить гиперпрыжок если в области присутствуют враги.
2. Улучшение Level класса.
2.1. Каждая область должна загружатся используя методы Level.
2.2. Создание возможности кастомизации уровней с помощью XML.
2.3. Загрузка уровня происходит путем вычитки XML.
2.4. Создание простых, средних и тяжелых по сложности прохождения областей.
2.5. Очистка памяти при переходе между уровнями.
2.6. Очистка клипов при переходе между уровнями.
3. Рефакторинг main класса.
3.1. Добавление кораблей противника с помощью Level методов.
3.2. Добавление структур с помощью Level методов.
4. Сохранение прогресса в SharedObject.
4.1. Создание xml структуры для хранения данных об игрноке.
4.2. Имплементация методов сохранения и вычетки информации об игроке.
5. Создание стартового меню.
5.1. Элемент меню – Начать игру.
5.2. Элемент меню – Доска счета.
5.3. Элемент меню – Об игре.

Cassiopeia

Cassiopeia новые подробности

Декабрь 23rd, 2008

5 фаза разработки успешно заверешена и мне хочется поделится с Вами некоторыми подробностями касательно игры.

Теперь при попадании в цель над ней будет появлятся нанесенный урон, а при уничтожении корабля проитвника – полученный бонус:

Счетчики очков и урона

Счетчики очков и урона

Для перехода между локациями будет использоватся система гиперпространственных прыжков, пока это выглядит примерно так:

Анимация гиперпрыжка

Анимация гиперпрыжка

В процессе прохождения игры, игроку придется постоянно совершенствовать  свой корабль в четырех возможных направлениях: основное вооружение (лазеры), вспомогательное вооружение (ракеты), защита (щиты) и скорость передвижения (топливо).

Окно улучшений

Окно улучшений

Cassiopeia