Comunidad de diseño web y desarrollo en internet online

random rotation movement

Citar            
MensajeEscrito el 27 May 2009 05:45 am
Hola mundo, :D

Estoy haciendo una animación para un movimiento aleatorio (el cual ya conseguí) pero no logro k mi objeto rote por así decirlo utilice esta previa programación pero no hace nada en lo absoluto pero igual no me marca error alguno.
-----
cuca1.addEventListener(Event.ENTER_FRAME, cuca1move);

function cuca1move(e:Event):void{
var cuca1:Object = e.target;

this.cuca1move = Math.random() * 10 - 5;
this.rotation += this.cuca1move;
}
----

Gracias por algún tip :wink:

Por Dentouteki

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2009 07:26 am
Para que algo "rote" debe ser de la Clase DisplayObject (o de cualquier clase que extienda de ella, BitMap, Shape, MovieClip....) pero no puede ser un simple Objeto

Además, "this" se refiere a la propia película, cuando tú lo que quieres mover es "cuca1"

Con todos esos cambios, debemos escribir

Código ActionScript :

function cuca1move(e:Event):void{
   var cuca1:MovieClip= e.target as MovieClip;  //(*)
   cuca1.cuca1move = Math.random() * 10 - 5;
   cuca1.rotation += cuca1.cuca1move;
}

Por cierto, "cuca1" supongo que es el nombre de instancia de un MC. En general NO es bueno tener un nombre de variable igual que un nombre de instancia así pues yo le cabiaría el nombre de la variable

Código ActionScript :

function cuca1move(e:Event):void{
   var cuca:MovieClip= e.target as MovieClip;  //(*)
   cuca.cucamove = Math.random() * 10 - 5;
   cuca.rotation += cuca.cucamove;
}


(*)Cuando añadimos un Listener con addEventListener le indicamos una función que es lo que se realiza. Esta función siempre tiene como argumento una variable de tipo Event (o de MouseEvent). Así que la función DESCONOCE en absoluto nada. Sólo podemos usar dentro de la función, o propiedades de la vriable tipo Event, o variables que hallamos definido a nivel de Clase (vamos, fuera de cualquier función)

Las variables del tipo Event tienen una importante propiedad "target" (también tienen "currentTarget", dejo la explicación para otro post), que se refiere al MC, Botón, Shape, etc al que se ha añadido el evento. Lamentablemente, Flash desconoce de qué tipo es "e.target". Por defecto el supone que, simplemente es un Objeto, así que si es "algo más", se lo tenemos que indicar nosotros. Generalmente eso se hace mediante una variable usando "as" o una conversión de cast.

Código ActionScript :

function onEvento(e:Event){
   //definimos una variable que va a recoger el Target y le decimos que es de tipo MovieClip
   var mc:MovieClip=e.target as MovieClip
   //También se podría haber escrito
   var mc:MovieClip=MovieClip(e.target)

   //Ya, en lugar de "e.target", podemos usar "mc"
}

Vale, he puesto que es un MovieClip, igual podríamos haber puesto que es un DisplayObject, todo depende de lo que realmente sea y de qué propiedades o métodos necesitemos.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2009 03:21 am
Gracias Eliseo2 :D

Ya conseguí que rotara mi cuca, pero rota de una manera muy extraña mira, así aplique el as3 con relacion al otro as3 que tenia previamente


-----
cuca1.x = Math.random() * stage.stageWidth;
cuca1.y = Math.random() * stage.stageHeight;

for(var i:uint=0;i<20;i++) {
//era 1 en lugar de 20
cuca1.vx = Math.random() * i +20;
cuca1.vy = Math.random() * i +20;

}

cuca1.addEventListener(Event.ENTER_FRAME, cuca1move);


var dampen:Number = 0.95;

function cuca1move(e:Event):void{

//para rotar
var cuca:MovieClip= e.target as MovieClip; //(*)
cuca.cucamove = Math.random() * 10 - 5;
cuca.rotation += cuca.cucamove;



cuca1.vx += Math.random() * 0.2 - 0.1;
cuca1.vy += Math.random() * 0.2 - 0.1;

cuca1.x += cuca1.vx;
cuca1.y += cuca1.vy;

cuca1.vx *= dampen;
cuca1.vy *= dampen;


if(cuca1.x > stage.stageWidth) {
cuca1.x = 0 - cuca1.width;
}
else if(cuca1.x < 0 - cuca1.width) {
cuca1.x = stage.stageWidth;
}
if(cuca1.y > stage.stageHeight) {
cuca1.y = 0 - cuca1.height;
}
else if(cuca1.y < 0 - cuca1.height) {
cuca1.y = stage.stageHeight;
}



}

--------


alguna sugerencia??? o es que algo estoy haciendo mal?

Por Dentouteki

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2009 06:20 am
supongo que lo que te resulta extraño es que "rota" desde la esquina superior izquierda. Se puede cambiar el "punto de registro" tal y como se dice en este post

Por Eliseo2

710 de clabLevel



 

firefox

 

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