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

Михаил Свинцов 29.02.2012 14:08

Глобальное свойство
 
Допустим у меня есть класс в котором хранятся ссылки на экземпляры других классов. Чтобы пользоваться этими ссылками надо в каждый класс в котором они хранятся написать
Код AS3:

var ref = new Ref();

.

А вопрос вот в чем можно ли как-то объявить эту переменную(ref) на уровне пакета чтоб не загромождать код этими строками(т.к. классов(небольших правда) будет около 50)????

Inet_PC 29.02.2012 14:17

Код AS3:

public static var ref: Ref = new Ref();

И в любом месте можно обратиться, как имя_класс.ref. Если я вас правильно понял.

Zebestov 29.02.2012 14:17

Можно в классе Ref пометить все ссылки как static и пользоваться ими из любого места:

Код AS3:

Ref.someReference

Добавлено через 28 секунд
А еще есть синглтон.

Михаил Свинцов 29.02.2012 14:22

у меня итак в Ref все экземпляры объявлены статическими(точнее переменные в которых они храняться), но не известно по какой причине я не могу обратиться к этим переменным из других классов(а я обращаюсь - Ref.primer) без приведенной в первом сообщении строки

Добавлено через 1 минуту
Цитата:

А еще есть синглтон
А это что такое??? можно поподробнее

Zebestov 29.02.2012 14:29

Цитата:

Сообщение от Михаил Свинцов (Сообщение 1066176)
у меня итак в Ref все экземпляры объявлены статическими..., но не известно по какой причине я не могу обратиться к этим переменным из других классов

Может ты просто забыл import?

Цитата:

Сообщение от Михаил Свинцов (Сообщение 1066176)
А это что такое??? можно поподробнее

Птщь

Михаил Свинцов 29.02.2012 14:33

а нужно делать импорт если все в одном пакете??

Zebestov 29.02.2012 14:35

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

Михаил Свинцов 29.02.2012 14:40

Вот Основной класс
Код AS3:

package p {
        import flash.display.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
 
    public class Application extends MovieClip {
            public function Application() {
                        trace("Конструктор основного класса Application");
                        trace(Ref._panel);
 // Часть кода я выпустил т.к. он тут вообще не при чем.
            }
    }
}

Добавлено через 2 минуты
а вот сам Ref
Код AS3:

package p {
        import flash.display.*;
        import flash.display.Sprite;
 
        public class Ref extends Sprite {
                public static var _glav0;
                public static var _glav1;
                public static var _panel;
 
                public function Ref(){
                    _glav0 = new Glava0();
                    _glav1 = new Glava1();
                    _panel = new Panel();
                }
        }
}

Добавлено через 3 минуты
выводит кстати в аутпат вот это


Конструктор основного класса Application
undefined
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChild()
at p::Application$iinit()[C:\Users\Михаил\Documents\biolog8\src\p\Application.as:12]

Добавлено через 6 минут
если я добавляю строку
Код AS3:

var ref = new Ref();

в основной класс тогда вместо undefined выводит [object Panel]

Inet_PC 29.02.2012 14:51

Естественно Вы же нигде ни разу не создали экземпляр класса, в конструкторе которого и инициализируются статические переменные. Либо где нибудь один раз напишите
Код AS3:

var ref = new Ref();

да хоть в Ref:
Код AS3:

public static var instance:Ref = new Ref();

Либо:
Код AS3:

package p {
        import flash.display.*;
        import flash.display.Sprite;
 
        public class Ref extends Sprite {
                public static var _glav0= new Glava0();
                public static var _glav1 = new Glava1();
                public static var _panel = new Panel();
 
                public function Ref(){
 
                }
        }
}

И не помешает почитать чем отличается статическая переменная от не статической.

Zebestov 29.02.2012 14:56

Код AS3:

package p {
        public class Ref {
                public static var glav0:Glava0 = new Glava0();
                public static var glav1:Glava1 = new Glava1();
                public static var panel:Panel = new Panel();
 
                public function Ref()
                {
                }
        }
}

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

Михаил Свинцов 29.02.2012 15:11

я знаю что так не надо делать, но мне легче отличать из-за _

Добавлено через 59 секунд
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at p::Glava0$iinit()[C:\Users\Михаил\Documents\biolog8\src\p\Glava0.as:34]
at p::Ref$cinit()
at global$init()[C:\Users\Михаил\Documents\biolog8\src\p\Ref.as:5]
at p::Application$iinit()[C:\Users\Михаил\Documents\biolog8\src\p\Application.as:11]

я все сделал как вы и сказали но возникла ошибка

Inet_PC 29.02.2012 15:18

Ну ошибка видимо в Glava0 на 34 строке. А, что там, никто понятия не имеет.

Zebestov 29.02.2012 15:20

Чую обращение к stage в конструкторе )

Михаил Свинцов 29.02.2012 15:22

неа я убрал все обращения к stage уже давно))))

Добавлено через 1 минуту
а там(как раз и назначение этих ссылок) переменная Ref._glav1 передается в конструктор как параметр. Я над этим тоже дума можно это или нет но остановился все таки на МОЖНО

Добавлено через 3 минуты
Код AS3:

ch1 = new CreateButton("................................", 14, 0x0000ff, "Segoe Print",
                                                                  true, false, 280, 40, 100, 100, TextFieldAutoSize.LEFT,
                                                                  TextFormatAlign.LEFT, false, null, false, null, true,
                                                                  Ref._glav1)

Добавлено через 4 минуты
а stage я убрал потому что я все равно ничего толкового от нее не дождался

Zebestov 29.02.2012 15:27

Зачем же такое делать? Стоило ли делать ссылки статическими, чтобы потом передавать их в качестве аргументов? 0о

Михаил Свинцов 29.02.2012 15:30

тогда как мне сделать

Zebestov 29.02.2012 15:31

Ок. Полагаю, вопрос про статические поля/методы исчерпан. Остальное выходит за рамки как темы, так и, мне кажется, здравого смысла =)
Цитата:

тогда как мне сделать
Создавай новую тему с новым предметным вопросом.

Михаил Свинцов 29.02.2012 15:34

да кстати я и сам забылся можно ли все таки как-нибудь объявить переменную на уровне пакета, на подобии _global.primer в AS1


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

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