Comunidad de diseño web y desarrollo en internet online

Cambiar punto de registro a uiloader componente flash

Citar            
MensajeEscrito el 21 Abr 2009 05:15 pm
hola a todos,
necesito cambiar el punto de registro a un uiloader. para escalarlo mediante un boton, el problema es que me escala desde la esquina superior izquierda, y quiero que me escale desde el centro, las respuestas que he obtemido no me an podido ayudar, agredeceria mucho a la persona que pueda darme una mano

adjunto el codigo de mi animacion

Código :

import fl.containers.UILoader;
import fl.controls.*;
import fl.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import fl.data.DataProvider;

var list:TileList=new TileList();
list.setSize(135,412);
list.move(10,80);
list.rowHeight=120;
list.columnWidth=100;
//list.direction=ScrollBarDirection.VERTICAL;
list.sourceField="ruta";
addChild(list);

//Cargar XML
var xml:XML;
var url:URLRequest = new URLRequest("../flash/docu.xml");
var loader:URLLoader=new URLLoader();
loader.load(url);
// Eventos
function Completar(event){
   var xml:XML = new XML(loader.data);
   var dp:DataProvider= new DataProvider(xml);
   list.dataProvider = dp;
}
loader.addEventListener(Event.COMPLETE, Completar);
function Alcambiar(event)
{
   ui.source=list.selectedItem.ruta;
}
list.addEventListener(Event.CHANGE, Alcambiar);


//botonera derecha

bt1.addEventListener(MouseEvent.CLICK, agranda) 
function agranda(evt:MouseEvent):void{ 
  ui.scaleX+=.1 
  ui.scaleY+=.1  
}

bt2.addEventListener(MouseEvent.CLICK, zoomout) 
function zoomout(evt:MouseEvent):void{  
  ui.scaleX-=.10 
  ui.scaleY-=.10
}

bt3.addEventListener(MouseEvent.CLICK, giro1) 
function giro1(evt:MouseEvent):void{  
  ui.rotation+=90 
}

bt4.addEventListener(MouseEvent.CLICK, giro2) 
function giro2(evt:MouseEvent):void{  
  ui.rotation-=90 
}
up.addEventListener(MouseEvent.CLICK, arriba) 
function arriba(evt:MouseEvent):void{  
 ui.y -=20; 
}
down.addEventListener(MouseEvent.CLICK, abajo) 
function abajo(evt:MouseEvent):void{  
 ui.y +=20; 
}
right.addEventListener(MouseEvent.CLICK, derecha) 
function derecha(evt:MouseEvent):void{  
 ui.x +=20; 
}
left.addEventListener(MouseEvent.CLICK, izquierda) 
function izquierda(evt:MouseEvent):void{  
 ui.x -=20; 
}

prev1.addEventListener(MouseEvent.CLICK, zoom2) 
function zoom2(evt:MouseEvent):void{  
list.rowHeight+=10;
list.columnWidth+=10;
}
prev2.addEventListener(MouseEvent.CLICK, zoom3) 
function zoom3(evt:MouseEvent):void{  
list.rowHeight-=10;
list.columnWidth-=10;
}
//impre.addEventListener(MouseEvent.CLICK, imprimir) 
//function imprimir(evt:MouseEvent):void{  

//}

ui.addEventListener(MouseEvent.MOUSE_DOWN,onMouse_Down);
ui.addEventListener(MouseEvent.MOUSE_UP,onMouse_Up); 
function onMouse_Down(e:Event):void{
ui.startDrag()
}
function onMouse_Up(e:Event):void{
ui.stopDrag();
}
//impresion
impre.addEventListener(MouseEvent.MOUSE_DOWN,imprimir);
function imprimir(evt:MouseEvent):void{ 
var pj:PrintJob = new PrintJob();
pj.start();
pj.addPage(ui);
pj.send();
//pj.pageHeight(100);
}


ui.mask= mascara



Muchas graciasssssssssss

Por luisca85

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Abr 2009 05:30 pm
Luego de escalarlo, lo mueves la mitad de alto y la mitad de ancho hacia arriba y a la izquierda, quedará centrado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Abr 2009 09:28 pm
,, soy un poco lento con esto,, mira, arregle el codigo anterior, y ahor tengo el uloader cargado dinamicamente asi

