Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   базовый вопрос по AS3, область видимости экземпляра класса (http://www.flasher.ru/forum/showthread.php?t=118801)

sinya 04.12.2008 02:45

базовый вопрос по AS3, область видимости экземпляра класса
 
Привет!
Потихоньку вникаю в тонкости написания классов, никак не могу понять следующее:

Почему в ф-ции основного класса, которая вызывается по событию, нельзя увидеть экзепляр другого класса и его метод, хотя он создается в ф-ции-конструкторе и там виден?
Я пробую так:
Код:

        public class main extends Sprite {
                public function main () {               
                        var myChar:charBoy = new charBoy();
                        this.addChild(myChar);
                        addEventListener (Event.ENTER_FRAME, onEnterFrame);
                        myChar.x += 5; //работает
                }
                private function onEnterFrame (event:Event):void {
                        myChar.charMove();              //не работает
                        myChar.x += 5; //работает    //не работает
                }
        }

В ф-ции-конструкторе main() экземпляр myChar виден, а в ф-ции onEnterFrame - нет.

mre 04.12.2008 03:00

Потому что myChar - локальная переменная.
Ее область видимости - конструктор main.

sinya 04.12.2008 03:32

а как сделать экземпляр myChar доступным в пределах всего конструктора main?

mre 04.12.2008 03:39

Код AS3:

public class Main extends Sprite 
{
        private var myChar:CharBoy = new CharBoy();
 
        public function Main()
        {
                super();               
                addChild(myChar);
.......


Dr. No 04.12.2008 04:41

Доброго времени суток! Примажусь к теме с вопросом по видимости, чтобы не плодить темы сверх необходимости) :

Использую movieclip, слинкованный с классом. Среди прочего на нем есть ColorPicker, который хочу использовать и для долгосрочного хранения цвета. В конструкторе ColorPicker'у присваивается некий цвет (ColorPicker.selectedColor), к которому позднее обращаюсь.
Вот конструктор:
Код AS1/AS2:

 
public function Item(RawData:Object, i:Number):void {
//тут всякое.. потом
CP.selectedColor = Math.floor(Math.random()*0xFFFFFF);
 
//Отсюда и до конца конструктора CP.selectedColor выдает 0, хотя ColorPicker красится
// и выбирает рандомный цвет
trace(CP.selectedColor) // -  0;
}

Дебагер во время работы конструктора показывает две переменные:
selectedColor : 0;
_selectedColr : (нормальный цвет uint)

Если обратиться к CP.selectedColor позже, уже не из конструктора, то возвращается цвет, и в дебагере обе переменные равны.
Думаю, в конструкторе можно просто создать вспомогательную переменную с рандомым цветом в начале и пользовать ее.
Код AS1/AS2:

public function Item(RawData:Object, i:Number):void {
 
var col:uint = Math.floor(Math.random()*0xFFFFFF);
 
CP.selectedColor = col;
 
blabla = col; //и т.п.
}

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


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

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