Чтение онлайн

на главную - закладки

Жанры

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Розенцвейг Гэри

Шрифт:

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

После того как игрок поймает яблоко, код определит его тип и соответственно изменит счет.

Подготовка ролика

В библиотеке ролика на Web-сайте вы увидите два клипа яблока. Первый, «bad apple», содержит 20 кадров. Каждый кадр включает изображение яблока и согласной. Другой клип, «good apple», содержит 5 кадров для 5 гласных. На рис. 9.5 изображено основное окно Flash, открытое на клипе «bad apple».

Рисунок 9.5. Клип

«bad apple» состоит из 20 кадров. Каждый кадр содержит изображение яблока и одного из согласных звуков

В диалоговом окне Symbol Linkage Properties обоим клипам будет назначено свойство Export for ActionScript и присвоен идентификатор «good apple» или «bad apple».

Создание кода

Код клипа «actions» аналогичен тому, что использовался в игре «Поймай яблоко». Изменятся только функции.

В функцию initGame было внесено лишь одно изменение: число падающих яблок было увеличено до 50.

function initGame {

// Инициализация переменных, хранящих

// номера первого и последнего яблока.

firstApple = 1;

lastApple = 0;

// Инициализация переменной, хранящей число пойманных яблок.

score = 0;

// Задаем общее количество яблок.

totalApples = 50;

// Скорость падения и счетчик времени между появлениями яблок.

timeSinceLastApple = 0;

appleSpeed = 5;

// Создаем экземпляр клипа, содержащий лису.

attachMovie("running fox","fox",999999);

fox._x = 275;

fox._y = 300;

}

Функция moveFox полностью совпадает с аналогичной функцией игры «Поймай яблоко», поэтому нет смысла повторять ее здесь. Функция dropNewApple будет отличаться, так как она должна выбирать, какое яблоко бросать, а затем отображать произвольный кадр выбранного клипа.

function dropNewApple {

// Проверяем, прошел ли заданный промежуток времени.

if (timeSinceLastApple > 20) {

// Бросаем яблоко, если не превышено

// их предельно допустимое количество.

if (lastApple < totalApples) {

// Устанавливаем вероятность сброса яблока в 10 %.

if (Math.random < .1) {

// Создаем объект-яблоко.

lastApple++;

if (Math.random < .5) {

// В 50 % случаев яблоко плохое.

attachMovie( "bad apple", "apple"+lastApple, lastApple);

_root["apple"+lastApple].type = "bad";

} else {

// В 50 % случаев яблоко хорошее.

attachMovie( "good apple", "apple"+lastApple, lastApple);

_root["apple"+lastApple].type = "good";

}

f=int(Math.Random*_root["apple"+

lastApple]._totalFrames) + 1;

trace(f);

_root["apple"+lastApple].gotoAndStop(f);

_root["apple"+lastApple]._x = Math.random*490+30;

_root["apple"+lastApple]._y = 0;

// Сбрасываем счетчик времени ожидания.

timeSinceLastApple = 0;

// Увеличиваем скорость падения яблока.

if (appleSpeed < 10) appleSpeed += .5;

}

}

}

// Если не бросили яблоко, приближаем это событие.

timeSinceLastApple++;

}

Функция dropNewApple создает переменную type для каждого клипа. Хотя данные клипы не имеют внутри себя сценария, для них можно определять переменные. Поэтому переменная type для гласных звуков будет иметь значение «good», для согласных – bad". Данная переменная проверяется в функции moveApples, когда игрок ловит яблоко. Таким образом, можно определить, поймал ли игрок хорошее яблоко или плохое.

function moveApples {

// Проверяем все летящие яблоки.

for (i=firstApple;i<=lastApple;i++) {

// Определяем местоположение яблока.

x = _root["apple"+i]._x;

o = _root["apple"+i]._y + appleSpeed;

// Выясняем, достигло ли яблоко земли.

if (y > 400) {

removeApple(i);

// Попало ли в яблоко корзину?

} else if ((Math.abs(y-fox._y) < 10) and (Math.abs(x-fox._x) < 25)) {

if (_root["apple"+i].type == "good") {

// Если яблоко хорошее, увеличиваем очки.

score += 1;

} else {

// Если плохое – уменьшаем.

score -= 1;

// Проверяем, чтобы количество очков

// не было отрицательным числом.

if (score < 0) score = 0;

}

removeApple(i);

//

Продолжаем перемещать яблоко.

} else {

_root["apple"+i]._y = y;

}

}

}

