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