Cristalab

Drag and Drop de un MovieClip en Actionscript 3

Por: Zguillez + 04.12.2006

Este es un pequeño ejemplo de como hacer un arrastrar y soltar de un movieclip en actionscript3.

El primer paso será crear en Flash 9 un Movieclip al que colocaremos el nombre de instancia "clip".

En el fotograma añadiremos el código para detectar los eventos de onPress y onRelease del MovieClip:

Código :

clip.addEventListener(MouseEvent.MOUSE_DOWN, onMouse_Down);
clip.addEventListener(MouseEvent.MOUSE_UP, onMouse_Up);

Ahora a estas funciones que lanzan los listeners colocaremos el startDrag() y el stopDrag() que moverán el MovieClip:

Código :

function onMouse_Down(e:Event):void{
clip.startDrag()
}
function onMouse_Up(e:Event):void{
clip.stopDrag();
}


Así de simple será actualizar un drag & drop a Actionscript 3.

Para mejorar este código podríamos colocarlo dentro de una clase:

Código :

package
{
   import flash.display.*
   import flash.events.*;
   //————————————
   public class Drag extends MovieClip{
      public var clip:MovieClip = new MovieClip();
      //————————————
      public function Drag(queClip){
         clip = queClip
         clip.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
         clip.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
      }
      //————————————
      private function onMouseDown(e:Event):void{
         clip.startDrag()
      }
      //————————————
      private function onMouseUp(e:Event):void{
         clip.stopDrag();
      }
   }
}

TODO este código deberá ir dentro de un archivo actionscript que se debe llamar "Drag.as", e ir colocado al lado de nuestro archivo .FLA, o dentro de un package:

Código :

package nombrecarpeta
{
...
}

Una vez creado este archivo, utilizaremos el drag & drop en nuestra pelicula de la siguiente manera:

Código :

import Drag
var drag:Drag = new Drag(clip);

Importaremos la clase a la pelicula, crearemos una instancia de la clase y le pasaremos el monbre del MovieClip a mover como parametro... y listo

Etiquetas actionscript_3

Comentarios | Enviar un comentario
hu he.. no hay como un fla para verlo mejor? es que no lo entiendo
Por: lijandro-mesa_blog
Que orror no entendi ni pedo Riendo
jaja
Mejor me quedo con el Actionscript2
juaxD
Por: :S_blog
la verdad me gustaria mas un tipo tutuorial pero en flash de como se hace todo lo que se menciona en la informacion.
digo para comprenderla mejor.
Por: silmar masariegoz avendañ
Tampoco entendi un carajo. Va a estar dificil acostumbrarse al as3.
Por: andres_blog
Cuando compilo me sale este error a que se debe

Warning: 1090: Migration issue: The onMouseDown event handler is not triggered automatically by Flash Player at run time in ActionScript 3.0. You must first register this handler for the event using addEventListener ( 'mouseDown', callback_handler).

Warning: 1090: Migration issue: The onMouseUp event handler is not triggered automatically by Flash Player at run time in ActionScript 3.0. You must first register this handler for the event using addEventListener ( 'mouseUp', callback_handler).

Pero si funciona normal
Por: Newberemis_blog
No lo aprendo ni en curda...
Por: Vaya tela el action scrip
Madres, no entendi, mejor vamos a la raiz, explica como uso el gotoAndPaly(); Apenado

Sobre todo con esto de los paskages, mas archivos llenando mi disco duro, es que no entienden que neceisto ese espacio extra para los videos de keira Amor Aw Crap
Por: Victor-Nael
No me funciono... Confundido
Alguien ha hecho una mejora de este post?
Por: psycho-vnz
Me ha gustado mucho, gracias, poco a poco me voy quitnado el miedo a as3, ya vendran momentos mas difiles con conceptos mas abstractos.
Por: kassel_blog
Hola:
Simplemente ¡¡¡EXCELENTE!!!!, solo una duda, en tu post dices

TODO este código deberá ir dentro de un archivo actionscript que se debe llamar "Drag.as", e ir colocado al lado de nuestro archivo .FLA, o dentro de un package:

Código :


package nombrecarpeta
{
...
}


Puedes explicar esto del package un peliiiinnnnnn, no lo acabo de entender.
Muchas gracias, cada dia me encuentro mas comodo en AS3.
Saludos
Por: willow001
Los paquetes son carpetas.

Es decir, si tu archivo "clase.as" está en la carpeta "miCarpeta", su paquete (package) sería, justamente, esa carpeta:

Código :

package miCarpeta
{
class clase
{
// Métodos
}
}
A todos los demás les digo que AS3 asusta, pero es muy cómodo una vez que se acostumbren (hace 10 días que lo uso). Si igual les resulta difícil, empiecen programando OOP en AS2; luego de eso, el pasaje no es tan jodido.
Por: Duque de Rivas (logout)
quisiera que alguen me diga como hacer una pista de carreras que pueda doblar, subir y bajar en el tiempo capicce..........help me!
Por: danilo _blog
Sé que el post es antiguo, pero practicando con AS 3 chequé este y me pareció bastante interesante.. A este mismo le he hecho modificaciones para que este se pueda usar en n objetos sin que se tenga que crear un objeto para cada mc que quiciera que se arrastrara... y como es una clase que solo asigna estado, se me ocurrio hacerla estática para no tener que crear objetos inecesarios....

Esto quedó asi...

package com.utils{
import flash.display.*;
import flash.events.*;

public class DragDrop {

public function DragDrop() {
}
public static function asignarDrag(_mc:MovieClip) {
_mc.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
_mc.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private static function onMouseDown(e:Event):void {
e.currentTarget.startDrag();
}
private static function onMouseUp(e:Event):void {
e.currentTarget.stopDrag();
}
}
}

Y asi solo para usarla seria:

import com.utils.DragDrop;
DragDrop.asignarDrag(c2);
DragDrop.asignarDrag(clip);

donde "c2" y "clip" son los nombres de movieclips que previamente se han creado...
Espero les sea de utilidad... y excelente forma de iniciar a este mundillo... =)
Un saludo desde México
Por: Marco Antonio Solis Cruz_
Aún no tengo forma de programar en Flash 9 porque carezco del programa. No obstante, quizá los moleste un poco, pues no soy programador y entiendo muy poco de estas cosas y quizás los regrese al AS2 con mi pregunta.

Lo que quiero hacer es un juego de muñequitas que se peudan vestir (como las de papel). Cada vez que arrastre un objeto (una prenda) la muñeca se movería o haría algo, con lo cual cambiaría su apariencia o su posición. ¿Me podrían decir cómo puedo hacer para que esas animaciones se puedan cargary que a la vez, sin importar el orden de Drag
Por: Jenkah_blog
(continuo con lo anterior) ... simimportar el orden del Drag
Por: JENKAH_blog
me en canto
Por: nico_blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.