Cristalab

Flash 8: La nueva clase Point

Por: Elecash + 19.09.2005

Mucho se está hablando de algunas de las nuevas clases que trae el nuevo Flash 8, sobretodo las de color, filtros o FileReference, para subir y bajar archivos de un servidor y poder monitorizarlo. Curiosamente, yo no había oído nada de la clase Point, la cual descubrí dándole un vistazo a la (siempre útil) ayuda de Flash.

Con Point podemos crear objetos que son puntos virtuales en nuestra pantalla y luego poder calcular distancias, equidistancias e interpolaciones (no de movimiento) entre éstos puntos. Veámos un ejemplo sencillo.



En este ejemplo vemos como dado un punto A y un punto B, podemos calcular la distancia entre ellos y además la distancia intermedia de ellos. Como podéis observar en el código con el método distance() calculamos la distancia entre A y B, y con el método interpolate la distancia entre los puntos A y B con C.

Código :

//Declaración e inicio ////////////////////////////////////
import flash.geom.Point;
var alMover:Object = new Object();

attachMovie("punto", "a_btn", 2);
attachMovie("punto", "b_btn", 3);
attachMovie("punto", "c_btn", 4);
a_btn._x = 90;
a_btn._y = 60;
b_btn._x = 170;
b_btn._y = 80;
crearLinea();

////////////////////////////////////////////////////////////////////
//Eventos de los botones
a_btn.onPress = function(){
   startDrag(this, false);
}
a_btn.onRelease = onReleaseOutside = function(){
   stopDrag();
}
b_btn.onPress = function(){
   startDrag(this, false);
}
b_btn.onRelease = onReleaseOutside = function(){
   stopDrag();
}

//Al mover el ratón creamos la línea entre los puntos
alMover.onMouseMove = function(){
   crearLinea();
}
Mouse.addListener(alMover);

//////////////////////////////////////////////////////////////////
//Función para crear la línea y calcular distancias
function crearLinea(){
   createEmptyMovieClip("linea_mc", 1);
   
   linea_mc.lineStyle(3, 0x000000, 100, true, "none", "round", "miter", 1);
   linea_mc.moveTo(a_btn._x, a_btn._y);
   linea_mc.lineTo(a_btn._x, a_btn._y);
   linea_mc.lineTo(b_btn._x, b_btn._y);
   
   //Ponemos la distancia entre puntos
   var punto_a:Point = new Point(a_btn._x, a_btn._y);
   var punto_b:Point = new Point(b_btn._x, b_btn._y);
   var distancia:Number = Point.distance(punto_a, punto_b);
   distancia_txt.text = redondear(distancia, 2);
   
   //Punto intermedio
   var intermedio:Point = Point.interpolate(punto_a, punto_b, 0.5);
   c_btn._x = intermedio.x;
   c_btn._y = intermedio.y;
}

//Función para redondear números
function redondear(n, dig){
   mult = "1";
   for (i=0; i<dig; i++){
      mult += "0";
   }
   tempn = n * mult;
   tempn = Math.round(tempn);
   n = tempn / mult;
   
   return n;
}


Gracias a esta nueva clase tenemos una perfecta ayuda para hacer menús dinámicos, juegos o cualquier otra cosa que requiera cálculo de posiciones, que son muchas.

Un saludo!! miau

Etiquetas actionscript flash

Comentarios | Enviar un comentario
Pues habria que ver que es mas pesado para el procesador, si el calculo de la hipotenusa en la ecuación de distancia o la creación del objeto y llamada de sus funciones.
Aunque supongo que su ventaja radica precisamente en estar escrita dentro del Player y no en Actionscript, como lo haria uno mismo creando su propia "clase Point", lo que puede hacer el codigo mas eficiente.

Lo que si es indudable es la simplificación del codigo
Por: Freddie
Vaya, pues si que es útil. Uno nunca se cansa de aprender flash. Ahora podré hacer mejoras en algún juego... en fin, ÚTIL. Y gracias:)
Por: Zah
Muy buen dato amigo eleca$h ...

Freddie® :

....Aunque supongo que su ventaja radica precisamente en estar escrita dentro del Player y no en Actionscript...


Como es eso Freddie?... como puedes deducir eso?... Muy Feliz...
Por: xRoa©
Es sencillo Erik©; si abres la carpeta

