Flash AS3 Clone,Drag&下降

时间:2014-02-13 06:18:29

标签: actionscript-3 flash drag-and-drop

我是一名老师,在你们中的一些人的帮助下,我设法为孩子们创造了非常基本的文字游戏,他们可以用字母创建单词。 SWF | FLA

然而,一旦他们从舞台一侧的原件克隆出来,我就无法继续拖放这些字母。有人能告诉我如何将此功能添加到现有代码中吗?

import flash.display.MovieClip;

for (var i=1; i<27; i++)
{
    this["object" + i].addEventListener(MouseEvent.MOUSE_DOWN, onStart);
    this["object" + i].addEventListener(MouseEvent.MOUSE_UP, onStop);
}    

var sx = 0,sy = 0;

function onStart(e)
{
    sx = e.currentTarget.x;
    sy = e.currentTarget.y;
    e.currentTarget.startDrag();
}

function onStop(e)
{
    if (e.target.dropTarget != null && 
    e.target.dropTarget.parent == dest)
    {
        var objectClass:Class = 
        getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class;
        var copy:MovieClip = new objectClass();
        this.addChild(copy);
        copy.x = e.currentTarget.x;
        copy.y = e.currentTarget.y;
    }

    e.currentTarget.x = sx;
    e.currentTarget.y = sy;
    e.currentTarget.stopDrag();
}

我还想加入一个“垃圾箱”,孩子们可以拖动信件,如果他们不想再让他们上台。关于如何添加这个的任何想法将不胜感激。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您想要拖动对象的类似行为(即拖动后,会创建一个副本)

将这些行添加到您的onStop(e),就像这样,

copy.addEventListener(MouseEvent.MOUSE_DOWN, onStart);
copy.addEventListener(MouseEvent.MOUSE_UP, onStop);

但是如果你只想拖动并阻止副本,那么要么创建另一个函数说dragCopiedObject()并应用拖动逻辑而不是复制那个新函数

在同一onStop(e)函数中识别复制对象或原始对象,并防止复制。

如果你没有得到它,请告诉我,我会详细解释给你。

为了在bin中删除复制的对象,停止拖动后,检查与bin对象的碰撞。有关更多信息,请参阅,

copiedObject.hitTestObject(binObject)

例如

if(copiedObject.hitTestObject(binObject)) {

     removeChild(copiedObject);
}

更新:要识别复制的对象,请使用name属性,如下所示:

copy.name =“copy”;

我修改了你的代码,

function onStop(e)
{
    if ( e.target.dropTarget != null && 
         e.target.dropTarget.parent == dest && 
         e.currentTarget.name != "copy"         ) //This is newly added
    {
        var objectClass:Class = 
        getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class;

        var copy:MovieClip = new objectClass();
        copy.name = "copy"; //This is newly added
        this.addChild(copy);
        copy.x = e.currentTarget.x;
        copy.y = e.currentTarget.y;

        e.currentTarget.x = sx;
        e.currentTarget.y = sy;

        copy.addEventListener(MouseEvent.MOUSE_DOWN, onStart);
        copy.addEventListener(MouseEvent.MOUSE_UP, onStop);
    }    

    e.currentTarget.stopDrag();
}