我有一个动作脚本3库项目“BG”,它链接到BGClass类。 BG包含一个实例名称为“bg”的Sprite,同样BGClass也有一个公共bg属性。所以班级看起来像这样:
public class BGCass extends Base {
public var bg:Sprite;
public function BGCass() {
bg.width = 200
}
}
一切正常。但是如果我希望像这样将公共bg移动到Base类中,我就会收到错误。
public class BGCass extends Base {
public function BGCass() {
bg.width = 200
}
}
public class Base extends Sprite {
public var bg:Sprite;
public function Base() {
}
}
我尝试在Base中使用getter setter并在BGClass中覆盖它们,但我仍然得到错误。这是Flash中的错误吗?是否有一个干净的解决方案或我是否需要创建某种代理变量以最终获得bg到Base?我知道在Flash中关闭“自动声明阶段实例”将消除错误,但我需要为设计师保留它。任何解决方案?
答案 0 :(得分:8)
你有几个选择。
将您的“bg”变量或“bg”阶段实例重命名为其他内容以使它们不匹配。
如果你去File>发布设置...> Flash选项卡并单击Actionscript 3.0旁边的“设置...”按钮,您将看到默认情况下选中的选项标记为“自动声明舞台实例”。如果您禁用此选项,您看到的错误将会消失,但您可能会看到其他错误。
如果你使用选项2,我相信如果你的名字保持不变,变量将自动填充对舞台实例的引用。
一些背景知识:当您使用基类创建库项目时,Flash会在幕后创建一个新类,从而扩展您选择的类。默认情况下,Flash配置为为该类提供一组成员变量,这些成员变量与您在创作环境中放置在MovieClip中的子项相匹配。
答案 1 :(得分:0)
从扩展的MovieClip中删除BG。 BG从MovieClip基础扩展了MovieClip。
答案 2 :(得分:-1)
你忘记做的是实例化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( );
}
}
您发布的代码错误也与您发布的错误无关。所以这只是你问题的一半,如果你在做出这个改变后仍然得到错误让我知道。