Comunidad de diseño web y desarrollo en internet online

rotacion de un sprite

Citar            
MensajeEscrito el 17 Mar 2010 11:38 am
Buenos días, tenia un problemilla con unos Sprites y a ver si alguien puede echarme una mano.

El caso es que creo un circulo y lo incluyo en un canvas. Pero a la hora de crear esta instancia tambien quiero crear circulos alrededor de central tantos como se indiquen (abría que dividir los que se quieren insertar entre 360 para saber cada cuantos grados insertar y luego pasarlo a radianes) el tema es que cuando roto, el sprite me rota tomando el centro del canvas no su propio centro.

la verdad es que estoy un poco perdido, pq en si lo q quiero es crear un circulo central y luego conforme a un parametro numerico, tantos circulos pequeños como este indique.... y no me sale :cry: :roll:

Muchas gracias, un saludo ^^

Por sintahimura

45 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Mar 2010 02:23 pm
Un Sprite, tal y como dices siempre rotará respecto a su centro que está en la esquina superior izquierda, pero nada nos impide "dibujar" fuera.
Vamos, el método drawCircle le puedes decir cuál es el centro. si escribimos

Código ActionScript :

var sp:Sprite = new Sprite();
sp.graphics.beginFill(0xFFAAAA);
sp.drawCircle(0,0,20)

Nos hará un círculo de radio 10 cuyo centro es 0,0, vamos, la esquina superior izquierda de nuestro Sprite, luego lo podremos rotar tranquilamente.
¿cuál es la posición del centro de nuestros otros "círculos"
Pues será,
la x: (RADIO+radio)*Math.cos(angulo_rad)
la y: (RADIO+radio)*Math.sin(angulo_rad)
siendo "RADIO" al radio del círculo central y "radio" el radio del círculo menor
para convertir los ángulos en radianes
angulo_rad=angulo_grad*Math.PI/180

NOTA:Usa un bucle del tipo

Código ActionScript :

for (var:angulo_grad=0;angulo_grad<160;angulo_grad+=inc_grad){
   ...el dibujo de tus "circulitos"...
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Mar 2010 03:17 pm
Una vez más muchas gracias Eliseo2 lo hice como me dijiste y me salio, aunque aun tengo un problemilla. Con lo que dije de que me aparecen con el 0, 0 en la esquina superior izquierda del canvas. y querria que la posición del sprite fuera, dentro del cambas, la que yo especificara.

Al crear un nuevo Sprite este aparece con su 0, 0 en la esquina superior iquierda quedando fuera del canvas 3/4 partes. Y otro problema es que aun que lo meto en el canvas se ven por encima, es decir, puedo moverlos por toda la aplicación... es un poco raro.


Un saludo, y gracias.

Por sintahimura

45 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Mar 2010 03:41 pm
Vaya, tras probar un buen rato, resulta que si le digo que el número de sillas sea 7 la silla 7 aparece como con un agujero. Solo se le pintan los borces (es como si fueran dos un poco separadas y la zona de interseccion fuera transparente), solo me falla con 7 ningun otro numero que haya visto y he probado unos cuantos.....

no tengo ni idea de porque será.

Por sintahimura

45 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Mar 2010 03:43 pm
Vale, otra cosa, me dado cuenta de que no inserta más de diez sillas...

Por sintahimura

45 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Mar 2010 04:05 pm
Depende del tamaño de las mesas y del tamaño de las sillas "cabrán" o no
Por otra parte es distinto la posición del sprite que cómo los dibujemos.
Vale, imagino que tienes una Clase Circulos

Código ActionScript :

package  
{
   import flash.display.Sprite;
   public class Circulos extends Sprite 
   {
      private var _radio:int;
      private var _RADIO:int;
      private var _num_sillas:int;
      public function Circulos(radio:int=5,RADIO:int=40,num_sillas:int=10) 
      {
         _radio = radio;
         _RADIO = RADIO;
         _num_sillas = num_sillas;
         graphics.beginFill(0xAAAA00);
         graphics.drawCircle(0, 0, _RADIO);
         var inc:Number = 360 / num_sillas;
         for (var angulo:Number = 0; angulo < 360; angulo += inc) {
            graphics.drawCircle((_radio + _RADIO) * Math.cos(angulo * Math.PI / 180), (_radio + _RADIO) * Math.sin(angulo * Math.PI / 180), _radio);
         }
      }
   }
}

Tu película principal sería algo como

Código ActionScript :

//creamos las mesas
   var mesa1:Circulos = new Circulos(15, 40, 6);
   var mesa2:Circulos = new Circulos(15, 40, 7);
   var mesa3:Circulos = new Circulos(15, 40, 10);
//Les damos una posición
   mesa1.x = 80;mesa1.y = 100
   mesa2.x = 280;mesa2.y = 100
   mesa3.x = 80;mesa3.y = 380
//Las añadimos al stage
   addChild(mesa1);
   addChild(mesa2);
   addChild(mesa3);

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Mar 2010 04:09 pm
Observa que, en el bucle "angulo" es un Numer (no un int). Si en el ejemplo hago una mesa como

Código ActionScript :

var mesa4:Circulos = new Circulos(15, 40, 20); 

Se verán "confundidas" las sillas

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Mar 2010 04:30 pm
:) Ahora sí!! Muchas gracias.

Por sintahimura

45 de clabLevel



 

msie8

 

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