Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 06.04.2011, 15:37
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 5  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Пойду от печки, т.е. от this.
This - это указатель на мувик, внутри которого исполняется код. Когда в коде идет работа со свойством или вызывается функция, то неявно подразумевается, что мы работаем с мувиком, внутри которого этот код написан, и поэтому this можно не писать.
Т.е. мы можем написать
Код AS3:
x = 100;
и мувик встанет на соответствующую координату. А можем написать
Код AS3:
this.x = 100;
и эффект будет точно такой же.
Но приколы начинаются в тот момент, когда мы решаем поработать с другим мувиком. Представим, что у нас есть мувик mcParent, внутри него лежит мувик mcChild, и мы пишем код в первом кадре mcParent. Нам нужно также сдвинуть mcChild на x=100. Пишем:
Код AS3:
mcChild.x = 100;
Теперь немного усложним задачу: в mcParent лежат мувики mcFoo, mcBar, mcZod, mcKux и mcLol. Код вырастет до такого:
Код AS3:
mcFoo.x = 100;
mcBar.x = 100;
mcZod.x = 100;
mcKux.x = 100;
mcLol.x = 100;
Код, написанный копипастом, вызывает воспоминания о массивах и циклах:
Код AS3:
var mcs:Array = [];
 
mcs.push(mcFoo);
mcs.push(mcBar);
mcs.push(mcZod);
mcs.push(mcKux);
mcs.push(mcLol);
 
for(var i:int = 0; i < mcs.length; i++){
    var mc:MovieClip = mcs[i];
    mc.x = 100;
}//for
Дальше - веселее. Теперь представим, что внутри mcParent валяется куча мувиков, и какие-то из них нужно сдвинуть на x=100, причем какие именно, mcParent не знает. Зато те мувики, которые нужно сдвинуть, знают о том, что mcParent должен их сдвинуть. Поэтому мы делаем финт ушами: пускай эти мувики сами рассказывают mcParent о том, что их нужно сдвинуть. Для этого пишем в mcParent до боли знакомый код:
Код AS3:
this.mcsToMove = [];
 
function addMc(mc:MovieClip){
    this.mcsToMove.push(mc);
}//addMc
 
function moveMcs(){
    for(var i:int = 0; i < mcsToMove.length; i++){
        var mc:MovieClip = mcsToMove[i];
        mc.x = 100;
    }//for
}//moveMcs
Плюс внутри каждого мувика, который нужно сдвинуть, пишем такой код:
Код AS3:
parent.addMc(this);
Эта строчка отрабатывает во всех мувиках, которые нужно сдвинуть. Каждый такой мувик обращается к mcParent и передает ему ссылку на себя самого. И каждый раз mcParent получает ссылку на мувик и заносит ее в свой массив mcsToMove. В итоге в этом массиве будут содержаться ссылки на все мувики, которые нужно сдвинуть. Теперь по этому массиву можно пройтись циклом, собственно сдвигая мувики - это произойдет при вызове moveMcs().

Ну и в качестве финального штриха меняем понятие "сдвинуть на x=100" на "проверить на столкновение с героем", и получаем искомое.
__________________
тонкий тролль, осеянный благодатью

Создать новую тему   Часовой пояс GMT +4, время: 17:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.