1152: существует конфликт с унаследованным определением в пространстве имен public

У меня есть элемент библиотеки 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() {
    }
}

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

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

То, что вы забыли сделать, это создать экземпляр 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( );
    }
}

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