понедельник, 12 декабря 2011 г.

Урок 6. Цикл for

В результате этого урока мы создадим вот такую игрушку:
PS: Когда кто-то добежит до конца, щелкните по экрану, что бы начать заново.
Цикл — разновидность управляющей конструкции, преднозначеной для организации многоразового повторения набора действий (команд).
Цикл "for".
Синтаксис:
for(переменная=значение; условие; выражение){
       команда1;
       команда2;
       ....
       командаN:
}

Теперь разберем пошагово как это работает. Допустим у нас есть такой цикл:
for(var i:int=1;i<4;i++){
     trace(i);
}
Действия выполняемые этим циклом:
  1. Проверка верно ли условие i=1; 1<4;   -Верно. Идём дальше.
  2.   Выводим i. В данный момент i=1, значит в окне вывода появится "1".
  3.   К i добавляется еденица ( i++ ),  i становится равным двум.
  4. Проверка верно ли условие i=2; 2<4;   -Верно. Идём дальше.
  5.   Выводим i. В данный момент i=2, значит в окне вывода появится "2"
  6.   К i добавляется еденица ( i++ ),  i становится равным трем. 
  7. Проверка верно ли условие i=3; 3<4;   -Верно. Идём дальше.
  8.   Выводим i. В данный момент i=3, значит в окне вывода появится "3" 
  9.   К i добавляется еденица ( i++ ),  i становится равным четырем.
  10. Проверка верно ли условие i=4; 4 не меньше 4;   -НЕВЕРНО! Цикл окончен. 
После выполнения этого цикла окно вывода будет выглядеть так:
Теперь попробуем сделать мини-игру из примера в начале урока.
Шаг 1. (Создание персонажей)  1.1 Для начала нарисуте какого-нибудь персонажа, и сделайте из него мувиклип.  1.2 Создайте внутри этого мувиклипа 3 кадра
 Первый кадр - персонаж стоит на месте.
 Второй кадр - персонаж бежит.
 Третий кадр - персонаж победил.
 1.3 Добавьте новый слой (Layer 2) и напишите код:
stop();
 1.4 Вернитесь на главную сцену и скопируйте этого персонажа нужное количество раз .  1.5 Дайте этим персонажам имена типа p1, p2, p3.... (соотвественно первому р1, второму р2 и д.т.)  1.6 Пишем код:
import flash.events.Event;
import flash.events.MouseEvent;

const numPlayer:int = 5;//количество игроков, если у вас их не 5 не забудьте поменять это значение!
addEventListener(Event.ENTER_FRAME,loop);

function loop(e:Event):void
{
 for (var i:int=1; i<=numPlayer; i++)
 {
  root["p"+i].y-=Math.random()*5;/*передвигаем поочередно каждого из 5 
  персонажей на случайное расстояние от 0 до 5 пикселей*/
  root["p"+i].gotoAndStop(2);/*заставляем персонажей "бежать"*/
  if (root["p" + i].y <= 23)/*если какой-то из персонажей достиг верха экрана*/
  {
   root["p" + i].gotoAndStop(3);/*то поставить его на кадр №3*/
   trace(i);/*вывести его номер*/
   i = 8;/*выйти из цикла*/
   removeEventListener(Event.ENTER_FRAME,loop);/*стереть слушатель*/
   stage.addEventListener(MouseEvent.CLICK,resetF);/*и добавить слушатель для рестарта*/
  }
 }
}
function resetF(e:MouseEvent):void
{
 /*функция рестарта игры*/
 for (var i:int=1; i<=numPlayer; i++)
 {
  root["p" + i].y = 300;/*возвращаем всех персов на место*/
  root["p" + i].gotoAndStop(2);/*и переводим их в кадр бега*/
 }
 addEventListener(Event.ENTER_FRAME,loop);
 stage.removeEventListener(MouseEvent.CLICK,resetF);
}
Если всё еще ничего не понятно, то не расстраивайтесь сейчас я проведу пошаговый тест куска кода, который возвращает персонажей на место, и всё должно встать на свои места.
for (var i:int=1; i<=numPlayer; i++)
{
 root["p" + i].y = 300;/*возвращаем всех персов на место*/
 root["p" + i].gotoAndStop(2);/*и переводим их в кадр бега*/
}
  1. Проверка верно ли условие;  i=1; 1<5;   -Верно. Идём дальше.
    (Т.К. i = 1, то root["p" + i].y равняется  root["p" + 1].y равняется р1.у)
  2.   Ставим персонажа с именем р1 в у=300;
  3.   Переводим персонажа с именем р1 на второй кадр;
  4. Проверка верно ли условие;  i=2; 2<5;   -Верно. Идём дальше.
    (Т.К. i = 2, то root["p" + i].y равняется  root["p" + 2].y равняется р2.у)
  5.    Ставим персонажа с именем р2 в у=300; 
  6.    Переводим персонажа с именем р2 на второй кадр; 
  7. Проверка верно ли условие;  i=3; 3<5;   -Верно. Идём дальше.
  8.    Ставим персонажа с именем р3 в у=300; 
  9.    Переводим персонажа с именем р3 на второй кадр;  
  10. И ТАК ДАЛЕЕ..
Ну вот, надеюсь теперь всё встало на свои места, но если всё-же есть какие-то вопросы, задавайте!)
Ну вот собственно и всё.
Ах, ну да!
Домашка:
Сделать так, что бы персонажей было не 5 а 3. (Если всё понятно, то это не составит труда).

5 комментариев:

  1. При таком раскладе перс будет не бежать, а катится как на коньках, ибо не нарисована и не написана смена ног

    ОтветитьУдалить
    Ответы
    1. Не совсем понял что имеется ввиду... При каком раскладе? Какая смена ног? И это же не урок о том как создать идеальную игру,а урок по циклу for

      Удалить
  2. Как внутри этих мувиклипов создавать анимацию персонажей?

    ОтветитьУдалить
  3. 18 строка i = 8;/*выйти из цикла*/
    рекомендую сделать так вдруг кто то будет экспериментировать и сделает больше персонажей чем 8
    i = numPlayer+1;/*выйти из цикла*/

    ОтветитьУдалить
  4. отличный урок! спасибо огромное!!!

    ОтветитьУдалить