2017-04-20 4 views
0

Le glisser cependant déposer des œuvres, je ne sais pas comment créer une instruction if qui va à la scène suivante lorsque tous MovieClips ont été placés sur la cible.Actionscript 3 glisser-déposer plusieurs objets à cibler avec bien fait

J'ai essayé de placer les noms d'instance dans une instruction if avec hitTestObject cependant pas de chance.

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

Avez-vous déjà trouvé une solution? – BadFeelingAboutThis

Répondre

0

Que diriez-vous d'ajouter un compteur qui est égal au nombre d'objets à glisser, puis chaque fois que vous laissez tomber l'objet (et détectez si elle était sur la cible) vous décrémente le compteur et à la fin de la fonction que vous vérifiez si c'est 0?

+0

Salut, comment pourrais-je mettre en œuvre cela? Je vous remercie. – winniethepooh

+0

'compteur var: Int = lemons.length + melons.length;' Ensuite, une fois que vous faites: 'event.target.visible = false;' 'juste contre -,' et vérifier si elle est 0. – 3vilguy

0

Un moyen facile de le faire serait d'enlever vos citrons/melons de leurs tableaux quand ils passent le test de recherche. Ensuite, vérifiez si chaque tableau est vide et passez à la scène suivante si c'est le cas.

Vous pouvez effectivement réduire le code redondant et utiliser la même fonction (dropobject) pour les citrons et les melons.

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 
     } 
    } 
} 

Obtenir plus avancée, une meilleure façon de le faire serait de faire une classe de base pour vos citrons, des melons et tout ce que vous voulez faire glisser dans l'avenir. Ensuite, vous pouvez ajouter la fonctionnalité de glisser dans cette classe de base et ajouter des propriétés pour la cible de hit et un événement pour quand il est frappé sa cible. Cela vous donnerait une base de code qui peut être facilement appliquée à n'importe quel objet de bibliothèque.