1152: существует конфликт с унаследованным определением в общедоступном пространстве имен - PullRequest
10 голосов
/ 24 апреля 2011

У меня есть элемент библиотеки Actionscript 3, "BG", который связан с классом BGClass. BG содержит Sprite с именем экземпляра "bg", а также BGClass имеет открытое свойство bg. Итак, класс выглядит так:

public class BGCass extends Base {

    public var bg:Sprite;

    public function BGCass() {
        bg.width = 200
    }
}

Все отлично работает. Но если я хочу переместить public bg в базовый класс, я получаю сообщение об ошибке.

public class BGCass extends Base {
    public function BGCass() {
        bg.width = 200
    }
}

public class Base extends Sprite {

    public var bg:Sprite;

    public function Base() {
    }
}

Я пытался использовать установщики геттеров в Base и переопределить их в BGClass, и все равно получаю ошибку. Это ошибка во Flash? Есть ли чистое решение или мне нужно создать какую-то переменную прокси, чтобы наконец получить bg на Base? Я знаю, что отключение «автоматически объявлять экземпляры сцены» во Flash избавит от ошибки, но мне нужно оставить ее включенной для дизайнеров. Любые решения?

Ответы [ 3 ]

8 голосов
/ 24 апреля 2011

У вас есть несколько вариантов.

  1. Переименуйте вашу переменную "bg" или экземпляр стадии "bg" в другое, чтобы они не совпадали.

  2. Если перейти к меню «Файл»> «Параметры публикации»>> «Flash» и нажать кнопку «Настройки» рядом с Actionscript 3.0, вы увидите опцию, отмеченную по умолчанию и помеченную «Автоматически объявлять экземпляры сцены». ». Если вы отключите эту опцию, ошибка, с которой вы столкнулись, исчезнет, ​​хотя в результате могут появиться другие ошибки.

Если вы перейдете к варианту 2, я считаю, что переменная будет автоматически заполнена ссылкой на экземпляр этапа, если вы оставите их имена одинаковыми.

Немного предыстории: когда вы создаете элемент библиотеки с базовым классом, Flash создает за сценой новый класс, который расширяет выбранный вами класс. По умолчанию Flash настроен на предоставление этому классу набора переменных-членов, соответствующих дочерним элементам, которые вы поместили в MovieClip в среде разработки.

0 голосов
/ 14 января 2013

просто удалите BG из расширенного MovieClip. BG приходят в расширенный MovieClip из базового MovieClip.

0 голосов
/ 29 апреля 2011

То, что вы забыли сделать, это создать экземпляр bg sprite. Все, что вы сделали, это набрали его в Sprite.
По сути, вы пытаетесь получить доступ к нулевому спрайту

var bg:Sprite;
bg.width // bg is null at this point

var bg:Sprite;
bg = new Sprite()
//or
var bg:Sprite = new Sprite()

поэтому, если вы создадите экземпляр, у вас не возникнет проблемы

public class Base extends Sprite {

    public var bg:Sprite;

    public function Base() {
        this.bg = new Sprite( );
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...