2017-09-07 2 views
2

Ce que je recherche est quand je fais glisser un objet sur la scène, je voudrais qu'un objet sous-jacent (même calque) soit traîné et reste là où l'objet primaire est placé. Aurais-je besoin d'utiliser un tableau dans la situation des objets multiples? Ceci est juste pour un objet (et 'sous-objet'), il y en aura 22 au total, où je ne peux pas ajouter le sous-objet dans son MovieClip, sinon les 21 autres objets sur la scène se chevaucheront et interférer les uns avec les autres.Flash AS3 Faire glisser plusieurs objets

C'est ce que j'ai jusqu'ici, voir l'illustration aussi bien. Quelqu'un pourrait-il me diriger vers un code utilisable?

CF.addEventListener(MouseEvent.MOUSE_DOWN, dragCF); 
CF.addEventListener(MouseEvent.MOUSE_OVER, fadeCF_spaceIN); 
CF.addEventListener(MouseEvent.MOUSE_UP, fadeCF_spaceIN); 

function dragCF(evt:MouseEvent):void { 
    addChild(MovieClip(evt.currentTarget)); 
    evt.currentTarget.startDrag(); 
    stage.addEventListener(MouseEvent.MOUSE_UP, dropCF); } 

function dropCF(evt:MouseEvent):void { 
    stopDrag(); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, dropCF); } 

function fadeCF_spaceIN(evt:MouseEvent):void { 
    CF_space.alpha = .5; 
    stage.addEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT); 
    stage.addEventListener(MouseEvent.MOUSE_DOWN, fadeCF_spaceOUT);  } 

function fadeCF_spaceOUT(evt:MouseEvent):void { 
    CF_space.alpha = 0; 
    stage.removeEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT); } 

Exemple illustration:

+0

Pourrait-il être lié à: [? Flash AS3 - Glisser-déposer plusieurs objets à une cible] (https : //stackoverflow.com/questions/15359919/flash-as3-drag-and-drop-multiple-objects-to-one-target) –

+0

Je ne suis pas sûr, parce que je suis enclin à penser que je ne devrais pas pour utiliser la méthode cible, puisque l'utilisateur peut placer des objets de manière aléatoire à travers la scène, pas de cibles fixes. Mais peut-être que je suis trop mal versé dans l'utilisation. – too1s

+0

Mais qu'en est-il de l'approche avec array utilisé ici. Et si vous faites quelque chose de similaire, et stockez tous vos joueurs dans le tableau. Ensuite, après avoir fait glisser l'un des joueurs, vous pouvez calculer la direction et la distance, et l'appliquer à tous les autres joueurs de ce tableau. (Je pense que c'est ce que tu veux faire, non?) –

Répondre

0

Reconnaissants pour votre plus, et en effet il est avéré être encore plus simple, trop simple:

object.addEventListener(MouseEvent.MOUSE_DOWN, drag); 
object.addEventListener(MouseEvent.MOUSE_UP, drop); 

function drag(evt:MouseEvent):void { 
    addChild(MovieClip(evt.currentTarget)); 
    evt.currentTarget.startDrag(); 
} 

function drop(evt:MouseEvent):void { 
    stopDrag(); 
    object_space.x = object.x; 
    object_space.y = object.y; 
} 
0
var CF_1:Array = [CF_mc, CF_space]; // instance names 
for each(var CF1_MC:MovieClip in CF_1) 
{ 
    CF1_MC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
    CF1_MC.addEventListener(MouseEvent.MOUSE_UP, dropIt); 
    CF1_MC.startX = CF1_MC.x; 
    CF1_MC.startY = CF1_MC.y; 
} 

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

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

J'ai l'impression que c'est juste une simple ligne de code mais je suis trop noob je suppose. J'ai vraiment besoin d'aide pour cela, quelqu'un pourrait-il donner un coup de main? – too1s

0

ne peut pas être 100% sûr de ce que vous voulez dire, mais pouvez-vous utiliser la fonction ENTER_FRAME au lieu de startDrag et stopDrag? Voici un exemple très minimal de cela, que vous pouvez également utiliser avec des tableaux d'objets.

var xDifference:Number; 
var yDifference:Number; 
var dragging:Boolean; 

draggableObject.addEventListener(MouseEvent.MOUSE_DOWN, mDown); 
draggableObject.addEventListener(MouseEvent.MOUSE_UP, mUp); 
stage.addEventListener(Event.ENTER_FRAME, loop); 

function loop(evt:Event):void{ 
    if(dragging){ 
     draggableObject.x = mouseX; 
     draggableObject.y = mouseY; 

     secondaryObject.x = draggableObject.x + xDifference; 
     secondaryObject.y = draggableObject.y + yDifference; 
    } 
} 

function mDown(evt:MouseEvent):void{ 
    xDifference = secondaryObject.x - draggableObject.x; 
    yDifference = secondaryObject.y - draggableObject.y; 
    dragging = true; 
} 

function mUp(evt:MouseEvent):void{ 
    dragging = false; 
} 

Selon le cas, vous pouvez également compter différence entre le curseur de la souris et le point d'enregistrement de draggableObject sur MOUSE_DOWN pour empêcher draggableObject de sauter à la position où son centre est exactement sur la position de la souris.