Duda con angle y puntos de control

Started by grisendo, May 11, 2010, 11:55:43 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

grisendo

Creo recordar que hace tiempo tuve algún problemilla con esto haciendo un arkanoid... pero me acaba de venir a la cabeza.

Creo que el problema venía de que la nave era el doble de larga que ancha, y al disparar (bala desde el mismo X, Y que la nave) con algún giro parecía que salía el disparo "desviado".

Una dudilla que me acaba de asaltar...

¿Cómo funciona exactamente el "angle" en el siguiente caso? Es decir, a partir de qué punto rota: siempre tomando el centro del sprite, desde el punto 0 del sprite... Porque yo casi siempre utilizo load_png (En este caso de load_png, el punto 0 es el centro, no?) en lugar de fpg's. No sé si me explico muy bien...

Por ejemplo en un juego de coches desde arriba, si defines el punto 0 en la rueda delantera derecha, al cambiar el angle, el coche haría un trompo sobre esa rueda si la rotación fuese sobre el punto 0... pero si fuese sobre el centro, giraría como un coche teledirigido.

No es que lo necesite ni nada, es que viendo un código en XNA he visto que se podía definir el punto de rotación y me he preguntado cómo iría la cosa en Bennu... en el wiki no he encontrado nada (buscando "angle").

PD: Cómo es la nomenclatura esa de lo que yo estoy llamando "puntos definidos del sprite"? No recuerdo... y, se pueden modificar dinámicamente, no? Igual no encuentro nada en el wiki porque no recuerdo esa nomenclatura  ;D

Windgate

Se llama punto de control, por defecto es el centro exacto del Sprite, pero con el FPG Edit mismamente puedes editar cualquier sprite y asignar el punto de control en cualquiera de las esquinas.

Por ejemplo, para tener un minimapa en la esquina superior de la pantalla y que al hacerse grande (Con size) barra toda la pantalla lo mejor es poner el punto de control en la esquina superior izquierda, de otra manera crecería desde el centro.

Lo de que los disparos salgan torcidos... Ten en cuenta que la precisión de posicionamiento en 2D es int, nunca conseguirás una diagonal perfecta, pásate a 3D :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

grisendo

Te doy un karma por lo del punto de control (no conseguía encontrarlo!! qué estupidez!! qué empanamiento llevo!). Mira que lo tengo visto veces del FPG editor, pero toy en Linux y ahí no lo tengo (ni sé si existe)

Pero lo otro, me refiero que la diagonal es perfecta (excepto claro que a nivel de pixel es un zig-zag, lo que dices del int, pero eso no es a lo que me refiero). Lo que digo es que sale como desviada... si en 0º la bala sale del centro por el cañon central de la nave y sigue bien la trayectoria, en 23º, sigue bien la trayectoria de 23º pero algo desplazado y parece que sale de un ala... si no se ve es difícil de explicar

Puf, con todo esto me surgen nuevas dudas... al rotar el punto de control también rota? o sigue estando en sus mismas coordenadas (por ejemplo [0, 0] pero del gráfico rotado)? ¿A qué huelen las nubes? ¿Por qué el pan de molde de molde es cuadrado si la mortadela, el chorizo y el lomo son redondos?

La momia que fuma

Mirate las funciones set_center, set_point y get_real_point, con esta última obtienes las coordenadas del punto de control teniendo en cuenta todo, angulo, reescalado, condiciones meteorológicas en Antequera, etc...

Drumpi

El punto de control número 0 determina el eje de rotación y la posición del gráfico (por lo tanto, al rotar, no cambia de posición), y por defecto se situa en (ancho/2 - 1,alto/2 - 1) que no es lo mismo que en el centro (vamos, yo recuerdo tener un gráfico con ancho/alto impar y no situarse en el punto central, el -1 es porque el gráfico tiene su primera posición en el punto (0,0)).

Pero se pueden establecer hasta 1000 puntos de control en un gráfico. Ojo, sólo el 0 determina el centro de rotación y la posición, el resto no. Para mas info, te remito a lo que dice momia.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

grisendo

Ale, un gallifante para cada uno por esta lección de sabidurida

Windgate

Ciertamente no soy el más experto en puntos de control, nunca he usado alguno más que el 0 para centrar.

En cuanto a lo que decías por ahí de si el punto rota, el 0 nunca rota al modificar angle ya que precisamente se rota respecto de ese punto, el resto lógicamente sí que rotarán xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Quote from: grisendo on May 11, 2010, 08:33:53 PM
Ale, un gallifante para cada uno por esta lección de sabidurida

Ante tamaña respuesta sólo una cosa queda por decir:
http://www.youtube.com/watch?v=GMXqtahfyRg

:D :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

eso de get_angle lo tengo que aprender tambien...