Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: BlySntK on January 28, 2012, 01:48:23 PM

Title: Aclaraciones avanzadas
Post by: BlySntK on January 28, 2012, 01:48:23 PM
Bien, mis dudas son estas: Sobre las tiles o tileado y sobre la física newtoniana.

Veréis, el tileado más o menos entiendo su preparación y su puesta en marcha con matrices, hasta ahí, todo claro. El problema viene en cómo usarlas. Los distintis algoritmos con map_put no les termino de comprender, tanto cáculo dentro de esta función me desorienta mucho, además de la colocación de cada "baldosa" en la matriz numerada con los números del fpg.

En lo referente a la física... no llevo nada, pero nada bien las formulas matemáticas y, una vez llevado al código... no llego a comprender velocidades de inicio y fin o gravedades... Si sois tan amables de intentar explicarmelo para LERDOS (niños de 5-10 años xD) me sería de utilidad, gracias chicos!
Title: Re: Aclaraciones avanzadas
Post by: Futu-block on January 28, 2012, 06:24:34 PM
no tengo ni idea, por eso no te lo dije por mp :(
Title: Re: Aclaraciones avanzadas
Post by: BlySntK on January 28, 2012, 10:03:02 PM
No te preocupes Futu, quedas perdonado (pero actualiza el blog con los avances que hayas hecho en las pruebas del juego que miramos de tener entre manos... Hazme ese favor, gracias ^^

Alguien que me ayude con mis dudas, plissssss?????????? Les estaría ENORMEMENTE agradecido
Title: Re: Aclaraciones avanzadas
Post by: SplinterGU on January 28, 2012, 11:26:50 PM
cual es la duda concreta, asi como la planteas es un poco amplia.
Title: Re: Aclaraciones avanzadas
Post by: BlySntK on January 29, 2012, 04:20:01 PM
Por ejemplo, en la biblia pone:


/*Fíjate la manera que usamos (muy típica cuando se trabaja con tiles) de acceder a unelemento determinado de la tabla. Las filas están multiplicadas por 20 porque 20 es elnúmero de elementos de cada fila; de esta manera, primero nos situamos en una filadeterminada, y una vez allí, nos movemos a la columna que queremos. Es pues un movimiento"en 2 pasos": nos saltamos de golpe primero todas las filas que no nos interesan parallegar a la nuestra, y una vez allí, nos movemos a la columna que queremos. Por ejemplo,si queremos saber qué gráfico ha de haber en la quinta fila (número 4) octava columna(columna 7), el elemento de la tabla correspondiente será 4*20+7 = 87.
[color=black]Por  otro  lado,  las  coordenadas  escritas  en  los  dos  últimos  parámetros  de  map_put -correspondientes al centro del tile- se multiplican por el tamaño de la baldosa, paracuadrar el dibujo. La primera baldosa de la esquina superior izquierda tendrá como puntocentral el (0,0); la segunda el (64,64), la tercera el (128,128) y así.*/
                     map_put(0,0,tiles[(fila*20)+columna],columna*64,fila*64);[/color]
    End
    End
    Loop
        //y si avanzamos actualizamos los tiles...¡FALTA!
      [color=black] If (region_act<>ultima_region)
            From fila= 0 To 11;
    columna=region_act+19;
              map_put(0,0,tiles[(fila*20)+columna],(region_act-1)*64,fila*64);[/color]
            End
            ultima_Region=region_act;
       End


Lo que pongo la etiqueta de color es lo que no comprendo

y este otro:



  //Se asegura que la posición de la cámara no salga fuera del nivel
  if(scrol.sx < 0)scrol.sx = 0;end
  if(scrol.sy < 0)scrol.sy = 0;end
[color=black] if(scrol.sx > DIM * TILESIZE - SCREENX)scrol.sx = DIM * TILESIZE - SCREENX;end
  if(scrol.sy > DIM * TILESIZE - SCREENY)scrol.sy = DIM * TILESIZE - SCREENY;end[/color]

Y lo de la física:

la simple formula x = x0 + v0x · t  e  y = y0 + v0y · t + 0.5 · g · t2 se me atragantan
Title: Re: Aclaraciones avanzadas
Post by: osk on January 29, 2012, 09:44:08 PM
Bueno, es verdad que esto de los tiles es un poco lioso si se quiere hacer "a pelo" directamente

El comentario inicial del trozo de código que has pasado intenta explicar cómo se construye un tile.El if es para detectar si se ha llegado a algún extremo de la pantalla (la última región -previamente definida- ) para desplazar todos los tiles en paralelo y volviendo a redibujar todo y mostrar la nueva zona que se "descubre". Así explicado es bastante difícil de pillar...una animación ilustrativa del proceso no vendría mal, la verdad.

Yo te aconsejo que vayas jugando con esto, cambiando los valores, poniendo delays en los bucles  y aislando código para sólo ejecutar lo que te interesa y que veas lo que pasa. Y también mira el código de otros juegos donde haya tiles, que a lo mejor el código de la "biblia" tal vez no sea ni el mejor, ni el más eficaz ni el más sencillo...no hay una sola manera de hacer las cosas...

Te aconsejo también que le eches un vistazo a esto: http://www.tonypa.pri.ee/tbw/start.html

Respecto las fórmulas, son las fórmulas básicas del movimiento rectilíneo de  la cinemática newtoniana. Quién mejor que la wikipedia para explicarlo: http://es.wikipedia.org/wiki/Cinem%C3%A1tica#Movimiento_rectil.C3.ADneo

Hale, hasta luego
Title: Re: Aclaraciones avanzadas
Post by: BlySntK on January 30, 2012, 02:02:58 AM
Quote from: osk on January 29, 2012, 09:44:08 PM
Bueno, es verdad que esto de los tiles es un poco lioso si se quiere hacer "a pelo" directamente

El comentario inicial del trozo de código que has pasado intenta explicar cómo se construye un tile.El if es para detectar si se ha llegado a algún extremo de la pantalla (la última región -previamente definida- ) para desplazar todos los tiles en paralelo y volviendo a redibujar todo y mostrar la nueva zona que se "descubre". Así explicado es bastante difícil de pillar...una animación ilustrativa del proceso no vendría mal, la verdad.

Yo te aconsejo que vayas jugando con esto, cambiando los valores, poniendo delays en los bucles  y aislando código para sólo ejecutar lo que te interesa y que veas lo que pasa. Y también mira el código de otros juegos donde haya tiles, que a lo mejor el código de la "biblia" tal vez no sea ni el mejor, ni el más eficaz ni el más sencillo...no hay una sola manera de hacer las cosas...

Te aconsejo también que le eches un vistazo a esto: http://www.tonypa.pri.ee/tbw/start.html

Respecto las fórmulas, son las fórmulas básicas del movimiento rectilíneo de  la cinemática newtoniana. Quién mejor que la wikipedia para explicarlo: http://es.wikipedia.org/wiki/Cinem%C3%A1tica#Movimiento_rectil.C3.ADneo

Hale, hasta luego

Qué grande eres, osk. Gracias por aclararmelo un poco mejor, sí, iré haciendo lo que siempre he venido haciendo con códigos anteriores, experimentar para comprenderlo. En cuanto pueda le echaré un ojo a los links pasados y... a ver :) Y lo de las formulas newtonianas, buff, en eso sí que voy a tener que "hincar codos", tocando física y trigonometría... cuando yo en las matemáticas no he llegado más lejos que a aprender las ecuaciones de primer y segundo grado... Lo curioso es que no se me dan mal... qué cosas. Bueno, supongo que ya iré comentando las pruebas que haga o... siendo más productvos, una vez comprendido el meollo, seguramente aceleraré con los juegos que tengo ya preconstruidos.

Un saludo y de nuevo, gracias!
Title: Re: Aclaraciones avanzadas
Post by: Futu-block on January 30, 2012, 09:24:47 AM
lo de la fisica es algo que viene en chipmunk, imposible para mi :D

si lo que quieres es un movimiento suave de salto puedes restarle a la Y el coseno del angulo...


necesitas un angulo sumando constantemente, y un operador que te saque el seno o el coseno de ese angulo, asi el movimiento se vá decelerando poco a poco hasta que se para y vuelve a acelerar hasta la posicion inicial

te pongo un ejemplito:


Quote
for(i = 180; i < 361; i++)
     seno = sin(angulo)*raido;   
     y = seno;
     angulo = i * 1000;
     frame(75);
end

el movimiento es automatico  8)
Title: Re: Aclaraciones avanzadas
Post by: BlySntK on January 30, 2012, 12:34:49 PM
Quote from: Futublock on January 30, 2012, 09:24:47 AM
lo de la fisica es algo que viene en chipmunk, imposible para mi :D

