Comunidad de diseño web y desarrollo en internet online

Lograr que movieclip cargado externamente gire sobre su eje

Citar            
MensajeEscrito el 03 Feb 2016 12:29 pm
No he podido lograr que un movieclip cargado externamente pueda desplazarse con el ratón y mediante un botón gire sobre su eje los grados indicados. Alguien puede ayudarme? Sólo funciona bien si el movi lo coloco en la película principal, el problema es el peso.Gracias

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Feb 2016 01:20 pm
El código no cambia, si lo aplicas al contenedor (y cargas la gráfica en el contenedor) no debería afectar, cuentanos como lo tienes estructurado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2016 05:22 pm
La estructura es la que muestro abajo, a ver si vale, si no puedo mostrar el flash y lo que deseo obtener:
.
.

Código ActionScript :

//-------------------------------------------------------
var precarga:MovieClipLoader = new MovieClipLoader();
precarga.addListener(this);
function onLoadStart(clip:MovieClip)
{
   clip._visible = false;
   clip.stop();
}
function onLoadProgress(clip:MovieClip, bytesLoaded:Number, bytesTotal:Number)
{
   porcentaje = Math.round(bytesLoaded / bytesTotal * 100);
   porcentajeTotal = Math.round(porcentaje / list_swfs.length + 100 / list_swfs.length * cargando);
   preload.gotoAndStop(porcentajeTotal);
   preload.cargando.text = "Loading: " + list_nombres[cargando];
}

function onLoadInit(clip:MovieClip)
{
   cargando++;
   cargaMultiple();

// Mover muestra 

var dragging=false;

mc_imagen.onMouseDown=function(){
      dragging=true;
      
}

mc_imagen.onMouseMove=function(){
   
   if(dragging){
      
      mc_imagen._x=_xmouse;
      mc_imagen._y=_ymouse;
      
      vx.text="X:"+ mc_imagen._x;
      vy.text="Y:"+ mc_imagen._y;
      }
}
   
mc_imagen.onMouseUp=function(){
      dragging=false;
}

//GIROS DE 5º EN EL SENTIDO CONTRARIO AL DE LAS AGUJAS DEL RELOJ (0 a 360º) DEL MOVI mc_imagen 

giraplatinai.onRelease=function()
{
   numerogiro = numerogiro+1;
   
   mc_platina._rotation = mc_platina._rotation-5;
   miTexto.text = -mc_platina._rotation+"º";
   giro = 0+(-mc_platina._rotation);
   
   if (-mc_platina._rotation < 0){
   miTexto.text = -mc_platina._rotation+360+"º";
   giro = -mc_platina._rotation+360;
   }
   
// analizador quitado
   if (analizador._visible == true and anal == false){ 
      if (giro > 0 ) {
         cuentagiro = cuentagiro+1;
         giraplatinad._visible = true;
      }
   }
   if (analizador._visible == true and anal == false){
      grados = grados+1;
      if (giro > 0 and giro <= 90) {
         mc_imagen._currentframe = mc_imagen.nextFrame();
      }
if (giro > 90 and giro <= 180) {
   mc_imagen._currentframe = mc_imagen.prevFrame();
   mc_imagen._rotation = mc_imagen._rotation+10;
}
if (giro > 180 and giro <= 270) {
      mc_imagen._currentframe = mc_imagen.nextFrame();
}
      if (giro > 270 and giro <= 355) {
         mc_imagen._currentframe = mc_imagen.prevFrame();
         mc_imagen._rotation = mc_imagen._rotation+10;
      }
if (giro == 0 or giro == 360 and grados == 0) {
   mc_imagen.gotoAndStop(1);
   mc_imagen._currentframe = mc_imagen._currentframe;
   giraplatinad._visible = false;
}
if (giro == 0 or giro == 360) {
   mc_imagen.gotoAndStop(1);
   mc_imagen._currentframe = mc_imagen._currentframe;
   giraplatinad._visible = false;
      }
   }
   // analizador puesto
   if (sinanalizador._visible == true and anal == true){ 
      
      if (giro > 0 ) {
         cuentagiro = cuentagiro+1;
         giraplatinad._visible = true;
      }
   }
   
   if (sinanalizador._visible == true and anal == true){
      
      if (giro == 0) {
         mc_imagen.gotoAndPlay(20);
      }
      
      if (giro > 0 and giro <= 90) {
         mc_imagen._currentframe = mc_imagen.nextFrame();
         
      }
      if (giro > 90 and giro <= 180) {
         mc_imagen._currentframe = mc_imagen.prevFrame();
         mc_imagen._rotation = mc_imagen._rotation+10;
         
      }
      if (giro > 180 and giro <= 270) {
         mc_imagen._currentframe = mc_imagen.nextFrame();
         
      }
      if (giro > 270 and giro <= 355) {
         mc_imagen._currentframe = mc_imagen.prevFrame();
         mc_imagen._rotation = mc_imagen._rotation+10;
         
      }
         
      if (giro == 0 or giro > 360-(360/72)) {
         mc_imagen.gotoAndStop(20);
         mc_imagen._currentframe = mc_imagen._currentframe;
         
         giraplatinad._visible = false;
      }
   }
}
}

