【问题标题】:I would like to create a basic draganddrop with using hittestobject at actionscript but I am stuck.. I think我想在 actionscript 中使用 hittestobject 创建一个基本的拖放,但我被卡住了.. 我认为
【发布时间】:2015-03-10 11:04:00
【问题描述】:
import flash.events.MouseEvent;
stop();

btn1ileri.addEventListener(MouseEvent.CLICK, ileri1);
function ileri1(event:MouseEvent):void
{
    nextFrame();
}

有 3 个目标 dogrucevap1dogrucevap2dogrucevap3。还有 28 个拼图。

目的是将拼图(cvp1,cvp2,..cvp28)拖到目标上。

拼图贴在目标上后不会碰撞,每个目标上只有一块拼图。因此,如果拼图块相互碰撞,它们将返回到它们的第一个位置。

我无法将这些碎片恢复到原来的位置。

请查看returnfirstposition()

var puzzle:MovieClip=new MovieClip(); 
var puzzleparcalari:String;
var ilkX:int;
var ilkY:int;
for (var i:int=1; i<=28; i++)
{
    puzzleparcalari = "cvp" + i;
    puzzle = this[puzzleparcalari];//this["cvp" + i].buttonMode = true;
    this["cvp" + i].addEventListener(MouseEvent.MOUSE_DOWN,surukle);
    this["cvp" + i].addEventListener(MouseEvent.MOUSE_UP,birak);
}


function kontrol(e:Event)   // checking recording first positions as ilkX and ilkY
{
    this["cvp" + i].addEventListener(Event.ENTER_FRAME , kontrol);
    ilkX = this["cvp" + i].x;
    ilkY = this["cvp" + i].y;//this["cvp" + i].removeEventListener(Event.ENTER_FRAME , kontrol);
}




function surukle(e:MouseEvent)  // starting drag and tracing x position 
{
    e.currentTarget.startDrag();
    ilkX = e.currentTarget.x;
    ilkY = e.currentTarget.y;//e.currentTarget.buttonMode = true;
    trace(e.currentTarget.x);
}


var kutucuk:MovieClip=new MovieClip();
var kutucukismi:String;//d1.addEventListener(MouseEvent.MOUSE_DOWN,surukle);
 function returnfirstposition()  /creating return first position function
{
    this.puzzle.x = ilkX;
    this.puzzle.y = ilkY;
}
function birak(e:MouseEvent)
{
    e.currentTarget.stopDrag();

    for (var k:int=1; k<=3; k++)
    {
        kutucukismi = "dogrucevap" + k;
        kutucuk = this[kutucukismi];



        if (e.currentTarget.hitTestObject(this.kutucuk))
        {
            e.currentTarget.x = ilkX;
            e.currentTarget.y = ilkY;
            trace("kutucuk");


            for (var i:int=1; i<=28; i++)
            {
                puzzleparcalari = "cvp" + i;
                puzzle = this[puzzleparcalari];
                if (e.currentTarget.hitTestObject(this.puzzle))
                {
                    e.currentTarget.x = this.kutucuk.x;
                    e.currentTarget.y = this.kutucuk.y;
                    trace("this puzzle a değdi");
                }
                else
                {

                    returnfirstposition();


                }
            }
        }
    }
}

【问题讨论】:

    标签: actionscript-3 actionscript


    【解决方案1】:

    如果 "cvp" + i 是一个movieclip,你可以添加"originalX" 和"originalY" 属性并使用它们返回movieclip:

    //将此添加到您的第一个循环中:

    for (var i:int=1; i<=2; i++)
    {
        puzzleparcalari = "cvp" + i;
        puzzle = this[puzzleparcalari];
        this["cvp" + i].addEventListener(MouseEvent.MOUSE_DOWN,surukle);
        this["cvp" + i].addEventListener(MouseEvent.MOUSE_UP,birak);
        this["cvp" + i].originalX=this["cvp" + i].x;
        this["cvp" + i].originalY=this["cvp" + i].y;
    }
    
    //and then in you drop function (e.currentTarget is the dropped piece):
    
    if (e.currentTarget.hitTestObject(this.puzzle))
                    {
                        e.currentTarget.x = this.kutucuk.x;
                        e.currentTarget.y = this.kutucuk.y;
                        trace("this puzzle a değdi");
                    }
                    else
                    {
    
                        e.currentTarget.x =  e.currentTarget.originalX;
                         e.currentTarget.y =  e.currentTarget.originalY;
    
                    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2015-05-08
      • 2011-03-02
      • 2022-08-12
      • 1970-01-01
      相关资源
      最近更新 更多