Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обмен переменными между parent и child (http://www.flasher.ru/forum/showthread.php?t=127929)

shizik 25.07.2009 22:26

Обмен переменными между 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

expl 26.07.2009 00:03

Цитата:

можно было из любого места обратиться в _root и жить без забот
Хранение переменных в _root идейно не отличается от
- хранения в статических полях класса
- хранения в полях синглтона
Цитата:

дитя, насколько я понимаю может вызывать методы родителя, но не может знать значения его переменных
- не совсем понятно, что имелось в виду.
parent вроде никто не отменял, через него можно получить доступ к контейнеру, содержащему дитя и его публичным полям.

WRC_S 29.07.2009 14:36

ну незнаю в ребёнка пишешь parent.переменная_ветра и всё должно работать, возьмёт от туда значение переменной!


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

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