2011-04-24 95 views
10

我有一个ActionScript类库项目“BG”,它链接到类BGClass。 BG包含一个实例名称为“bg”的Sprite,同样BGClass也有一个公共bg属性。所以班级看起来是这样的:1152:名称空间中存在与继承定义冲突的公共

public class BGCass extends Base { 

    public var bg:Sprite; 

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

一切工作正常。但是,如果我希望将公共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中使用getter setters并在BGClass中重写它们,但仍然出现错误。这是Flash中的错误吗?有没有一个干净的解决方案,或者我需要创建某种代理变量来最终获得bg到Base?我知道在Flash中关闭“自动声明阶段实例”将消除错误,但我需要继续为设计师开发。任何解决方案

+0

所以你有一个叫BG的影片剪辑?它的基类是BGClass? BGClass扩展基地?并且BG影片剪辑包含实例名称为“bg”的影片剪辑?我只是为了确保我的结构是正确的,我认为可以使用一些修改,并修改您选择的名称。 – Taurayi 2011-04-24 11:46:19

回答

8

您有几个选项。

  1. 将您的“bg”变量或“bg”阶段实例重命名为其他内容以使它们不匹配。

  2. 如果您转到文件>发布设置...> Flash选项卡,然后单击Actionscript 3.0旁边的“设置...”按钮,您会看到一个标签为“Automatically declare stage instances” 。如果您禁用此选项,那么您看到的错误将会消失,尽管您可能会看到其他一些错误。

如果使用选项2,我相信如果您保留它们的名称相同,变量将自动填充参考舞台实例。

一些背景:当您使用基类创建库项目时,Flash会在幕后创建一个新类以扩展您选择的类。默认情况下,Flash被配置为为该类提供一组成员变量,这些变量与您在创作环境中放置在MovieClip中的子级相匹配。

+0

我给BG中的Sprite实例名称为“背景”(而不是“bg”),然后我在BGClass中设置了bg = background。马虎,但它似乎是唯一的解决方案。“自动声明阶段实例”不适用于我,因为我需要我的脚本工作天气“自动声明阶段实例”是否设置。它看起来像一个错误,因为如果bg是在主类中定义的,则Flash不会给出错误。只有在super中定义bg时才会出现该错误。 – Sunny 2011-04-25 04:40:29

+0

-1这个答案是完全错误的。很快就会提出一个答案。 – 2011-04-29 17:38:29

+2

奇怪,因为他的回答直接超出了你的意思,表明他的问题是通过遵循我的建议来解决的,虽然他还没有正式接受我的答案。 – 2011-05-01 00:17:33

-1

你忘记做的是实例化bg精灵。你所做的只是把它转换成雪碧。
基本上,你在做什么是试图如果实例,你不会有问题

public class Base extends Sprite { 

    public var bg:Sprite; 

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

也与您的代码,您张贴不出错来访问空精灵

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

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

所以不涉及您发布的错误。所以这只是你的问题的一半,如果你做这个改变后仍然得到错误让我知道。

+3

它不需要实例化,因为它已经存在于舞台上。 – Ethan 2011-04-29 19:39:33

0

从扩展的MovieClip中删除BG。 BG从基本MovieClip中扩展到MovieClip。