Функция removeApple аналогична соответствующей функции в игре «Поймай яблоко».

К сведению

Как и в игре «Поймай яблоко» перед и после кадра «play» находятся соответственно кадры «start» и «game over». Не забудьте также о текстовой области «score» и других компонентах, упомянутых в разделе «К сведению» для предыдущей игры.

Другие возможности

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

Вариантом для детей более старшего возраста могут быть яблоки, включающие глаголы и существительные. Они также могут содержать четные и нечетные числа, числа кратные трем или сокращаемые дроби. Дети еще более старшего возраста могут выбирать страны определенного континента или названия деревьев. Игра может иметь любую тему, главное, чтобы на вопросы можно было дать ответ "верно/неверно".

Сплав на байдарке

Исходный файл: Riverkayak.fla

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

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

Рисунок 9.6. Игра «Сплав на байдарке» состоит из байдарки в центре экрана и камней и веток деревьев, несущихся ей навстречу

Задача проекта

Одной из задач данной игры является создание определенной иллюзии у игрока. Хотя байдарка остается в центре экрана, у игрока складывается впечатление, что она движется вниз по реке. Это достигается при помощи объектов, двигающихся вверх по экрану.

Большая часть кода будет взята из двух игр, рассмотренных ранее в данной главе. Однако, в отличие от предыдущих игр, избегать придется все, а не только некоторые объекты. Счет будет содержать не количество набранных очков, а количество столкновений байдарки с объектами. Чем больше произойдет столкновений, тем скорее закончится игра.

Подход

Прежде всего, код необходимо изменить таким образом, чтобы объекты двигались не вниз, а вверх. Далее, весь код, связанный со столкновениями, необходимо привести к одной форме, рассматривающей любое столкновение как плохое.

Остальные изменения незначительны. Левая и правая границы должны двигаться, отображая камни в реке. Скорость игры может быть больше, и на экране одновременно может отображаться больше камней.

Вместо постепенного ускорения скорость игры будет падать до 0 при столкновении. В результате игрок почувствует удар. В конце игры будет такое же замедление.

Подготовка ролика

Вместо клипа «apples» мы будем использовать клип «rocks». В ролике Riverkayak.fla клип «rocks» состоит из трех кадров. Каждый кадр содержит анимированное изображение, состоящее из другого элемента библиотеки. Хотя каждый камень находится в одном кадре клипа, анимация воспроизводится в графическом элементе. Запустив ролик, вы увидите, что в каждом кадре вокруг камня течет вода.

Клип лисы, ловящей яблоки, будет заменен на клип лисы в байдарке. Первый кадр изображает лису в байдарке, повернутой вниз по течению и с веслами над водой. Затем следуют кадры "left" и "right", содержащие изображение повернутой байдарки и одного весла, опущенного в воду. На рис. 9.7 изображена лиса, поворачивающая вправо. После этого в кадре 4 запускается анимация "spill", представляющая удар байдарки о камень.

Поделиться:
Популярные книги

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Помещица Бедная Лиза

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Помещица Бедная Лиза

Бальмануг. Студентка

Лашина Полина
2. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Бальмануг. Студентка

Изменить нельзя простить

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Изменить нельзя простить

Газлайтер. Том 3

Володин Григорий
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Жандарм 4

Семин Никита
4. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 4

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Отмороженный 6.0

Гарцевич Евгений Александрович
6. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 6.0

Пипец Котенку!

Майерс Александр
1. РОС: Пипец Котенку!
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Пипец Котенку!

АН (цикл 11 книг)

Тарс Элиан
Аномальный наследник
Фантастика:
фэнтези
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
АН (цикл 11 книг)

Толян и его команда

Иванов Дмитрий
6. Девяностые
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Толян и его команда

Пятое правило дворянина

Герда Александр
5. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пятое правило дворянина

Игрок, забравшийся на вершину. Том 8

Михалек Дмитрий Владимирович
8. Игрок, забравшийся на вершину
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Игрок, забравшийся на вершину. Том 8

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7