Macromedia Flash MX. Задание № 17.1. Создание интерактивных фильмов. Игра «Морской бой» | язык ActionScript | функция attachMovie | событие removeMovieClip

Печать

Создание интерактивных фильмов

Игра «Морской бой»

  1. Откройте приложение Macromedia Flash

  2. Создайте новый фильм. Сперва необходимо подготовить объекты, которые будут участвовать в игре.

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


    Создание нового флеш-фильма
  4. В новом слое создайте изображение орудия. Преобразуйте орудие в символ-клип. Так как башня орудия будет вращаться вокруг своей оси, то точка регистрации должна находиться в центре башни:


    Создание в флеш-фильме нового символа клипа


    Присвойте имя копии символа с изображением орудия (например Gun):


    Присавение имени копии символа-клипа


    Разместите орудие в нужном месте (в нашем примере – в центре экрана с точкой регистрации чуть ниже нижней границы рабочй области).

  5. В новом слое разместите надписи со статическим текстом с пояснениями и с динамическим текстом для вывода результатов на экран. В нашем примере 7 надписей с динамичным текстом:


    Добавление в проект динамических надписей


    В палитре Параметры присвойте этим 7-ми надписям имена переменных, значения которых будут выводиться на экран. В нашем примере это:

    PlDistr количество сбитых самолётов
    Pl общее количество вылетевших самолётов
    s1Distr количество потопленных кораблей
    s1 общее количество выплывших кораблей
    s2Distr количество потопленных девушек
    s2 общее количество выплывших девушек
    patron количество снарядов


    Присвоение имен переменным
  6. В отдельном пустом слое создайте изображение самолёта. Преобразуйте изображение самолёта в символ-клип, присвоив ему имя (например, Plane):


    Создание в флеш-фильме символов-клипов


    Удалите из фильма клип с самолётом. Откройте библиотеку фильма, найдите в библиотеке клип Planeи, щёлкнув правой клавишей на названии клипа, выберите пункт контекстного меню Связи...


    Создание связей для символов-клипов


    В открывшемся окне присвойте связи НазваниеPlane и установите галки  в полях Экспорт для ActionScript и Экспорт в первый кадр.


    Экспорт символов-клипов для ActionScript
  7. Создайте символ-клип с анимацией разрушающегося самолёта (название клипа PlaneDistr).




    В последнем кадре с обломками установите alpha-прозрачность = 0 и установите действие stop(); (т. е. обломки должны исчезнуть и клип на этом остановится).
    Удалите из фильма клип и в библиотеке фильма установить для него связь (см. пункт 5).

  8. Подобным образом создайте символы клипы с изображениями плывущих объектов (в нашем примере изображение корабля и девушки):


    Создание в флеш-фильме символов-клипов


    а так же клипов с анимацией их разрушения.




    Присвойте клипам имена (в нашем примере Ship1, Ship1Distr, Ship2, Ship2Distr), удалите клипы из фильма и установите для символов-клипов связи (см. п. п. 5, 6).

  9. Создайте символ-клип с анимацией выстрела (название клипа Fire):




    В последнем кадре анимационной последовательности установить alpha-прозрачность = 0 и устанвите действие stop(); (т. е. выстрел должен исчезнуть и клип на этом остановится).
    Удалите из фильма клип и в библиотеке фильма установить для него связь.

  10. Создайте символ-клип с надписью «Игра окончена» (название клипа, например GameOver) и установить для него связь:


    Создание в флеш-фильме символов-клипов


  11. Создайте символ-клип с изображением прицела (название клипа, например Target) и установить для него связь.


    Создание в флеш-фильме символов-клипов


  12. Создайте новый слой, в нём будет размещаться код 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;
      }
    }


  13. Готовое изображение сохраните в своей папке в формате *.fla


  14. Протестируйте фильм, нажав сочетание клавиш <Ctrl>+<Enter>, устраните недочёты..

Готовая флеш-игра