سؤال

I am trying to create a game for kids where they can drag letters on to a stage to make words.

I want to add a 'trash can' where users can drag letters they no longer need to dispose of them. I have created the movie clip but am totally unsure how to make it function using AS3.

I would also like to add a reset button so that the stage reverts to it's original state. Again, I have drawn it up and added the little as3 that I am aware of (to make it a button) but if anyone could assist with how to actually make this happen, I would be grateful.

The files are here: SWF | FLA and the code for the game is as follows:

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

}
هل كانت مفيدة؟

المحلول

I have already gave you the solution here Flash AS3 Clone, Drag and Drop

Here, I am providing a detail solution on how to drag objects inside a bin and remove them.

For dropping copied objects inside a bin, after dragging is stopped, check collision with bin object. for more info see,

copiedObject.hitTestObject(binObject)

For e.g.

First create trash-can MovieClip on the stage and give it an instance name 'trashCan' and add following lines to your onStop()(below e.currentTarget.stopDrag();)function like so:

UPDATE:

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();
}

And your reset() becomes like so:

 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 = [];
     }
 }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top