si lo que quieres es un movimiento suave de salto puedes restarle a la Y el coseno del angulo...


necesitas un angulo sumando constantemente, y un operador que te saque el seno o el coseno de ese angulo, asi el movimiento se vá decelerando poco a poco hasta que se para y vuelve a acelerar hasta la posicion inicial

te pongo un ejemplito:


Quote
for(i = 180; i < 361; i++)
     seno = sin(angulo)*raido;   
     y = seno;
     angulo = i * 1000;
     frame(75);
end

el movimiento es automatico  8)

¿Y esto es para un salto simple? Pero el seno está multiplicando, ¿no? ¿Dónde hay un menos?
Title: Re: Aclaraciones avanzadas
Post by: Futu-block on January 30, 2012, 03:17:48 PM
trastealo, con solo poner un simbolo negativo en donde corresponde se llega a lo que quieres :D

Title: Re: Aclaraciones avanzadas
Post by: BlySntK on January 31, 2012, 01:08:30 AM
Lo tendré que experimentar, sí. Ya experiementé con las tiles y les voy cogiendo el truco, no es difícil. Ahora sólo me queda el tema de la física... a ver por dónde sale...
Title: Re:Aclaraciones avanzadas
Post by: BlySntK on February 02, 2012, 05:19:22 PM
Bueno, mientras voy experimentando (todavía) con las tiles, no me llega a centrar bien el dibujo en pantalla; mitad sale bien, la otra mitad no. Sale descentrada de su otra mitad. La cuestión es que tengo un fondo (que es un paisaje de un arbol y una casa sin scrollear) con una resolucion de 640x480... qué tamño deberían tener las baldosas para que estuviera todo el dibujo centrado, es decir, no centrado a la pantalla, sino centrado sobre sí mismo, que no salga parte de arriba bien y parte de abajo a un lado... Cada baldosa mide 32x32... decidme, ¿es culpa de la medida?
Title: Re:Aclaraciones avanzadas
Post by: Fede on February 02, 2012, 09:20:33 PM
 No es problema de la resolución de los tiles, ya que ambos son múltiplos de 32.

