В результате этого урока мы создадим вот такую игрушку:
PS: Когда кто-то добежит до конца, щелкните по экрану, что бы начать заново.
После выполнения этого цикла окно вывода будет выглядеть так:
Цикл — разновидность управляющей конструкции, преднозначеной для организации многоразового повторения набора действий (команд).
Цикл "for".
Синтаксис:
for(переменная=значение; условие; выражение){ команда1; команда2; .... командаN: }Теперь разберем пошагово как это работает. Допустим у нас есть такой цикл:
for(var i:int=1;i<4;i++){ trace(i); }Действия выполняемые этим циклом:
- Проверка верно ли условие i=1; 1<4; -Верно. Идём дальше.
- Выводим i. В данный момент i=1, значит в окне вывода появится "1".
- К i добавляется еденица ( i++ ), i становится равным двум.
- Проверка верно ли условие i=2; 2<4; -Верно. Идём дальше.
- Выводим i. В данный момент i=2, значит в окне вывода появится "2"
- К i добавляется еденица ( i++ ), i становится равным трем.
- Проверка верно ли условие i=3; 3<4; -Верно. Идём дальше.
- Выводим i. В данный момент i=3, значит в окне вывода появится "3"
- К i добавляется еденица ( i++ ), i становится равным четырем.
- Проверка верно ли условие 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);/*и переводим их в кадр бега*/ }
- Проверка верно ли условие; i=1; 1<5; -Верно. Идём дальше.
(Т.К. i = 1, то root["p" + i].y равняется root["p" + 1].y равняется р1.у) - Ставим персонажа с именем р1 в у=300;
- Переводим персонажа с именем р1 на второй кадр;
- Проверка верно ли условие; i=2; 2<5; -Верно. Идём дальше.
(Т.К. i = 2, то root["p" + i].y равняется root["p" + 2].y равняется р2.у) - Ставим персонажа с именем р2 в у=300;
- Переводим персонажа с именем р2 на второй кадр;
- Проверка верно ли условие; i=3; 3<5; -Верно. Идём дальше.
- Ставим персонажа с именем р3 в у=300;
- Переводим персонажа с именем р3 на второй кадр;
- И ТАК ДАЛЕЕ..
Ну вот, надеюсь теперь всё встало на свои места, но если всё-же есть какие-то вопросы, задавайте!)
Ну вот собственно и всё.
Ах, ну да!
Домашка:
Сделать так, что бы персонажей было не 5 а 3. (Если всё понятно, то это не составит труда).
При таком раскладе перс будет не бежать, а катится как на коньках, ибо не нарисована и не написана смена ног
ОтветитьУдалитьНе совсем понял что имеется ввиду... При каком раскладе? Какая смена ног? И это же не урок о том как создать идеальную игру,а урок по циклу for
УдалитьКак внутри этих мувиклипов создавать анимацию персонажей?
ОтветитьУдалить18 строка i = 8;/*выйти из цикла*/
ОтветитьУдалитьрекомендую сделать так вдруг кто то будет экспериментировать и сделает больше персонажей чем 8
i = numPlayer+1;/*выйти из цикла*/
отличный урок! спасибо огромное!!!
ОтветитьУдалить