2017-04-20 11 views
0

드래그 앤 드롭은 작동하지만 모든 무비 클립이 대상에 배치되었을 때 다음 장면으로 이동하는 if 문을 작성하는 방법을 알지 못합니다.Actionscript 잘 작성한 상태로 여러 객체를 대상으로 드래그 앤 드롭

나는 행운을 빕니다 그러나 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 카운터 : 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 
     } 
    } 
} 

고급 얻기이 할 수있는 더 좋은 방법은 미래에 드래그하려는 레몬, 멜론과 다른 용도로 기본 클래스를 만드는 것입니다. 그런 다음 드래그 기능을 기본 클래스에 추가하고 적중 대상에 대한 속성과 목표에 도달 할 때의 이벤트를 추가 할 수 있습니다. 이렇게하면 모든 라이브러리 객체에 쉽게 적용 할 수있는 하나의 코드 기반이 제공됩니다.