Форум 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, на него что передавать ссылку потом, оно того не стоит, много статиков в руте всё равно совесть не даст делать, а вот передача ссылок может затянуться и можно сместить изучение паттернов на самую последнюю полку.

Котяра 09.02.2009 12:04

Цитата:

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

Ничего не понял)
я имею ввиду всего одно статик проперти (геттер)
Код AS3:

private var _area:ScrollPane
public static function get area():ScrollPane
{
return _area
}


mre 09.02.2009 13:56

Котяра, так нельзя.

Котяра 09.02.2009 15:37

Цитата:

Сообщение от mre (Сообщение 796832)
Котяра, так нельзя.

сорри
Код AS3:

private static var _area:ScrollPane
public static function get area():ScrollPane
{
return _area
}



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

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