2017-04-20 59 views
0

拖放工作,但是,我不知道如何创建一个if语句,当所有影片剪辑已经放置在目标上时,if语句会转到下一个场景。Actionscript 3将多个对象拖放到目标上做得很好

我已经尝试将实例名称放在与hittestobject的if语句中,但是没有运气。

import flash.events.TouchEvent; 
import flash.ui.Multitouch; 
import flash.ui.MultitouchInputMode; 
import flash.display.MovieClip; 

/* Touch and Drag Event 
Allows the object to be moved by holding and dragging the object. 
*/ 
var objectoriginalX:Number; 
var objectoriginalY:Number; 
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

var lemons:Array = [lemon1_mc, lemon2_mc, lemon3_mc, lemon4_mc, lemon5_mc]; 

for each(var lemonMC:MovieClip in lemons) 
{ 
    lemonMC.buttonMode = true; 
    lemonMC.addEventListener(TouchEvent.TOUCH_BEGIN, pickobject); 
    lemonMC.addEventListener(TouchEvent.TOUCH_END, dropobject); 

    lemonMC.startX = lemonMC.x; 
    lemonMC.startY = lemonMC.y;  
} 
var fl_DragBounds:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);  

function pickobject(event:TouchEvent):void 
{ 
    event.target.startTouchDrag(event.touchPointID, false, fl_DragBounds); 
    event.target.parent.addChild(event.target); 
    objectoriginalX = event.target.x; 
    objectoriginalY = event.target.y;  
} 

function dropobject(event:TouchEvent):void 
{ 
    if(event.target.hitTestObject(target_mc)){ 
     event.target.buttonMode = false; 
     event.target.x = target_mc.x; 
     event.target.y = target_mc.y; 
     event.target.visible = false;   
    } else { 
     event.target.x = event.target.startX; 
     event.target.y = event.target.startY; 
     event.target.buttonMode = true; 
    } 
} 

var melons:Array = [melon1_mc, melon2_mc, melon3_mc, melon4_mc, melon5_mc, melon6_mc, melon7_mc]; 
for each(var melonMC:MovieClip in melons) 
{ 
    melonMC.buttonMode = true; 
    melonMC.addEventListener(TouchEvent.TOUCH_BEGIN, pickobject2); 
    melonMC.addEventListener(TouchEvent.TOUCH_END, dropobject2); 

    melonMC.startX = melonMC.x; 
    melonMC.startY = melonMC.y;  
} 
var fl_DragBounds2:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); 

function pickobject2(event:TouchEvent):void 
{ 
    event.target.startTouchDrag(event.touchPointID, false, fl_DragBounds2); 
    event.target.parent.addChild(event.target); 
    objectoriginalX = event.target.x; 
    objectoriginalY = event.target.y;  
} 

function dropobject2(event:TouchEvent):void 
{ 
    if(event.target.hitTestObject(target_null)){ 
     event.target.buttonMode = false; 
     event.target.x = target_mc.x; 
     event.target.y = target_mc.y; 
     event.target.visible = false;   
    } else { 
     event.target.x = event.target.startX; 
     event.target.y = event.target.startY; 
     event.target.buttonMode = true; 
    } 
} 
+0

您有没有找到解决方案? – BadFeelingAboutThis

回答

0

如何添加计数器等于对象数目拖累,那么你每次放下对象(并检测它是否是目标)时,你递减计数器,并在您检查函数的结尾如果它是0?

+0

嗨,我将如何实现这一目标?谢谢。 – winniethepooh

+0

'var counter:Int = lemons.length + melons.length;' 然后在你做之后:'event.target.visible = false;'只是'counter - ;'并检查它是否为0。 – 3vilguy

0

一个简单的方法来做到这一点将是当他们通过命中测试时,从他们的阵列中删除你的柠檬/甜瓜。然后检查每个数组是否为空,如果是这种情况,则继续到下一个场景。

实际上,您可以减少多余的代码,并为柠檬和甜瓜使用相同的函数(dropobject)。

function dropobject(event:TouchEvent):void { 
    //Figure out which array this belongs to (is it a lemon or a melon) 
    var array:Array; //the array the dropped item belongs to 
    var hitMC:MovieClip; //the hit object for the lemon or melon 

    if(lemons.indexOf(event.currentTarget) > -1){ //if the lemon array contains the currentTarget 
     array = lemons; 
     hitMC = target_mc; 
    }else{ 
     array = melons; 
     hitMC = target_null; 
    } 

    if(event.currentTarget.hitTestObject(hitMC)){ 
     event.currentTarget.buttonMode = false; 
     event.currentTarget.x = hitMC.x; 
     event.currentTarget.y = hitMC.y; 
     event.currentTarget.visible = false; 

     //remove the item from it's array 
     array.removeAt(array.indexOf(event.currentTarget)); 

     //check if there are any items left 
     if(lemons.length < 1 && melons.length < 1){ 
      //both arrays are empty, so move on 
      play(); //or however you want to move on 
     } 
    } 
} 

获得更先进,更好的方法来做到这一点是使一个基类,你想在未来拖你的柠檬,甜瓜和其他任何东西。然后,您可以将拖动功能添加到该基类中,并为命中目标添加属性,并为该命中目标添加一个事件。这会给你一个可以很容易地应用于任何库对象的代码库。