【发布时间】:2011-09-01 16:23:37
【问题描述】:
我尝试实例化作为参数传递给另一个类的类的引用失败。
在这个例子中有 3 个类:MainClass、Canvas、MyCircle
我正在从 MainClass 创建一个 Canvas 实例,它传递了一个 MyCircle 的类引用,因为我想从 Canvas 中创建 MyCircle 实例。但是,MyCircle 构造函数包含从 Canvas 中创建的必需参数。
如何使用所需参数传递和实例化类引用?
我的圈子:
package
{
//Imports
import flash.display.Shape;
//Class
public class MyCircle extends Shape
{
//Constructor
public function MyCircle(color:uint, radius:uint)
{
graphics.beginFill(color, 1.0);
graphics.drawCircle(0, 0, radius);
graphics.endFill();
}
}
}
画布:
package
{
//Imports
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
//Class
public class Canvas extends Sprite
{
//Constructor
public function Canvas(circleClassReference:String, amount:uint)
{
var CircleReference:Class = getDefinitionByName(circleClassReference) as Class;
for (var i:uint = 0; i < amount; i++)
{
var randomColor:uint = Math.random() * 0xFFFFFF;
var randomRadius:uint = Math.random() * 100 + 50;
var circleInstance:DisplayObject = new CircleReference(randomColor, randomRadius);
circleInstance.y = i * randomRadius;
addChild(circleInstance);
}
}
}
}
主类:
package
{
//Imports
import flash.display.Sprite;
//Class
public class MainClass extends Sprite
{
//Constructor
public function MainClass()
{
var myCanvas:Canvas = new Canvas("MyCircle", 10);
addChild(myCanvas)
}
}
}
[编辑]
似乎传递实际的类而不是类的名称可以避免需要下面提到的脏修复。
MainClass 构造函数
public function MainClass()
{
var myCanvas:Canvas = new Canvas(MyCircle, 10);
addChild(myCanvas)
}
画布构造器
public function Canvas(circleClassReference:Class, amount:uint)
{
var CircleReference:Class = circleClassReference;
for (var i:uint = 0; i < amount; i++)
{
var randomColor:uint = Math.random() * 0xFFFFFF;
var randomRadius:uint = Math.random() * 100 + 50;
var circleInstance:DisplayObject = new CircleReference(randomColor, randomRadius);
circleInstance.y = i * randomRadius;
addChild(circleInstance);
}
}
【问题讨论】:
-
你真的在任何地方导入 circle 类吗?据我所知,您做得对,但我看不出代码如何在编译时导入 MyCircle 类。你遇到了什么错误?
-
在这个例子中,所有 3 个类都在同一个包目录中,所以我不需要导入。我收到
ReferenceError: Error #1065: Variable MyCircle is not defined.,它在此行的 Canvas 类中引发错误:var CircleReference:Class = getDefinitionByName(circleClassReference) as Class; -
如果您没有在代码中的任何位置引用
MyCircle,编译器将不会包含该类。在您的 MainClass 类成员中添加类似private static var dummy:MyCircle的内容,然后重试。 -
@bummzack - 我更喜欢将它作为局部变量包含在内,它不需要存在很长时间。
标签: actionscript-3 class parameters reference instantiation