//--------------------------
function cargaMultiple(queX:Number, queY:Number)
{
   if (!cargando) {
      cargando = 0;
      this.attachMovie("preload", "preload", this.getNextHighestDepth());
      preload._x = queX;
      preload._y = queY;
   }
   if (cargando < list_swfs.length) {
      precarga.loadClip(list_swfs[cargando], list_contenedor[cargando]);
   } else {
      for (i = 0; i < list_swfs.length; i++) {
         this[list_contenedor[i]]._visible = true;
         this[list_contenedor[i]].play();
      }
      removeMovieClip(preload);
   }
}
//--------------------------
var list_swfs:Array = ["arsenopirita_normal.swf", "arsenopirita_des_der.swf", "arsenopirita_des_iz.swf"];//
var list_contenedor:Array = ["mc_imagen", "mc_imagen_der", "mc_imagen_iz"];//
var list_nombres:Array = ["arsenopirita", "arsenopirita_des_der", "arsenopirita_des_iz"];//
cargaMultiple(200, 150);
//--------------------------

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Feb 2016 02:59 pm
Es un poco largo, pero estoy viendo que tenes un multicarga en donde encolas las distintas cargas. Si esperas a que cargue todo y le das a giraplatinai, aplica rotacion y otras cosas a mc_imagen ... si el contenido esta cargado tiene que poder hacerse.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 Feb 2016 05:54 pm
Sí, se carga todo pero no funciona el arrastre ni gira al dar a griraplatinai. A decir verdad, arrastra, pero no lo hace como cabría esperar y también gira, pero no como lo debería hacer. Con los movies colocados directamente en la película principal funciona todo correctamente, pero el movi pesa y quería reducir el peso cargándolos con preload, pero....no funciona bien una parte esencial como es la del giro.

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Feb 2016 09:06 pm
Describe como debería girar, y como es que esta girando para entender lo de "no lo hace como cabría esperar"

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Feb 2016 06:58 pm
Gira bien pero tomando la esquina superior izquierda como punto de giro y si cambio poniendo anchura y altura a la mitad para que el punto de giro eté en el centro no va, tampoco va lo del desplazamiento de movie como debería.

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Feb 2016 07:24 pm
Ok, entonces seguramente tienes el punto de anclaje en el centro de la figura, y cuando carga externamente se mueve al extremo superior izquierda, afectando cualquier movimiento. Hay varias soluciones,

1. Lo mas simple es que modifiques la animaci'on de lo que cargas modificando el punto de anclaje a la esquina superior izquierda para que simule como va a ser cuando sea cargado. Esto implica modificar todo lo que se carga, laborioso pero simple
2. Carga la peli sobre otra que tenga el desfasaje adecuado, eso har'a que rotación y animación se apliquen sobre el "contenedor del contenedor"
3. Usa el Matrix para girarlo con esta fórmula ... aunque eso no solucionará la animación

Código ActionScript :