Seguramente será porque supones que el tile se empieza a imprimir en la coordenada 0x0 y sin embargo lo hace dependiendo del punto de control que tenga asignado.

Si no tienes ninguno, creo que por defecto es el centro del tile.

A mí me pasó algo parecido y era eso.
Title: Re:Aclaraciones avanzadas
Post by: BlySntK on February 03, 2012, 12:33:41 AM
Entonces, cada tile tengo que ponerlo en el mismo punto de control? Todos han de estar igual?
Title: Re:Aclaraciones avanzadas
Post by: gecko on February 03, 2012, 03:04:41 AM
Creo que lo que dice es que a todos los tiles tendrias que ponerles el punto de control 0 (el centro) en la coordenada x=0 y=0. O sino tener en cuenta ese offset que vas a tener y posicionar cada tile en X + tilesize / 2

Si se entiende asi rápido, bien. sino trataré de explicarlo mejor en un segundo post.

Saludos!
Title: Re:Aclaraciones avanzadas
Post by: BlySntK on February 03, 2012, 07:05:52 AM
Quote from: gecko on February 03, 2012, 03:04:41 AM
Creo que lo que dice es que a todos los tiles tendrias que ponerles el punto de control 0 (el centro) en la coordenada x=0 y=0. O sino tener en cuenta ese offset que vas a tener y posicionar cada tile en X + tilesize / 2

Si se entiende asi rápido, bien. sino trataré de explicarlo mejor en un segundo post.

Saludos!

Medianamente creo entendero, ahora falta saber llevarlo a la práctica que es lo que ahora mismo voy a hacer. Muchas gracias a los dos por ayudarme :) Y gecko, si no te importa, para quienes están en mi situación, ¿podrías mirar por explicar esos detalles en un pequeño post? Ya no sólo por mí.

edito: Además, lo de las tiles (ya he conseguido manejarme medianamente con ellas, he tenido que ir a mano poniendolas porque sino se desjaustaban), a muchos nos gustaría saber cuales son los tamaños por resolución: es decir, si para una resolución de 640x480 lo más recomendable es entre 32 y 64 pixeles/baldosa, ¿cúanto sería para hacer una pantalla de 800x600 ó una de 640 scrollable? Porque eso no lo sé o no lo llego a saber bien.
Title: Re:Aclaraciones avanzadas
Post by: osk on February 03, 2012, 09:37:30 AM
Divide el número de píxels de la pantalla (800 ó 600 según el caso) entre el el número de píxels de la baldosa que tú quieras, y te saldrán el número de baldosas que caben en la pantalla.
Title: Re:Aclaraciones avanzadas
Post by: BlySntK on February 03, 2012, 02:07:10 PM
Ok, eso no lo comprendía bien. Gracias osk :)