2

我正在尝试为孩子们创建一个游戏,他们可以将字母拖到舞台上来造词。

我想添加一个“垃圾桶”,用户可以在其中拖动不再需要处理的字母。我已经创建了影片剪辑,但完全不确定如何使用 AS3 使其正常工作。

我还想添加一个重置按钮,以便舞台恢复到原始状态。再一次,我把它画出来并添加了我知道的小 as3(使它成为一个按钮),但如果有人能帮助如何真正实现这一点,我将不胜感激。

文件在这里: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 && 
         e.currentTarget.name != "copy" )
    {
        var objectClass:Class = 
        getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class;

        var copy:MovieClip = new objectClass();
        copy.name = "copy"; 
        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();
}


resetButton.addEventListener(MouseEvent.CLICK, reset);
resetButton.buttonMode = true;

function reset(event:MouseEvent):void
{

//Not sure what AS3 to add here to reset to original state

}
4

1 回答 1

2

我已经在这里为您提供了解决方案Flash AS3 克隆、拖放

在这里,我提供了一个详细的解决方案,说明如何将对象拖入垃圾箱并将其移除。

对于将复制的对象放入 bin 中,停止拖动后,检查与 bin 对象的碰撞。有关更多信息,请参阅,

复制的Object.hitTestObject(binObject)

例如

首先在舞台上创建垃圾桶MovieClip并给它一个实例名称“trashCan”,并将以下几行添加到您的onStop()(下方e.currentTarget.stopDrag();)函数中,如下所示:

更新:

var copiedObjsArr:Array = [];    

function onStop(e)
{
    if ( e.target.dropTarget != null && 
     e.target.dropTarget.parent == dest && 
     e.currentTarget.name != "copy" )
    {
       //Code here remains same
       //.......

       //Keep collecting copied letters for further access in `reset()` function 
       copiedObjsArr.push(copy);
    }
    else if(e.currentTarget.name == "copy") //this is 'else if' (newly added)
    {
       var tarObject:MovieClip = e.currentTarget;

       // These detects collision of dragged object with the trashCan
       if(tarObject.hitTestObject(trashCan)) {

          //These removes dragged object from the display list (not from the memory)
          removeChild(tarObject); 

          tarObject = null; //to garbage
       }
    }

    e.currentTarget.stopDrag();
}

你的reset()变成这样:

 function reset(event:MouseEvent):void
 {

     if(copiedObjsArr.length > 0)
     {
         //Traverse through all copied letters
         for(var i:int = 0; i<copiedObjsArr.length; i++)
         {
             var objToRemove:MovieClip = copiedObjsArr[i];

             removeChild(objToRemove);

             objToRemove = null;
         }

         //Finally empty the array
         copiedObjsArr = [];
     }
 }
于 2014-02-16T03:55:43.080 回答