Comunidad de diseño web y desarrollo en internet online

Draguear Dos o más Clips a la vez

Citar            
MensajeEscrito el 06 Ene 2011 02:09 pm
Hola, estoy intentando mover varios MC a la vez se puede esto??

Yo intenté dibujando dos MC en el stage uno con nombre de instancia cazul y otro con nombre de instancia crojo y colocando el codigo de las siguientes dos maneras.

Código ActionScript :

crojo.cazul.startDrag();


de esta manera me da un erro.
y también con

Código ActionScript :

crojo.startDrag();
cazul.startDrag();

de esta manera me drague asolo el primero.

Como puedo hacer esto?

Por .::Manu::.

45 de clabLevel



Genero:Masculino  

Argentina - Bs.As.

chrome
Citar            
MensajeEscrito el 07 Ene 2011 04:51 pm
En flash, el metodo startDrag ( ) esta hecho para arrastrar un MC a la vez.

Si queres mover los 2 juntos, podes ponerlos adentro de otro MC, (por ejemplo de nombre 'contenedor') e iniciar el startDrag para contenedor.

Por voices

43 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Ene 2011 05:25 pm
Saludos ActionScripTianos;

Para dragear mc's distintos, yo lo solucione de esta manera:

Código ActionScript :

var distx:Number = 0; var disty:Number = 0;
         
crojo.addEventListener(MouseEvent.MOUSE_DOWN, doDown);
crojo.addEventListener(MouseEvent.MOUSE_UP, doUp);
cazul.addEventListener(MouseEvent.MOUSE_DOWN, doDown);
cazul.addEventListener(MouseEvent.MOUSE_UP, doUp);
      
function doUp(e:MouseEvent):void 
{
   e.target.stopDrag();
   e.target.removeEventListener(MouseEvent.MOUSE_MOVE, doMove);
}

function doDown(e:MouseEvent):void 
{
   if (e.target.name == "crojo")
   {
      distx = cazul.x - crojo.x;
      disty = cazul.y - crojo.y;
   }
   else
   {
      distx = crojo.x - cazul.x;
      disty = crojo.y - cazul.y;
   }
   e.target.startDrag();
   e.target.addEventListener(MouseEvent.MOUSE_MOVE, doMove);
}

function doMove(e:MouseEvent):void 
{
   if (e.target.name == "crojo")
   {
      e.target.parent.getChildByName("cazul").x = e.target.x + distx;
      e.target.parent.getChildByName("cazul").y = e.target.y + disty;
   }
   else
   {
      e.target.parent.getChildByName("crojo").x = e.target.x + distx;
      e.target.parent.getChildByName("crojo").y = e.target.y + disty;
   }
}


Espero te haya servido !

Por WWCC

113 de clabLevel



Genero:Masculino  

Diseñador y desarrollador multimedia

msie
Citar            
MensajeEscrito el 07 Ene 2011 06:53 pm
Impecable! Felicitaciones y muchas gracias. ^^

Por .::Manu::.

45 de clabLevel



Genero:Masculino  

Argentina - Bs.As.

chrome
Citar            
MensajeEscrito el 09 Ene 2011 01:51 am
por si las dudas, agrego una implementacion un poco mas flexible para arrastrar la cantidad deseada de MC.

Código ActionScript :

import flash.display.MovieClip;
import flash.events.MouseEvent;

// variables necesarias para el multiDrag
var drag        :Vector.<MovieClip> = new Vector.<MovieClip> ( ); // almacena los MC que se arrastraran
var prevX       :Number; // para calcular la cantidad de arrastre
var prevY       :Number; // de ambos ejes
var dragTarget :MovieClip; // esta variable almacenara el MC que se clickeo para comenzar el multiDrag

// esta funcion agrega n cantidad de MC al multidrag
function addDrag ( ...mcList ) : void
{
   for each ( var mc :MovieClip in mcList )
   {
      drag.push ( mc );
   
      mc.addEventListener ( MouseEvent.MOUSE_DOWN , startMultiDrag , false , 0 , true );
   }
}

// y esta los remueve del mutidrag
function removeDrag ( mc:MovieClip ) : void
{
   var len :uint = this.drag.length;
   
   for ( var i:uint ; i < len ; i++ )
   {
      if ( this.drag [ i ] == mc )
      {
         this.drag.splice ( i , 1 );
         
         mc.removeEventListener ( MouseEvent.MOUSE_DOWN , startMultiDrag );
         
         return;
      }
   }
}

// estas funciones de aqui abajo se encargan de la magia!
function startMultiDrag ( event:MouseEvent ) : void
{
   this.dragTarget = event.currentTarget as MovieClip;
   
   this.prevX = event.stageX;
   this.prevY = event.stageY;
   
   stage.mouseChildren = false;
   
   stage.addEventListener ( MouseEvent.MOUSE_MOVE , doMultiDrag   , false , 0 , true );
   stage.addEventListener ( MouseEvent.MOUSE_UP   , stopMultiDrag , false , 0 , true );
}

function doMultiDrag ( event:MouseEvent ) : void
{
   for each ( var mc :MovieClip in this.drag )
   {
      mc.x += event.stageX - this.prevX;
      mc.y += event.stageY - this.prevY;
   }
   
   this.prevX = event.stageX;
   this.prevY = event.stageY;
   
   event.updateAfterEvent ( );
}

function stopMultiDrag ( event:MouseEvent ) : void
{
   stage.mouseChildren = true;
   
   stage.removeEventListener ( MouseEvent.MOUSE_MOVE , doMultiDrag   );
   stage.removeEventListener ( MouseEvent.MOUSE_UP   , stopMultiDrag );
   
   this.removeDrag ( this.dragTarget );
}



la manera de implementacion seria la siguiente:

Código ActionScript :

// la implementacion es como la de addChild o removeChild
// solo que addDrag ( ) premite agregar mas de un MC separado por comas:
addDrag ( crojo , cazul ); // se pueden agregar todos los MC que quieran

// y con esta funcion retiramos del drag el MC que queremos:
removeDrag ( crojo );

Por voices

43 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.