// Crear el visualizador
var ui:UILoader=new UILoader();
ui.scaleContent=true;
ui.setSize(550,560);
ui.move(250,100);
addChild(ui);

pero al escalarlo lo hace desde la esquina superior derecha, quiero que escale desde el centro,, como esposible??

Por luisca85

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Abr 2009 10:45 am

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Abr 2009 07:50 am
Jorge, en AS.3 SÍ SE PUEDE cambiar el punto de registro. Se hace mediante la propiedad transform.matrix, más o menos como se muestra en este post
Ahora el "punto" es hacer un escaladado porque deberíamos cambiar el punto de registro cada vez

Así que es mejor directamente usar la matriz transform

Hago un ejemplo sencillo

Código ActionScript :

package
{
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.ProgressEvent;
    import flash.net.URLRequest;
    import fl.containers.UILoader;
    import flash.text.TextField;
    import flash.geom.Matrix;


    public class Main extends Sprite
    {
        private var sampleImagePath:String = "test.jpg";
      private var uiLoader:UILoader = new UILoader();
      private var ancho:Number;
      private var alto:Number;
      private var scale:Number;
                public function Main() {
      uiLoader.move(250, 100);
      addChild(uiLoader)
                var request:URLRequest = new URLRequest(sampleImagePath);
                uiLoader.scaleContent = false;
                uiLoader.addEventListener(Event.COMPLETE,loadComplete);
      addEventListener(MouseEvent.MOUSE_DOWN, scaleMore);
                uiLoader.load(request);
        }
        private function loadComplete(e:Event):void {
               //guardamos en las variables ancho, alto yscale los valores iniciales
            ancho= uiLoader.content.width;
          alto = uiLoader.content.height;
          scale=1
               //calculamos la matriz
      var matrix:Matrix = new Matrix(scale, 0, 0, scale, -ancho*scale / 2, -alto*scale / 2); 
               //le decimos que la propiedad transform.matrix de nuestro MC es esa matriz 
               uiLoader.content.transform.matrix = matrix; 
        }
   private function scaleMore(e:Event) {
      scale += .5;
      var matrix:Matrix = new Matrix(scale, 0, 0, scale, -ancho*scale / 2, -alto*scale / 2); 
                uiLoader.content.transform.matrix = matrix; 
   }
   }
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Abr 2009 11:12 am
Escalarlo, moverlo, mover el contenedor, aplicar un matrix transformation o lo que quieras es acomodar el contenido a un punto de registro arbitrario, ninguna de esas técnicas quita que no haya una propiedad Sprite.registerPoint o similar que se pueda modificar para ahorrarnos tanta matemática a la hora de acomodar contenido

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Abr 2009 06:29 am
Jorge, si tenemos un MC llamado "mc" escribiendo

Código ActionScript :

ancho=mc.width
alto=mc.height
var matrix:Matrix = new Matrix(1, 0, 0, 1, -ancho/2,-alto/2); 
//le decimos que la propiedad transform.matrix de nuestro MC es esa matriz 
mc.transform.matrix = matrix; 

Si hacemos un

Código ActionScript :

mc.rotation=45  //rotará sobre su centro
mc.x=100 //el centro del MC queda a 100 pixels del borde izquierdo
mc.width=500  //cambiará las dimensiones expandiendo tanto a derecha o a izquierda

En ese sentido Sí es "cambiar el punto de registro" (los valores son referidos al MC, no a la película principal)
El problema que tenemos es que, cuando hacemos un cambio de escala o cambiamos las dimensiones, ese punto de registro NO cambia. (si por ejemplo nuestro MC midiera en un principio 100x100, el punto de registo quedaría en (50,50) aunque cambiemos la escala o el alto o el ancho. Ese es el motivo por el que, si queremos hacer una transformación de escala, tendremos que cambiar el punto de registro con cada cambio.
Para el problema de Luisca, elegí, en lugar de jugar, tanto con la matriz de transformación como con la escala, usar sólo la matriz de transformación.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Abr 2009 06:55 pm
muchas gracias todos por su interes, les comentare mis resultados

Por luisca85

26 de clabLevel



 

firefox

 

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