我的库中有一个名为Bottle
的对象。 Bottle
由“Glass”和“Cap”实例组成。我的库中还有两个符号名为Cap
和Glass
。
当我点击Bottle
的上限时,它表示此对象属于Cap
类,当我点击玻璃时,它表示类型为Glass
。这些对象中的每一个都具有基类flash.display.MovieClip
。
然而,在我的代码中:
var bottleOnStage:Bottle = new Bottle();
addChild(bottleOnStage);
var newColor:uint = 0x00ff00;
var newColorTransform:ColorTransform = new ColorTransform();
newColorTransform.color = newColor;
bottleOnStage.Glass.transform.colorTransform = newColorTransform;
我收到此错误:
TypeError:错误#1010:术语未定义且没有属性。在MethodInfo-1()
我是否错误地访问了Glass属性?是因为我没有创建Glass的实例吗?我很困惑对象中的对象如何在Flash中工作。
修改
var cap:Cap;
var glass:Glass;
上面是我的Bottle.as文件中的内容。在我的Main.as文件中,我有:
var bottleOnStage:Bottle = new Bottle();
bottleOnStage.cap = new Cap();
bottleOnStage.glass = new Glass();
addChild(bottleOnStage);
var newColor:uint = 0x00ff00;
var newColorTransform:ColorTransform = new ColorTransform();
newColorTransform.color = newColor;
bottleOnStage.glass.transform.colorTransform = newColorTransform;
当我运行此代码时,瓶子的“玻璃”部分不会发生任何变化。为什么是这样?我知道这就是这条线;我已经跟踪并调试了所有其他行,我跟踪的颜色是正确的等等。当我使用addChild将“cap”和“bottle”添加到“bottleOnStage”时,我得到了这两个符号的副本,所以这个显然不是这样的。基本上,我如何在舞台上修改“上限”和“玻璃”?
答案 0 :(得分:1)
看起来你的Classes与实例混淆了。实例名称不能与类名称相同(在同一范围内)。
Glass
是你的班级。如果你的瓶子类中有一个名为“Glass”的变量,你需要重命名它,这样你的班级名称Glass
就不会有歧义。
bottleOnStage.glassInstanceName.transform.colorTransform = newColorTransform;
作为提示,为了避免这种情况,最佳做法总是使您的实例名称以小写字母开头,并始终使您的类名称以大写字母开头。 (这也有助于大多数编码应用程序中的代码突出显示以及Stack Overflow中的代码突出显示 - 请注意大写项目是如何突出显示的?)
就您的错误而言,您可能还没有变量中的实际对象。
执行以下操作:
var myGlass:Glass;
实际上不会创建一个对象(值为null),它只是为一个对象定义一个占位符。您需要使用new
关键字进行实例化以创建实际对象。
var myGlass:Glass = new Glass();
现在你将在该变量中拥有一个对象。
修改强>
为了解决您的编辑问题,听起来您可能想要这样的内容:
package {
public class Bottle extends Sprite {
public var cap:Cap;
public var glass:Glass;
//this is a constructor function (same name as the class), it gets run when you instantiate with the new keyword. so calling `new Bottle()` will run this method:
public function Bottle():void {
cap = new Cap();
glass = new Glass();
addChild(cap); //you want these to be children of this bottle, not Main
addChild(glass);
}
}
}
这可以保持所有封装,并添加帽子和玻璃作为瓶子的孩子。所以瓶子是主要的孩子,帽子和玻璃是儿童或瓶子。
答案 1 :(得分:0)
什么是瓶子中Glass属性的名称?
如果你有例如:
public class Bottle {
public var glass : Glass;
}
您可以通过以下方式访问玻璃板:
var bottle : Bottle = new Bottle();
bottle.glass = new Glass();
玻璃是一流的。 bottle.glass是类Bottle的属性“glass”。
希望它有所帮助。