Форум 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=121140)

willis83 08.02.2009 21:09

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

Код:

public function main() {
  var Area:ScrollPane = new ScrollPane();
  Area.source = fSource;
  Area.setSize(860,490);
  Area.x = 20;
  Area.y = 200;
  Area.addEventListener(Event.ENTER_FRAME, Updt)
  addChild(Area);
};
private function Updt(event: Event):void {
  Area.update();
};

Вызов функции Updt работает нормально, но выдаёт ошибку 1120: Access of undefined property Area.

Не пойму почему он её не видит....:o Также есть желание обращаться к этому скроллпейну из других классов и тоже не пойму как это сделать

r_r_f_r 08.02.2009 21:28

Можно взглянуть тут

willis83 08.02.2009 21:34

у меня на винте такое руководство лежит, я по нему и создавал. У них там всё нормально работает. Обращение идёт в пределах одного класса

silin 08.02.2009 21:44

var Area в конструкторе и Area в классе - это разные объекты

r_r_f_r 08.02.2009 21:46

У вас тоже в пределах одного класса, и проблема в том что вы объявляете Area локально для метода, и соответственно она доступна только в конструкторе, для того чтобы была доступна во всём классе её нужно объявить в классе с указанием модификатора доступа.

Код AS3:

public var area:ScrollPane;
public function main() {
  area = new ScrollPane();
  area.source = fSource;
  area.setSize(860,490);
  area.x = 20;
  area.y = 200;
  area.addEventListener(Event.ENTER_FRAME, Updt)
  addChild(area);
};
private function Updt(event: Event):void {
  area.update();
};


willis83 08.02.2009 21:50

Понял, спасибо. В руководстве про такое не пишут. Там области видимости посвящен всего один не большой абзац

Добавлено через 7 минут
А обращаться к этому скроллпэйну в пределах одного пакета, но из других классов я смогу?

r_r_f_r 08.02.2009 22:01

Классы принято называть с большой буквы свойства с маленькой, методы вотТак.
Сможете обращаться через ссылку на объект, т.е.

Код AS3:

var main:Main = new Main();
trace(main.area) //будет ScrollPane

но поскольку Main это документкласс, то нужно передавать ссылку на ScrollPane в метод которому он требуется.
Либо объявить его статиком:
Код AS1/AS2:

public static var area:ScrollPane

Тогда будет возможность обращаться через класс:
Код AS3:

Main.area

Если разработка ведётся в Flash IDE то нужно обращать внимание на import'ы

willis83 08.02.2009 22:40

Спасибо!

Котяра 09.02.2009 11:30

Код AS1/AS2:

public static var area:ScrollPane

Тогда будет возможность обращаться через класс:
Код AS3:

Main.area

лучше все-же использовать гет/сет

r_r_f_r 09.02.2009 11:40

Это documentClass, на него что передавать ссылку потом, оно того не стоит, много статиков в руте всё равно совесть не даст делать, а вот передача ссылок может затянуться и можно сместить изучение паттернов на самую последнюю полку.


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

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