Flash AS3-将多个对象拖放到多个目标 [英] Flash AS3 - Drag and drop multiple objects to multiple targets

查看:123
本文介绍了Flash AS3-将多个对象拖放到多个目标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多个对象可拖动到多个目标. 我有没有错误的代码. 我正在使用多种功能.但是我不知道是否通过像dropIt这样的函数传递对象和特定目标,因为我有更多的对象和重复的函数.

I have multiple objects to drag to multiple targets. I have a code without error. I am using multiple functions. But I wonder if I pass the objects and the specific target with one function like dropIt since I have more objects and duplicated functions.

这是我要实现的图片. 代码如下.

This picture is what I want to implement. and the code is as follows.

谢谢.

 var obj1:Array = [obj_1, obj_10];
 var obj2:Array = [obj_2, obj_20]; 

 for each(var redsMC:MovieClip in reds)
 {
obj1MC.buttonMode = true;
obj1MC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
obj1MC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
obj1MC.startX = obj1MC.x;
obj1MC.startY = obj1MC.y;
   }

for each(var orangesMC:MovieClip in oranges)
{
obj2MC.buttonMode = true;
obj2MC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
obj2MC.addEventListener(MouseEvent.MOUSE_UP, dropIt1);
obj2MC.startX = obj2MC.x;
obj2MC.startY = obj2MC.y;
 }


function pickUp(event:MouseEvent):void
{
event.target.startDrag(true);
event.target.parent.addChild(event.target);

 }


   function dropIt(event:MouseEvent):void
  {
    event.target.stopDrag();

    if(event.target.hitTestObject(target1)){
     event.target.buttonMode = false;
     event.target.x = target1.x;
     event.target.y = target1.y;

     }else if(event.target.hitTestObject(target10)){
    event.target.buttonMode = false;
    event.target.x = target10.x;
    event.target.y = target10.y; 
     }

   else
   {
     event.target.x = event.target.startX;
     event.target.y = event.target.startY;
      event.target.buttonMode = true;
  }
 }

function dropIt1(event:MouseEvent):void
{
event.target.stopDrag();

if(event.target.hitTestObject(target2)){
    event.target.buttonMode = false;
    event.target.x = target2.x;
    event.target.y = target2.y;

}else if(event.target.hitTestObject(target20)){
    event.target.buttonMode = false;
    event.target.x = target20.x;
    event.target.y = target20.y; 
}

else
{
     event.target.x = event.target.startX;
    event.target.y = event.target.startY;
     event.target.buttonMode = true;
 }
}

推荐答案

您应该以某种方式使可拖动对象知道其目标,因此,当您的SWF注册结束拖动事件时,被拖动的对象将检查其目标,并如果不发生碰撞,则向后浮动/跳回.由于您的对象是从MovieClip派生的,因此可以在不进行任何声明的情况下向其添加自定义属性,但是请务必在使用前检查自定义属性中是否包含某些内容.假设您已为每个可拖动对象分配了desiredTarget作为您需要对其进行拖动的任何目标.然后,您可以这样做:

You should somehow make your draggable objects know their targets, thus when your SWF registers an end drag event, the object that was being dragged would check against its target and if not colliding, then float/jump back. Since your objects derive from MovieClips, it's possible to add custom properties to them without doing any declarations, but be sure to check if there is something in a custom property before using it. Let's say you have assigned each draggable object a desiredTarget as whatever target you need them to be dragged. Then, you can do like this:

function dropIt(e:MouseEvent):void {
    var desiredTarget:MovieClip=e.target.desiredTarget as MovieClip; // get where this should be placed
    e.target.stopDrag(); // we still need to release the dragged object
    if (!desiredTarget) return; // no target - nothing to do (also helps with debug)
    if (e.target.hitTestObject(desiredTarget)) {
        e.target.buttonMode=false;
        e.target.x=desiredTarget.x;
        e.target.y=desiredTarget.y;
    } else {
        // move dragged object back to starting position
        e.target.x=e.target.startX;
        e.target.y=e.target.startY;
    }
}

这篇关于Flash AS3-将多个对象拖放到多个目标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