Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как получить переменную родителя? (http://www.flasher.ru/forum/showthread.php?t=95163)

AlexMac 28.04.2007 20:01

Как получить переменную родителя?
 
Привет!

А кто-нибудь знает как получить переменную обявленнную в родителе. На пример:
В keyFrame'е обявлена переменная:
var maxcount:Number=3;
после этого создаются 3 подчиненых обекта MovieClip. В них есть код который должен обращатся к этому самому maxcount. в AS2 это делалост так:
this._parent.maxcount.

А как это сделать в AS3? :umnik2:

Заранее спасибо!

etc 28.04.2007 20:08

Для начала нужно перестать писать код в кадрах и писать код в классе.

AlexMac 28.04.2007 21:42

classes это конечно хорошо.
 
Я просто создаю презентацию, и мне не нужна особая интерактивность, и писать огромный класс ради 5 минутной анимации это гораздо дольше чем это сделать графическим способом использое обектооринтированное програмирование, где каждый ребенок наделяется свойствами своего родителя.

В любом случае адекватность разработчиков Adobe, я сейчас неоцениваю. Хотя мне остается не понятным с какого перепалоха они решили изменить общепонятные принципы программировани. :rtfm:

для тех кто все же сохраняет компромис между "дизайнерским" и программным способами:

команда parent в as3 работает иначем чем в as2. дело в том что она соержит ссылку на объект типа DisplayConteiner который не загружает весь объект родителя, а только основные методы и свойства огворинные в нем такие как (name, alpha и так далее) но не содержит динамически объявленных параметров, например переменных объявленных с полмощью var. для того, чтоб получить к ним доступ, в подчиненном объекте создать объект содержащий родительский, и обращатся к нему.

for example:
Код:


// объект root1_keyFrame_1
var maxcount:Number = 3;

// объект root1.ball_keyFrame_1
var id:Number = 1;
trace(this.parent.name)          // roo1
trace(this.parent.maxcount)    // Error
var mc:Object=this.parent
trace(mc.maxcount)              // 3

Еще одним способом будет перевести this.parent из разряда DisplayObjectContainer классов в объект:
Код:


trace(Object(this.parent).maxcount)    // 3

:victory:

BlooDHounD 28.04.2007 21:51

parent as MovieClip?

etc 28.04.2007 21:58

Кастить объект в нужный тип надо. Например, как описано выше.

AlexMac 28.04.2007 22:15

...
 
Не совсем понял, что значит parent as MovieClip?

parent это свойство встроеного класса DisplayObjectContainer. это результат миграции _parent класса MovieClip из второго ActionScript'а.

в AS3 ссылается на DisplayObjectContainer объект в котором содержится данный объект. Используется для построения относительного пути к объекту. стоящем выше данного в иерархическом списке.

В моем примере иерархия была следующая:

root1 (это то, что раньше было _root)

ball (MovieClip в первом кадре)
ball1 (MovieClip в первом кадре)
ball2 (MovieClip в первом кадре)

сответственно ball.parent = [объект типа root, содержащий в себе объекты типа movieClip {ball;ball1;ball2}]

etc 28.04.2007 22:19

Ну так в чем проблема-то?

AlexMac 28.04.2007 22:37

Уже нет проблемы :D ...

просто если кто-то сталкнется с тем же, я обяснил, как это можно решать.

hayabu4i 07.05.2007 23:41

ну так давай, поясняй:) и кстати есть такой ещё вопрос - как из класса обратиться к родителю объекта этого класса?

etc 08.05.2007 11:44

Речь о наследниках DisplayObject?


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

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