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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.07.2009, 22:26
shizik вне форума Посмотреть профиль Отправить личное сообщение для shizik Найти все сообщения от shizik
  № 1  
Ответить с цитированием
shizik

Регистрация: Jun 2002
Адрес: Екатеринбург
Сообщений: 41
Отправить сообщение для shizik с помощью ICQ
По умолчанию Обмен переменными между parent и child

Доброго времени суток. Прошу прощения, что в очередной раз поднимаю наболевшую проблему, но старая закалка с AS2 дает о себе знать.

Сам только начал изучать AS3, до этого несколько лет назад работал с AS2.
Есть опыт работы с другими языками. Пока начинаю с простых примеров:
Смоделировать падающие снежинки разных размеров, скоростей, и т.д.
Снежинки выбрасываем по 10 штук в секунду следующим способом:
Код AS3:
var myTimer:Timer = new Timer(100, 1000);
btn.addEventListener(MouseEvent.MOUSE_DOWN, drop);
myTimer.addEventListener("timer", dropsnow);
 
function drop(event:MouseEvent):void
	{
		myTimer.reset();
		myTimer.start();
	}
 
function dropsnow(event:TimerEvent):void
    {
	                var smb:MovieClip;	
			smb=new snow;					
			addChild(smb);				
	}
В самой снежинке рандомим ее характеристики и жвигаем по экрану:
Код AS3:
var basex:Number=800*Math.random();
var size:Number=2*Math.random();
var amp:Number=16*Math.random();
var spd:Number=2+3*Math.random();
var fi:Number=5*Math.random();
var counter:Number=-50;
var go:Boolean=true;
this.x=basex;
this.y=-100;
width *= size;
height *= size;
addEventListener(Event.ENTER_FRAME, fly);
function fly(event:Event):void
{   if(go){
	counter+=1;
	y=counter*spd/size;
	x=basex+amp*Math.sin(counter/(2*Math.PI)-fi);
	if(this.y>900)
                 {
	         go=false;
	         parent.removeChild(this);
                 }
}
}
Вроде как все работает, захотелось добавить ветер.
В родителе добавил код для изменения направления ветра:
Код AS3:
var wind:Number=0;
addEventListener(Event.ENTER_FRAME, makewind);
function makewind(event:Event):void
{
	if(mouseX<20)
	this.wind-=0.05;
	if(mouseX>780)
	this.wind+=0.05;	
}
Теперь надо, чтоб каждый child узнал чему равно значение ветра у родителя, домножить на свой коэффициент и полететь по ветру, но вот трудность, что раньше в AS2 можно было из любого места обратиться в _root и жить без забот, сейчас же всё иначе, дитя, насколько я понимаю может вызывать методы родителя, но не может знать значения его переменных.
Перебирать родителем каждый child и сообщать ему значения в каждый интервал времени видится как минимум нерациональным, хотя тут и так мало чего рационального.

Подскажите, у кого в данном контексте какие подходы. Можно ли извернуться как раньше?
Линк на пример: http://slil.ru/27859293

Старый 26.07.2009, 00:03
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
можно было из любого места обратиться в _root и жить без забот
Хранение переменных в _root идейно не отличается от
- хранения в статических полях класса
- хранения в полях синглтона
Цитата:
дитя, насколько я понимаю может вызывать методы родителя, но не может знать значения его переменных
- не совсем понятно, что имелось в виду.
parent вроде никто не отменял, через него можно получить доступ к контейнеру, содержащему дитя и его публичным полям.

Старый 29.07.2009, 14:36
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 3  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
ну незнаю в ребёнка пишешь parent.переменная_ветра и всё должно работать, возьмёт от туда значение переменной!

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

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

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


 


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


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