我正在尝试创建一个简单的拖放Flash程序,用户可以将圣诞饰品拖到树上。我没有能够拖动装饰一次,而是想要一个函数,这样每次点击一个装饰时,它都会将相同类的新装饰添加到点击装饰的舞台上。目前我有这个工作,但有一个问题。它不是动态的。查看“拖动”功能,我选择了“Symbol31”类作为添加的默认装饰。相反,我希望ActionScript读取被点击的装饰的类并添加该类,而不是每次都添加“Symbol31”。
请参阅下面的代码。
由于
public class DragDrop extends MovieClip
{
private var originalX:Number;
private var originalY:Number;
public function DragDrop()
{
originalX = this.x;
originalY = this.y;
this.addEventListener(MouseEvent.MOUSE_DOWN, drag);
}
private function drag(event:MouseEvent):void
{
if(event.target.x>Number(600))
{
var newOrnament:Symbol31 = new Symbol31();
newOrnament.x=originalX;
newOrnament.y=originalY;
this.parent.addChild(newOrnament);
newOrnament.startDrag();
newOrnament.addEventListener(MouseEvent.MOUSE_UP, drop);
}else{
this.startDrag();
this.parent.addChild(this);
this.addEventListener(MouseEvent.MOUSE_UP, drop);
}
}
答案 0 :(得分:2)
最灵活的解决方案是首先通过将event.target传递给getQualifiedClassName(flash.utils的一部分)然后将其传递到getDefinitionByName(也在flash.utils中)将该字符串转换为a来获取类的名称。参考实际的课程。创建该类的新实例,然后离开。
答案 1 :(得分:0)
假设您的所有饰品都有基类,您可以执行以下操作吗?
var newOrnament = event.target as OrnamentBase
if (newOrnament != null)
{
// your code
}
答案 2 :(得分:0)
捎带Branden Hall所说的代码可能看起来像这样:
var ClassReference:Class = getDefinitionByName(getQualifiedClassName(e.target)) as Class;
var instance:DisplayObject = new ClassReference();
addChild(instance);