Comunidad de diseño web y desarrollo en internet online

HELP URGENT Movieclip DINAMICOS:asignar startdrag y stopdrag

Citar            
MensajeEscrito el 15 Feb 2009 02:27 am
Hola soy nueva en el foro y apenas empiezo a programar en AS2 me esta resultando complejo necesito de su ayuda..
Estoy usando un clip de pelicula para cargar varias imagenes de un arreglo, cada vez que el usuario da click debo generar una copia dinamica (esto ya lo hago) ... el problema es que a cada copia debo asignarle el startDrag y el stopDrag..para que puedan ser arrastradas las imagenes ..lo malo esque solo creo las copias pero No puedo moverlas!!! :cry:
este es mi codigo podrian decirme que estoy haciendo mal... :lol:

Código :

class mx.ControladorMovie{
      var movie:MovieClip;
   var nimagen:Number=0;
var matriz = new Array(["armadillo", "selva/armadillo.png"],["chimpance", "selva/chimpance.png"],["cocodrilo",    "selva/cocodrilo.png"],["guacamaya", "selva/guacamaya.png"], ["jaguar", "selva/jaguar.png"], ["leopardo", "selva/leopardo.png"]);
    var contimg:Number=0;


  function ControladorMovie(clip:MovieClip) { //AQUI RECIBO EL MOVIECLIP QUE ESTA EN EL ESCENARIO
    trace("constructor");
    this.movie = clip;
    }
   
    public function cargarmc(clip:MovieClip):MovieClip{
     clip.loadMovie(matriz[0][1]);
     return clip;
   }


****************Y AQUI EMPIEZAN MIS PROBLEMAS
public function clonar():Void{
     contimg++;
     //crear clon 
     _root.createEmptyMovieClip("copia"+contimg,contimg);
     loadMovie(matriz[nimagen][1],"copia"+contimg );  //SI CREA LA COPIA 
   
 trace ("el clon ha sido creado :" + this["copia"+contimg] ); // MUESTRA QUE NO ESTA DEFINIDO 
 trace("el movie es :"+ movie);//DICE QUE ESTA EN LEVEL0
   
 //agregar el evento al clon ESTO NO LO HACE 
 this["copia"+contimg].addEventListener("Press",presionado(this["copia"+contimg]));
    
    }

 public function presionado(clip:MovieClip):MovieClip{
     trace("startDrag asignado al clon:" + clip );
      return startDrag(_root[clip]);     
  } 


:cry: gracias..espero que me puedan ayudar

Por quit123

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Feb 2009 07:24 pm
Hola, prueba con esto:

Código ActionScript :

class mx.ControladorMovie
{
   var movie:MovieClip;
   var nimagen:Number=0;
   var matriz = new Array(["armadillo", "selva/armadillo.png"],["chimpance", "selva/chimpance.png"],["cocodrilo",    "selva/cocodrilo.png"],["guacamaya", "selva/guacamaya.png"], ["jaguar", "selva/jaguar.png"], ["leopardo", "selva/leopardo.png"]);
    var contimg:Number=0;

   function ControladorMovie(clip:MovieClip) 
   { //AQUI RECIBO EL MOVIECLIP QUE ESTA EN EL ESCENARIO
      trace("constructor");
      this.movie = clip;
    }
   
    public function cargarmc(clip:MovieClip):MovieClip
   {
      clip.loadMovie(matriz[0][1]);
      return clip;
    }

   public function clonar():Void{
      contimg++;
      //crear clon 
      this.movie.createEmptyMovieClip( "copia" + contimg, contimg);
      this.movie["copia"+contimg].loadMovie( matriz[nimagen][1], "copia"+contimg );  //SI CREA LA COPIA 
      trace ("el clon ha sido creado :" + this.movie["copia"+contimg] ); // MUESTRA QUE NO ESTA DEFINIDO 
      trace("el movie es :"+ this.movie);//DICE QUE ESTA EN LEVEL0
      
      this.movie["copia"+contimg].onPress = function()
      {
         this.startDrag();         
      }
      this.movie["copia"+contimg].onRelease = this.movie["copia"+contimg].onReleaseOutside = function()
      {
         this.stopDrag();         
      }
   }
}


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 15 Feb 2009 11:22 pm
Hola de nuevo, Muchas Gracias por responder :)
Lo probe, pero no se visualizan mis clones, cada vez que clickeo esta es la
salida:
el clon ha sido creado :_level0.cargar_mc.copia1
el movie es :_level0.cargar_mc


