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

Dip52 29.08.2013 22:15

При обращение к статической переменной определённого класса создаётся его экземпляр
 
Здравствуйте.

Положение:
Есть один swf файл (A) к которому присоединяется несколько библиотек. Одна библиотека сделана во Flash, она имеет класс, который находится в той же папке, где находится класс (swf файла A, пусть будет называться классом A). В этом классе идёт обращение к статической переменной класса A.

Проблема:
Когда я компилирую эту библиотеку, то Flash извергает несметное количество ошибок, которые связаны напрямую с классом A. В этом классе есть обращение и создание нескольких MovieClip объектов. Я получаю ошибки из рода: "не найден тот MovieClip объект и этот". Получается, что Flash странным образом создаёт экземпляр класса A, хотя я всего лишь обращаюсь к статической переменной класса A.

illuzor 29.08.2013 23:22

Покажите ваши классы

Dip52 29.08.2013 23:59

Цитата:

Сообщение от illuzor (Сообщение 1145080)
Покажите ваши классы

Класс A:
Код AS3:

package fox
{
        import flash.display.MovieClip;
 
 
        public class FoxWay extends MovieClip
        {
                public static var r:MovieClip;
                public function FoxWay()
                {
                        //Добавление мусора в приложение:
                        var rubbish:Rubbish = new Rubbish();
                        r = rubbish;
                        this.containerForRubbish.addChild(rubbish);
                        //Добавление неба в приложение:
                        var sky:Sky = new Sky();
                        sky.generalPlay();
                        containerForSky.addChild(sky);
                        //Добавление уровня с гопниками в приложение:
                        var levelForGopniks:LevelForGopniks = new LevelForGopniks(stage);
                        this.containerForGopniks.addChild(levelForGopniks);
                        //Добавление заводов в приложение:
                        var plants:Plants = new Plants();
                        containerForPlants.addChild(plants);
                        //Добавление облаков в приложение:
                        var clouds:Clouds = new Clouds();
                        containtsForClouds.addChild(clouds);
                }
        }
}

Класс библиотеки:
Код AS3:

package fox
{
        import flash.display.MovieClip;
        import flash.events.KeyboardEvent;
        import flash.ui.Keyboard;
 
        public class LevelForGopniks extends MovieClip
        {
                private var speed:int = 10;
 
                public function LevelForGopniks(s):void
                {
                        s.addEventListener(KeyboardEvent.KEY_DOWN,kd);
                }
                private function kd(event:KeyboardEvent):void
                {
                        var kc = event.keyCode;
                        if(kc == Keyboard.LEFT)
                        {
                                x += speed;
                        }
                        if(kc == Keyboard.RIGHT)
                        {
                                x -= speed;
                        }
                        FoxWay.r.x -= x;
                }
        }
}


illuzor 30.08.2013 00:55

Вы обращаетесь к переменной FoxWay.r, при том, что не создан её экземпляр. Отсюда и ошибка.

Dip52 30.08.2013 01:06

Цитата:

Сообщение от illuzor (Сообщение 1145083)
Вы обращаетесь к переменной FoxWay.r, при том, что не создан её экземпляр. Отсюда и ошибка.

Я обращаюсь к статической переменной класса A.

tsarapkabel 30.08.2013 01:23

Код AS3:

public static var r:MovieClip;

Мувиклип не инициализирован (== null).

Dip52 30.08.2013 01:45

Цитата:

Сообщение от tsarapkabel (Сообщение 1145086)
Код AS3:

public static var r:MovieClip;

Мувиклип не инициализирован (== null).

Инициализировал. Тоже самое.

caseyryan 30.08.2013 10:08

Цитата:

Инициализировал.
Каким образом?

dimarik 30.08.2013 10:10

Код AS3:

public static var r:MovieClip = new FoxWay();

И всех делов-то.

Dip52 30.08.2013 12:13

Цитата:

Сообщение от caseyryan (Сообщение 1145094)
Каким образом?

Код AS3:

public static var r:MovieClip = new MovieClip();

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

Сообщение от dimarik (Сообщение 1145097)
Код AS3:

public static var r:MovieClip = new FoxWay();

И всех делов-то.

Всё тоже самое, никаких изменений:

Код:

FoxWay.as, строка 13        1180: Вызов предположительно неопределенного метода Rubbish.
И так по порядку с каждой строкой кода.

Хотя я совсем не понимаю зачем мне инициализировать класс, инициализация, которого мне не нужна.


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

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