function rotateAroundCenter (ob:*, angleDegrees) {
    var m:Matrix=ob.transform.matrix;
    m.tx -= point.x;
    m.ty -= point.y;
    m.rotate (angleDegrees*(Math.PI/180));
    m.tx += point.x;
    m.ty += point.y;
    ob.transform.matrix=m;
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Feb 2016 08:38 am
En relación al punto 2 de tu respuesta:
Tengo un contenedor y la peli se carga en él con preload. Tú sugieres como posibilidad crear otro contenedor con el desfase adecuado. Ese contenedor lo tengo que generar después del anterior y antes de la precarga no?

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Feb 2016 01:40 pm
Primero el contenedor externo
Segundo el contenedor que va a cargar la peli, ubicado en 50,50, o 100,100 de su contenedor principal, cualquiera sea el desfase que buscas, posiblemente tengas que hacer unas cuantas pruebas hasta encontrar el desfase que necesitas
Tercero inicias la carga externa

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Feb 2016 12:04 pm
Vale, voy a hacer alguna prueba a ver como resulta

Por cmarcos

46 de clabLevel



 

safari
Citar            
MensajeEscrito el 17 Feb 2016 04:50 pm
Bueno hice pruebas pero no consigo que el movi gire desde otro punto que no sea el superior izquierdo. Te adjunto el ejemplo que he probado:

Código ActionScript :

var my_mc:MovieClipLoader = new MovieClipLoader();
var mcListener:Object = new Object();
createEmptyMovieClip("foto_mc",getNextHighestDepth());
foto_mc.createEmptyMovieClip("mc",getNextHighestDepth());
my_mc.addListener(mcListener);
my_mc.loadClip("foto.jpg",foto_mc.mc);
 
mcListener.onLoadInit = function(mc:MovieClip):Void
{
   mc.forceSmoothing = true;
   mc._x = 100;
   mc._y = 100;
   
        //Desde aquí accedemos a las propiedades y métodos de foto_mc
      foto_mc.onPress = function() {
         mc._rotation = mc._rotation+5//
         foto_mc.startDrag();
      };
      foto_mc.onRelease = function() {
         foto_mc.stopDrag();
      };
};

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2016 01:05 am
Estas rotando el contenido, mc, cuando en realidad lo que tienes que rotar es el contenedor, foto_mc

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Feb 2016 09:28 am
Con el script que te he enviado si pongo como me dices, entonces el drag no funciona y la rotación la hace de 5º pero mueve el movi de forma muy excéntrica, sin ningún centro.

Como los movies contenedores se generan con action script, automáticamente colocan el centro en la esquina superior izquierda, sería posible poner el punto de anclaje en otro lugar desde action script2?

Gracias por tus respuestas

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2016 01:37 pm
Ok, iríamos para largo, así que aquí va un proof de concept para que estudies y luego apliques

1. busca un jpg cualquiera de unos 200 x 150 para que quepa bien en una peli de flash con tamaño de 550x400, renómbralo a 'image.jpg'
2. Crea una peli de flash con el tamaño por defecto y guárdala en la misma carpeta dodne tienes el jpg que creaste anteriormente
3. Copia y pega este código en el primer frame

Código ActionScript :

//contenedor que va a girar
var contenedor:MovieClip = this.createEmptyMovieClip('contenedor', 1);
contenedor._x = 275
contenedor._y = 200;
//MC donde vamos a cargar la imagen
var contenido:MovieClip = contenedor.createEmptyMovieClip('contenido', 1);

contenido.loadMovie("image.jpg");
//pequeño preload para luego hacer el offset
this.onEnterFrame = function(){
   var partial:Number = contenedor.contenido.getBytesLoaded();
   var total:Number = contenedor.contenido.getBytesTotal();
   if(partial>=total && partial>4){
                //hacemos el offset de la imagen para que gire desde el medio
      contenedor.contenido._x -=contenedor.contenido._width/2;
      contenedor.contenido._y -=contenedor.contenido._height/2;
      delete this.onEnterFrame
      gira(contenedor); //inicia giro
   }   
}
function gira(quien){
   quien.onEnterFrame = function(){
      this._rotation+=5
   }
}


Verás que la imagen cargada gira desde el centro. Ahora si modificas esta línea

gira(contenedor);
a
gira(contenedor.contenido);

Verás como gira desde un extremo, que es el comportamiento por defecto.
Mira un poco el código, luego aplícalo a tu peli. ... y considera pasarte a AS3, el scope en AS2 es muy tricky

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Feb 2016 05:57 pm
Vale. Qué necesito para pasar a AS3?

Por cmarcos

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2016 06:51 pm
Lo digo como una sugerencia en general, ahora mismo, aplica lo que te digo para resolver tu problema
Para empezar con AS3 .... pues estudiándolo;

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Feb 2016 09:05 pm
Ya hombre...., en relación a as3, si se requiere un flash con versión determinada.....
Gracias

Por cmarcos

46 de clabLevel



 

msie
Citar            
MensajeEscrito el 18 Feb 2016 09:08 pm
Bien, funciona. Ahora probaré con un moví que consta de varias imágenes. Ya te contaré.
Saludos

Por cmarcos

46 de clabLevel



 

msie
Citar            
MensajeEscrito el 19 Feb 2016 06:18 pm
Bien, he hecho pruebas y en lugar de cargar una imagen cargo una película la cual, a la vez que gira 5º cada vez que presiono un botón, muestra una imagen jpg. No me funciona. Creo que estoy como al principio de este tema.
siento que debería poder lograrlo sin recurrir a incluir esa película que quiero cargar externamente para reducir peso.

Por cmarcos

46 de clabLevel



 

firefox

 

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