No se porque no se visualizan los clones y No entra al startDrag..creo que tiene que ver con la linea del tiempo o algo asi, muestro de nuevo el codigo de la funcion ahora modificado:

Código ActionScript :

public function clonar():Void{       
contimg++;  
//crea el  clon quien sabe donde
this.movie.createEmptyMovieClip( "copia" + contimg, contimg);
this.movie["copia"+contimg].loadMovie( matriz[nimagen][1], "copia"+contimg );         

trace ("el clon ha sido creado :" + this.movie["copia"+contimg] ); // salida:_level0.cargar_mc.copia1       
trace("el movie es :"+ this.movie); //salida : _level0.cargar_mc

//pretendia traerlo al frente con esto pero no funciono
//this["copia"+contimg].swapDepths(_root.getNextHighestDepth());
//this.movie["copia"+contimg].swapDepths(_root.getNextHighestDepth());

//Aqui ya no entra :(
this.movie["copia"+contimg].onPress = function(){  
trace("asigno starDrag a: "+this.movie["copia"+contimg] );
this.startDrag();   
}     

this.movie["copia"+contimg].onRelease = this.movie["copia"+contimg].onReleaseOutside = function(){
   this.stopDrag();
}  
} 


Agradecería que me ayudaran de nuevo...por favor.. :oops:

Por quit123

24 de clabLevel



 

msie
Citar            
MensajeEscrito el 16 Feb 2009 01:01 am
Pureba:

Código ActionScript :

public function clonar():Void{        
contimg++;   
//crea el  clon quien sabe donde
var aux:MovieClip = this.movie.createEmptyMovieClip( "copia" + contimg, contimg);
trace("esto no se que sea..." + matriz[nimagen][contimg])
aux.loadMovie( matriz[nimagen][contimg] );
aux._x = contimg * 10 ;
aux.onPress = function(){   
this.swapDepths(this._parent.getNextHighestDepth()); 
this.startDrag();    
} 
aux.onRelease = this.movie["copia"+contimg].onReleaseOutside = function(){ 
   this.stopDrag(); 
}   
}  


suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 01:02 am

Código ActionScript :

this.movie.createEmptyMovieClip( "copia" + contimg, this.movie.getNextHighestDepth()); 

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 04:06 pm
Hola de nuevo..y otra vez GRACIAS por responder..!!!!!
Sigo con el mismo problema, ahora como al inicio que podia ver las copias pero
al dar click no les pasa nada..ademas cada que genero una nueva copia, la anterior desaparece :shock:
..Seguire intentando y si me pasan un tip o me ayudan se los agradecería demasiado.

P.D no sabia que no se podian repetir Post jeje lo siento esque ya me estoy desesperando.. no lo vuelvo hacer :P

Por quit123

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Feb 2009 07:02 pm
:P podiras postearr el codigo como lo tienes actualmente?

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 08:48 pm
Claro :) aqui esta:

Código ActionScript :

class mx.ControladorMovie{
  var movie:MovieClip;
var nimagen:Number=0;
//ESTA MATRIZ LA USO P/ALMACENAR LAS RUTAS DE LAS  IMGNS y sus nombres
var matriz = new Array(["armadillo", "selva/armadillo.png"],["chimpance", "selva/chimpance.png"],["cocodrilo", "selva/cocodrilo.png"],["guacamaya", "selva/guacamaya.png"], ["jaguar", "selva/jaguar.png"], ["leopardo", "selva/leopardo.png"]);
    
var contimg:Number=0;

function ControladorMovieForo(clip:MovieClip) {
    trace("constructor");
    this.movie = clip;
    }
   