Código :

C:\Archivos de programa\Macromedia\Flash 8\en\First Run\Classes\FP8\flash\geom

Y ahi miras el archivo Point.as, veras que es una interface con las variables declaradas, pero sin implementar ninguna función, por lo que es faculmente deducible que esta programada en C++ e implementada dentro del Player, haciendo mucho mas veloz de ejecutar
Por: Freddie
CARAJO!!! y yo ke me estaba empezando a quemar los sesos con esto :: Aw Crap

www.glsweb.com/vector.zip

mmmm

No pues ahora un poco más sencillo ... miau
Aunque ya me quitaron lo ke a lo mejor sería mi primer tutoral Triste
Por: glsmaster_blog
elecash, coge fuerzas, porque ya sabes neng que te va a tocar hacer una nueva serie de tutos... je je... que la fuerza te acompañe... te debo un cromo de Ronaldinho...
Por: Sisco
Que yo sepa las clases de geometria de Flash, aunque estan efectivamente en el Player, como dice Freddie, estan escritas en AS, por lo que no notareis diferencia, en cuanto a performancem, a hacerlas vosotros mismos. Me imagino que sera un calculo de hipotenusa, como comentan por ahi...

Lo bueno es que si en Flash 9 deciden hacerlas nativas, todo nuestro codigo se beneficiaria de ello sin necesidad de reescribirlo, esto no ocurriria así si crearamos nuestra propia clase Point. Pasó lo mismo con el objeto XML cuando pasó de Flash 5 a Flash 6.
Por: Joseba_blog

Joseba_blog :

Pasó lo mismo con el objeto XML cuando pasó de Flash 5 a Flash 6.

Ese era precisamente mi punto
Por: Freddie
Gracias F... Riendo. .. siempre hay algo nuevo que aprender .. .

salu2

por sierto.. que paso con el post del keygen y el crack eh?... se calentaron las aguas Muy Feliz
Por: xRoa©
Hola a todos sé que no tengo que preguntar aquí, pero alguien sabe como quitarle al Dreamweaver 8.0 lo de la compactación del código? me molesta eso!

Gracias de antemano.
Por: PeterTheLuis_blog
Gracias ya lo encontre! Muy Feliz
Por: PeterTheLuis_blog
solo quiero hacer una opcion donde se pueda crear una linea simple como en point
Por: lucas_mack_blog
si alguien me puede ayudar porfavor
Por: lucas_mack_blog
lucas_mack, las preguntas técnicas en los foros por favor.



Guiño
Por: La100rra
Añado al tema el ejemplo de una función muy simple que aplica Point.polar para crear polígonos:

Código :

import flash.geom.Point;
function poligono(l, pt, r, t){
//t=0 o sin pasar: l lados, centro en Po y radio circunscrita r
//t=1 : l lados de longitud r y 1er vertice en Po
  this.moveTo(pt.x+r, pt.y); rd = 2*Math.PI;
  for(b=0; b <= rd; b += rd/l){
    pt2 = pt.add(Point.polar(r,b)); if (t) pt = pt2;
   this.lineTo(pt2.x, pt2.y);
  }
}
// formas de llamada: (con la clase Point ya importada)
this.lineStyle(4,0xff0000); poligono(4,new Point(100,100),80,1);
this.lineStyle(3,0xff00); Pe = new Point(100,100); poligono(6,Pe,50,0);
this.lineStyle(2,0xff); poligono(8,new Point(100,100),60,1);
this.lineStyle(0); poligono(360,Pe,70);//circulo

También es extensible a estrellas, engranajes y espirales...
Ejemplo : si b<= 2*rd en el bucle y el número de lados pedido es 2.5 .....el pentagrama. Es sencillo de entender: dos vueltas dibujando dos lados y medio,
Por: Teseo
quiero aprender animar en flash 8 omarch19@hotmail.com
Por: omar_blog
cuando hay un codigo en version 6 y lo paso a version 8...me arroja un error...como hago para que el codigo de la vrs 6 me corra en vrs 8
asalamna68@hotmail.com
Por: Amin_blog
Qué código tratas de implementar en Flash 8?
Por: Yaraher
point yo digo es de pintar son preguntas de eso polk esq ami me sale
otras cosas
Por: stefany_blog
gracias por este articulo.
Por: MaBoRaK
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.