Macromedia Flash MX. Задание № 17.1. Создание интерактивных фильмов. Игра «Морской бой» | язык ActionScript | функция attachMovie | событие removeMovieClip
Создание интерактивных фильмов
Игра «Морской бой»
-
Откройте приложение Macromedia Flash
-
Создайте новый фильм. Сперва необходимо подготовить объекты, которые будут участвовать в игре.
-
В нижнем солое создайте фон сцены, по желанию изображение фона можно сгруппировать или преобразовать в символ клип.
-
В новом слое создайте изображение орудия. Преобразуйте орудие в символ-клип. Так как башня орудия будет вращаться вокруг своей оси, то точка регистрации должна находиться в центре башни:
Присвойте имя копии символа с изображением орудия (например
Gun
):
Разместите орудие в нужном месте (в нашем примере – в центре экрана с точкой регистрации чуть ниже нижней границы рабочй области).
-
В новом слое разместите надписи со статическим текстом с пояснениями и с динамическим текстом для вывода результатов на экран. В нашем примере 7 надписей с динамичным текстом:
В палитре Параметры присвойте этим 7-ми надписям имена переменных, значения которых будут выводиться на экран. В нашем примере это:
PlDistr
– количество сбитых самолётов Pl
– общее количество вылетевших самолётов s1Distr
– количество потопленных кораблей s1
– общее количество выплывших кораблей s2Distr
– количество потопленных девушек s2
– общее количество выплывших девушек patron
– количество снарядов
-
В отдельном пустом слое создайте изображение самолёта. Преобразуйте изображение самолёта в символ-клип, присвоив ему имя (например,
Plane
):
Удалите из фильма клип с самолётом. Откройте библиотеку фильма, найдите в библиотеке клип
Plane
и, щёлкнув правой клавишей на названии клипа, выберите пункт контекстного менюСвязи...
В открывшемся окне присвойте связи Название:
Plane
и установите галки в полях Экспорт для ActionScript и Экспорт в первый кадр.
-
Создайте символ-клип с анимацией разрушающегося самолёта (название клипа
PlaneDistr
).
В последнем кадре с обломками установите alpha-прозрачность = 0 и установите действие
stop();
(т. е. обломки должны исчезнуть и клип на этом остановится).
Удалите из фильма клип и в библиотеке фильма установить для него связь (см. пункт 5). -
Подобным образом создайте символы клипы с изображениями плывущих объектов (в нашем примере изображение корабля и девушки):
а так же клипов с анимацией их разрушения.
Присвойте клипам имена (в нашем примере
Ship1
,Ship1Distr
,Ship2
,Ship2Distr
), удалите клипы из фильма и установите для символов-клипов связи (см. п. п. 5, 6). -
Создайте символ-клип с анимацией выстрела (название клипа
Fire
):
В последнем кадре анимационной последовательности установить alpha-прозрачность = 0 и устанвите действие
stop();
(т. е. выстрел должен исчезнуть и клип на этом остановится).
Удалите из фильма клип и в библиотеке фильма установить для него связь. -
Создайте символ-клип с надписью «Игра окончена» (название клипа, например
GameOver
) и установить для него связь:
-
Создайте символ-клип с изображением прицела (название клипа, например
Target
) и установить для него связь.
-
Создайте новый слой, в нём будет размещаться код ActionScriptпроисходящего на экране:
//описание переменнх defeat - попадание в цель
var defeat = false;
var P1Distr = 0;
var P1 = 0;
var s1Distr = 0;
var s1 = 0;
var s2Distr = 0;
var s2 = 0;
var patron = 30;
//установка курсора мыши
Mouse.hide();
attachMovie("target", "target", 1000);
//функция загрузки клипа в зависимости от значения переменной marker
function loadObject(mark){
switch (mark){
case 1:
attachMovie("ship1", "ship1", 999);
speed = 5;
ship1._y = 170;
ship1._x = -75;
s1 += 1;
break;
case 2:
attachMovie("ship2", "ship2", 998);
speed = 3;
ship2._y = 225;
ship2._x = 635;
s2 += 1;
break;
case 3:
attachMovie("Plane", "Plane", 997);
speed = 9;
Plane._y = 70;
Plane._x = -52;
pl += 1;
break;
case 4:
attachMovie("GameOver", "GameOver", 1001);
GameOver._x = 275;
GameOver._y = 160;
target.removeMovieClip();
ship1.removeMovieClip();
ship2.removeMovieClip();
plane.removeMovieClip();
Mouse.show();
break;
}
}
//Функция загрузки клипа с разрушающимся объектом
function loadObjectDis(mark){
switch (mark){
case 1:
xMov = Ship1._x;
yMov = Ship1._y;
ship1.removeMovieClip();
attachMovie("ship1Distr", "ship1Distr", 995);
ship1Distr._x = xMov;
ship1Distr._y = yMov;
s1Distr += 1;
patron += 2;
break;
case 2:
xMov = Ship2._x;
yMov = Ship2._y;
ship2.removeMovieClip();
attachMovie("ship2Distr", "ship2Distr", 994);
ship2Distr._x = xMov;
ship2Distr._y = yMov;
s2Distr += 1;
break;
case 3:
xMov = Plane._x;
yMov = Plane._y;
plane.removeMovieClip();
attachMovie("planeDistr", "planeDistr", 993);
planeDistr._x = xMov;
planeDistr._y = yMov;
PlDistr += 1;
patron += 3;
break;
}
defeat = false;
}
//поведение мыши
_root.onMouseMove = function (){
if(marker < 4){
target._x = _xmouse;
target._y = _ymouse;
_root.Gun._rotation =
(Math.atan((_xmouse-275)/(415-_ymouse))*180)/Math.PI;
}
}
//первоначальная загрузка клипа первого клипа
marker=Math.ceil((Math.random()*3));
loadObject(marker);
//поведение объектов в зависимости от значения defeat = попал/не попал
_root.onEnterFrame = function() {
//не попал
if (!defeat){
switch (marker){
case 1:
//корабль
if (ship1._x < 625){ship1._x += speed;}
else {
ship1.removeMovieClip();
marker = Math.ceil((Math.random()*3));
loadObject(marker);
}
break;
case 2:
//Девушка
if (ship2._x > -85){ship2._x -= speed;}
else {
ship2.removeMovieClip();
marker = Math.ceil((Math.random()*3));
loadObject(marker);
}
break;
case 3:
//Самолёт
if (Plane._x < 602){Plane._x += speed;}
else {
Plane.removeMovieClip();
marker = Math.ceil((Math.random()*3));
loadObject(marker);
}
break;
case 4:
//игра окончена
loadObject(marker);
break;
}
}
//не попал
else {
loadObjectDis(marker);
marker = Math.ceil((Math.random()*3));
loadObject(marker);
}
//если закончились патроны - выход из игры
if (patron < 1) {marker = 4;}
}
//действия при нажатии на левую клавишу мыши
_root.onMouseDown = function(){
if (marker < 4) {
attachMovie("fire", "fire", 996);
fire._x = gun._x+Math.sin(gun._rotation*(Math.PI/180))*120;
fire._y = gun._y-Math.cos(gun._rotation*(Math.PI/180))*120;
patron -= 1;
}
switch(marker){
case 1:
if (_xmouse > ship1._x-10 && _xmouse < ship1._x+10
&& _ymouse > (ship1._y-10) && _ymouse < ship1._y+10)
{defeat = true;}
break;
case 2:
if (_xmouse > ship2._x-10 && _xmouse < ship2._x+10
&& _ymouse > ship2._y-10 && _ymouse < ship2._y+10)
{defeat = true;}
break;
case 3:
if (_xmouse > plane._x-10 && _xmouse < plane._x+10
&& _ymouse > plane._y-10 && _ymouse <plane._y+10)
{defeat = true;}
break;
}
}
-
Готовое изображение сохраните в своей папке в формате
*.fla
-
Протестируйте фильм, нажав сочетание клавиш
<Ctrl>+<Enter>, устраните недочёты.
.
Готовая флеш-игра
Все представленные материалы являются интеллектуальной собственностью.
При цитировании материалов ссылка на сайт обязательна!
Обратная связь: admin@modern-computer.ru