 public function cargarmc(clip:MovieClip):MovieClip{
 clip.loadMovie(matriz[0][1]); //CARGO EN EL MOVIE LA 1RA IMGN DE LA MATRIZ
return clip;
 }

public function clonar():Void{         
contimg++;    
//crea el  clon 
var aux:MovieClip = this.movie.createEmptyMovieClip( "copia" + contimg, contimg);
//carga la imagen que esta en la matriz  bidimensional todas las imagenes siempre estan
//en posicion nimagen, 1 porque las voy recorriendo uso: nimagen
aux.loadMovie( matriz[nimagen][1], "copia"+contimg  );
aux._x = 300 ; 
trace("el clon se llama y esta en el nivel:" + aux);

//AQUI NO ENTRA...
aux.onPress = function(){ 
aux.startDrag();  
this.swapDepths(this._parent.getNextHighestDepth());  
trace("asigno starDrag a  :" + this);   //no entra 
}  

aux.onRelease = this.movie["copia"+contimg].onReleaseOutside = function(){
   this.stopDrag();
   trace("asigno stopDrag a  :" + this);
   } 
this.movie.createEmptyMovieClip( "copia" + contimg, this.movie.getNextHighestDepth()); 
}   




La salida es esta:
constructor
el clon se llama y esta en el nivel:_level0.cargar_mc.copia1

No entra al startDrag...he intentado con _root y tampoco me funciona
Agradezco mucho tu ayuda .. :D

Por quit123

24 de clabLevel



 

msie
Citar            
MensajeEscrito el 16 Feb 2009 10:15 pm
hola, Lo de que generas una nueva copia y desaparece otra, es porque no hiciste la ultima modificacion que te pase, y en estos momentos estoy reescribiendo tu clase, para que de una vez por todas te funcione, pero no me la has pasado completa, necesito lo que falta y la forma en que la usas en los fotogramas.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 10:22 pm
En el script que me pasaste, "nimagen" nunca gana valor, por tanto daria undefined, si no hace el trace probablemente en cargar_mc tienes algun evento onpress, onrelease, etc, que no permiten que los clips internos ejecuten sus onPress o onRelease, porque seria raro que no haga nisiquiera el trace.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 10:38 pm
Hola ..
en el fotograma principal :

Código ActionScript :

import mx.ControladorMovie;
 _global.c=new ControladorMovie(cargar_mc);
c.cargarmc(cargar_mc);


en el movieclip :

Código ActionScript :

on (press) {
   c.clonar(); 
}

En un boton que cambia la imagen por la siguiente

Código ActionScript :

on (press){
   adelante_btn.onPress=c.avanza();

y en el que regresa:

Código ActionScript :

on (press){
atras_btn.onPress=c.atras();
}


y ahi va de nuevo la clase:

Código ActionScript :

class mx.ControladorMovie{
 var movie:MovieClip;
   var nimagen:Number=0;
   var matriz = new Array(["armadillo", "selva/armadillo.png"],["chimpance", "selva/chimpance.png"],["cocodrilo", "selva/cocodrilo.png"],["guacamaya", "selva/guacamaya.png"], ["jaguar", "selva/jaguar.png"], ["leopardo", "selva/leopardo.png"]);
    var contimg:Number=0;

function ControladorMovie(clip:MovieClip) {
    trace("constructor");
    this.movie = clip;
    }
    public function cargarmc(clip:MovieClip):MovieClip{
     clip.loadMovie(matriz[0][1]);
     return clip;
   }

public function clonar():Void{         
contimg++;    
//crea el  clon 
var aux:MovieClip = this.movie.createEmptyMovieClip( "copia" + contimg, contimg);
//carga la imagen que esta en la matriz  bidimensional 
aux.loadMovie( matriz[nimagen][1], "copia"+contimg  );
aux._x = 300 ; 
trace("el clon se llama y esta en el nivel:" + aux);
aux.onPress = function(){ 
aux.startDrag();  
this.swapDepths(this._parent.getNextHighestDepth());  
trace("asigno starDrag a  :" + this);   
}  

aux.onRelease = this.movie["copia"+contimg].onReleaseOutside = function(){
   this.stopDrag();
   trace("asigno stopDrag a  :" + this);
   } 
this.movie.createEmptyMovieClip( "copia" + contimg, this.movie.getNextHighestDepth()); 
}   
//ESTAS FUNCIONES LAS USO PARA CAMBIAR DE IMAGEN 
  public function avanza(){
     nimagen++;
  this.movie.loadMovie(matriz[nimagen][1]);
    }
    
  public function atras(){
  nimagen--;
     this.movie.loadMovie(matriz[nimagen][1]);
    }



Ahora le doy click a las copias y se comportan como el original se replican pero no se pueden arrastrar.....y al crear una copia nueva..la anterior desaparece..
cabe mencionar que las copias de las copias no se visualizan Se que existen porque el trace me avisa cada vez que se crea una nueva..
GRACIAS.. :P

Por quit123

24 de clabLevel



 

msie
Citar            
MensajeEscrito el 16 Feb 2009 10:43 pm
niimagen cambia cuando doy click en el boton que avanza y atras..
y cuando doy click en avanzar o retroceder se desaparece la copia anterior..
disculpa que no haya dado estos detalles antes pero pense que no habia problema con eso..
Saludos

Por quit123

24 de clabLevel



 

msie
Citar            
MensajeEscrito el 16 Feb 2009 11:17 pm
Hola, de nuevo, pude ver tus errores, los corregi y ademas mejore tu clase, es mas entendible y esta mejor estructurada:

Código ActionScript :

class mx.ControladorMovie
{ 
   private var loader_mcl:MovieClipLoader;
   private var movie_mc:MovieClip; 
   private var index_img:Number;
   private var matriz:Array;   
 
   function ControladorMovie( clip:MovieClip )
   {
      this.movie_mc = clip; 
      this.cont_img = 0;
      this.index_img = 0;
      this.loader_mcl = new MovieClipLoader();
      this.matriz = new Array();
      this.matriz.push({nombre:"armadillo", src:"selva/armadillo.png"});
      this.matriz.push({nombre:"chimpance", src:"selva/chimpance.png"});
      this.matriz.push({nombre:"cocodrilo", src:"selva/cocodrilo.png"});
      this.matriz.push({nombre:"guacamaya", src:"selva/guacamaya.png"});
      this.matriz.push({nombre:"jaguar"    , src:"selva/jaguar.png"});
      this.matriz.push({nombre:"leopardo"    , src:"selva/leopardo.png"});
      
      this.movie_mc.createEmptyMovieClip("index_mc", this.movie_mc.getNextHighestDepth());
      this.loadClip();
   }
    
   public function cargarmc( Void ):Void
   {
      //-- FUNCION OBSOLETA DEBES BORRARLA --//
   }
   
   private function loadClip( Void ):Void
   {
      this.loader_mcl.loadClip( this.matriz[ this.index_img ].src, this.movie_mc.index_mc );
   }

   public function clonar( Void ):Void
   {
      var nivel:Number = this.movie_mc.getNextHighestDepth();
      //Crear clip
      var aux:MovieClip = this.movie_mc.createEmptyMovieClip( "clon_" + nivel, nivel );
      this.loader_mcl.loadClip( this.matriz[ this.index_img ].src, aux);
      
      //Posicionar, NOTA: todos los clones estan sobrepuestos.
      aux._x = 300;

      //Eventos
      aux.onPress = function( Void )
      {
         this.swapDepths(this._parent.getNextHighestDepth());
         this.startDrag();         
         trace("StarDrag -> " + this);
      };      
      aux.onRelease = aux.onReleaseOutside = function( Void )
      {
         this.stopDrag(); 
         trace("StopDrag -> " + this);
      }
   }
    
   public function avanza( Void ):Void
   {
      if( this.index_img + 1 < this.matriz.length )
      {
         this.index_img++;
         this.loadClip();
      }
   } 

   public function atras( Void ):Void
   {
      if( this.index_img - 1 >= 0 )
      {
         this.index_img--;
         this.loadClip();
      }
   }
}


Aqui tus otros errores:

En el fotograma principal se usa asi:

Código ActionScript :

import mx.ControladorMovie; 
_global.c = new ControladorMovie( cargar_mc );
//OBSOLETA: c.cargarmc(cargar_mc); 

En el boton de clonar:

Código ActionScript :

on( press )
{ 
   _global.c.clonar();
}


En el boton siguiente:

Código ActionScript :

on (press)
{ 
   //OBSOLETO adelante_btn.onPress=c.avanza(); 
   _global.c.avanza();
}

En el boton atras:

Código ActionScript :

on (press)
{ 
   //OBSOLETO atras_btn.onPress=c.atras(); 
   _global.c.atras();
}


En realidad costo un poco de trabajo pero todo sea por el bien de ustedes. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 11:46 pm
Holaaaa de nuevo...
Ya use tu codigo muchas gracias por corregir el mio :P
ya no desaparecen las copias y estan ya estan al mismo nivel !!! :)
pero cada vez que doy click a la copia "x" esta se replica en vez de dejarse arrastrar :cry:

Por quit123

24 de clabLevel



 

msie
Citar            
MensajeEscrito el 17 Feb 2009 01:54 am
Hola, esta es la ultima version del script, mejorado para hacer fadein y fadeout a los botones

mx.ControladorMovie3


Código ActionScript :

import mx.transitions.Tween;

class mx.ControladorMovie3
{ 
   private var loader_mcl:MovieClipLoader;
   private var movie_mc:MovieClip;
   private var adelante_mc:MovieClip;
   private var atras_mc:MovieClip;
   private var index_img:Number;
   private var matriz:Array;   
 
   function ControladorMovie3( clip:MovieClip, adelante:MovieClip, atras:MovieClip )
   {
      this.movie_mc = clip; 
      this.index_img = 0;
      this.loader_mcl = new MovieClipLoader();
      this.matriz = new Array();
      this.matriz.push({nombre:"armadillo", src:"selva/armadillo.png"});
      this.matriz.push({nombre:"chimpance", src:"selva/chimpance.png"});
      this.matriz.push({nombre:"cocodrilo", src:"selva/cocodrilo.png"});
      this.matriz.push({nombre:"guacamaya", src:"selva/guacamaya.png"});
      this.matriz.push({nombre:"jaguar"    , src:"selva/jaguar.png"});
      this.matriz.push({nombre:"leopardo"    , src:"selva/leopardo.png"});
      
      //BOTONES
      this.adelante_mc = adelante;
      this.atras_mc = atras;
      this.adelante_mc.owner = this.atras_mc.owner = this;
      this.adelante_mc.onRelease = function( Void ):Void
      {
         this.owner.adelante();
      }
      this.atras_mc.onRelease = function( Void ):Void
      {
         this.owner.atras();
      }
      this.atras_mc._alpha = 0;
      this.atras_mc.enabled = false;
      
      this.movie_mc.createEmptyMovieClip("index_mc", this.movie_mc.getNextHighestDepth());
      this.movie_mc.index_mc.createEmptyMovieClip("load", 0);
      this.movie_mc.index_mc.owner = this;
      this.movie_mc.index_mc.onPress = function()
      {
         this.owner.clonar();
      }
      this.movie_mc.index_mc.onReleaseOutside = function()
      {
         //stopDrag();
      }
      this.loadClip();
   }
   
   private function loadClip( Void ):Void
   {
      this.loader_mcl.loadClip( this.matriz[ this.index_img ].src, this.movie_mc.index_mc.load );
   }

   public function clonar( Void ):Void
   {
      var nivel:Number = this.movie_mc.getNextHighestDepth();
      //Crear clip
      var aux:MovieClip = this.movie_mc.createEmptyMovieClip( "clon_" + nivel, nivel );
      aux.createEmptyMovieClip("load", 0);
      this.loader_mcl.loadClip( this.matriz[ this.index_img ].src, aux.load);
      
      //Eventos
      aux.onPress = function( Void )
      {
         this.swapDepths(this._parent.getNextHighestDepth());
         this.startDrag();         
      };   
      aux.onPress();
      aux.onRelease = aux.onReleaseOutside = function( Void )
      {
         this.stopDrag(); 
      }
   }
    
   public function adelante( Void ):Void
   {
      this.mover( +1 );
   } 

   public function atras( Void ):Void
   {
      this.mover( -1 );
   }
   
   private function mover( aux:Number ):Void
   {
      if( this.index_img + aux >= 0 && this.index_img + aux < this.matriz.length )
      {
         this.index_img += aux;
         this.loadClip();
         if( this.index_img == 0 && this.atras_mc.enabled )
         {
            this.atras_mc.enabled = false;
            new Tween(this.atras_mc, "_alpha", null, 100, 0, .5, true);
         }
         if( this.index_img > 0 && !this.atras_mc.enabled )
         {
            this.atras_mc.enabled = true;
            new Tween(this.atras_mc, "_alpha", null, 0, 100, .5, true);
         }
         if( this.index_img == (this.matriz.length - 1) && this.adelante_mc.enabled )
         {
            this.adelante_mc.enabled = false;
            new Tween(this.adelante_mc, "_alpha", null, 100, 0, .5, true);
         }
         if( this.index_img < (this.matriz.length - 1) && !this.adelante_mc.enabled )
         {
            this.adelante_mc.enabled = true;
            new Tween(this.adelante_mc, "_alpha", null, 0, 100, .5, true);
         }         
      }
   }
}


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox

 

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