0

我是 flash 的新手。我需要将下面的 actionscript 代码更改为 actionscript 3.0 代码。我目前正在研究拖放。所以我想在拖动时复制电影剪辑我在互联网上找到了代码,但它是 actionscript 2.0,所以请将其转换为 as3。该是一个movieclip的实例名称。代码块是:

var num:Number = 0

box.onPress = function(){

    num++


    duplicateMovieClip(box ,"box"+num, _root.getNextHighestDepth())

    _root["box"+num].startDrag();

}

box.onReleaseOutside = function(){

    trace(_root["box"+num])

    stopDrag();

}
4

2 回答 2

1

不幸的是,AS3 中没有重复的MovieClip 模拟,因此您必须为您的盒子movieClip 模板创建一个类。假设它将被称为 BoxTemplate。(您可以谷歌如何为您的库对象创建类)。添加具有此名称的类并添加此代码(构造函数中的事件订阅和私有事件侦听器)。你会得到这样的东西:

package
{
    public class BoxTemplate
    {
        public function BoxTemplate()
        {
            addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        }
    }

    private function onMouseUp(e:MouseEvent):void 
    {
        stopDrag();
    }
}

将您当前的此符号实例留在舞台上。这是框架中的代码:

import flash.event.MouseEvent

box.addEventListener(MouseEvent.CLICK, onClick);

function onClick(e:MouseEvent):void
{
    var newBox:BoxTemplate = new BoxTemplate();
    newBox.x = e.target.x;
    newBox.y = e.target.y;
    addChild(newBox);
    newBox.startDrag();
}

它将允许您无限克隆您的盒子。当然,您可以将它们全部添加到数组中以保留引用。

于 2013-09-02T11:35:54.607 回答
1

如果您不想使用单独的 .as 文件,请按照以下步骤操作:

1-分配AS linkage给框movieClip(在库面板中):

在此处输入图像描述

2- 选择时间轴上的第 1 帧,并将此代码粘贴到“动作”面板中:

var boxes:Array=[];
//var box:Box=new Box();
//addChild(box);
box.addEventListener(MouseEvent.MOUSE_DOWN,generateBox);
function generateBox(e:MouseEvent):void{
    var newBox:Box=new Box();
    newBox.x = e.target.x;
    newBox.y = e.target.y;
    newBox.startDrag();
    newBox.addEventListener(MouseEvent.MOUSE_UP,stopD);
    newBox.addEventListener(MouseEvent.MOUSE_DOWN,startD);
    boxes.push(newBox);
    addChild(newBox);
}
function startD(e:MouseEvent):void{
    e.target.startDrag();
}
function stopD(e:MouseEvent):void{
    e.target.stopDrag();
}
于 2013-09-03T14:11:52.390 回答