Cuestiones sobre videojuego de plataformas enfocado a Wiz

Started by turco, April 01, 2011, 07:24:46 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

turco

Hola a todos, estoy dando mis primeros pasos para aprender los conceptos para hacer un videojuegos de plataformas. Podeis compilar el fichero adjunto y ver que lo único que tengo implementado es el salto (botón ESPACIO). Tengo varias dudas, a ver si me podeis ayudar y orientar.

- ¿Os parece correcta mi implementación de la gravedad?

- He visto en tutoriales que se pueden utilizar varios colores diferentes para el mapa de durezas (uno para el suelo, otro para techo, otro para paredes, etc.). ¿Alguien lo ha hecho utilizando el mismo color para todo? No busco que me deis código sino sólo alguna orientación sobre como podría hacerse  ;)

- Cuando el personaje salta y vuelve a descender hasta la superficie que hace de suelo, queda un hueco de 1 píxel entre el suelo y el personaje... ¿Sabe alguien que estoy haciendo mal  :-\?

- Como va enfocado a Wiz he limitado los FPS a 30. ¿Es una buena velocidad o Wiz correría perfectamente a unos FPS mayores?

Buenos como veis tengo muchas dudas.
Gracias por leerlo.

Fede

Lo primero. Mu shulo y te doy un karma por empezar a programar. :D

**- ¿Os parece correcta mi implementación de la gravedad?

Mientras funcione... No soy el más adecuado para criticar código. :D

** - Cuando el personaje salta y vuelve a descender hasta la superficie que hace de suelo, queda un hueco de 1 píxel entre el suelo y el personaje... ¿Sabe alguien que estoy haciendo mal  ?

Tienes la coordena y dislocada. Pon un say en el proceso, veras que el resultado final siempre acaba incrementándose.

**- Como va enfocado a Wiz he limitado los FPS a 30. ¿Es una buena velocidad o Wiz correría perfectamente a unos FPS mayores?

Pon 60, bennu se adapta a la velocidad de la máquina. :D

Saludos.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

turco

¡Mi primer karma :D!

Muchas gracias Fede por el karma y por las respuestas. El tema del pixel de espacio lo tengo que estudiar bien porque así a primera vista no caigo en qué puedo estar haciendo mal.

Fede

Si te sirve de ayuda, añadiendo:

y+=resolution;

en la línea 203, desaparece el pixel de separación. Lo que no sé es por qué. :D

Saludos.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

turco

Creo que lo he encontrado :o

Creo que el problema es que yo en el proceso personaje hago esto:
[code language="bennu"]set_center(0, graph, 10, map_info(0, graph, G_HEIGHT) );[/code]

y quizás debería hacer esto otro:
[code language="bennu"]set_center(0, graph, 10, map_info(0, graph, G_HEIGHT) - 1 );[/code]

Es que estoy pensando que si la altura del gráfico es 20, los píxeles irían del 0 al 19, por lo que si le digo que el centro esté en el píxel 20, realmente estoy situando el centro un píxel por debajo del dibujo.

¿Que opinas Fede?

Fede

Bufff. Chico, que sólo llevo dos días más que tú. :D

Si funciona, pues será eso. :D

Te comento también que los 'grandes' se conectan por la tarde-noche.

Ellos, ya te hubierán resuelto tus dudas.  ;)

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

turco


FreeYourMind


Fede

Ya te vale Free. Me parece que tu alter ego hoy anda haciendo el gamberro. :D
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

FreeYourMind

Mira quien habla, y después soy yo el de las gambas  ;D

Drumpi

Le he dado un vistazo ultra rápido al código (tanto que casi ni me lo he leido ^^U).
Pero bueno, me he hecho una idea general. El sistema de gravedad es el que suelo recomendar, estilo "castle of Dr malvado", en lugar de las fórmulas de tiro parabólico (que implican potencias y una serie de operaciones más costosas que este sistema), pero hay dos cosas que no me gustan:

-¿Usas collision para detectar que se ha tocado el suelo? mira, como solución, sirve, pero creo que es la peor que has podido usar.
-Haces el movimiento vertical de golpe.

Ambos problemas tienen la misma solución, y es que compruebes, pixel por pixel, todos los lugares por los que pasa tu personaje mientras cae, y lo detengas cuando tocas el suelo (en lugar de atravesarlo y corregir). Es lo mismo que haces para subir el personaje una vez que ha atravesado el suelo pero en dirección contraria.
Por lo demás, no existe una forma "correcta" de implementar la gravedad, cada uno tiene sus preferencias. En el foro existen dos vertientes: los matemáticos, que usan fórmulas físicas, y los old-style, que usan aproximaciones menos exactas pero igualmente funcionales.

Lo del tema del pixel en los pies es lo que dices: map_info(0, graph, G_HEIGHT) devuelve el número de pixels de alto, pero el primero es el (0,0) (o sea, un gráfico de 1x1 pixels sólo tiene el pixel (0,0)), así que esa corrección está bien.

Otra cosa, los colores: sí, se puede hacer que tanto suelo, como techos y paredes sean del mismo color. Hasta ahora no he visto la necesidad de usar distintos colores, lo mismo las hay pero ni idea (en plataformas no uso mapas de durezas por motivos obvios ^^U). Lo único que tienes que tener en cuenta es que ese color no se puede atravesar.
Pero esto no quita para tener otros colores para otros efectos, como azul para zonas de agua, blanco para corrientes de aire...

Otra cosa, de momento no, pero puede que en un futuro tengas problemas con las durezas (ojo, digo puede). Recuerda que los gráficos 16 bits usan colores 565, lo cual exige un redondeo a la hora de convertir una imagen de 24bits, o de 16 bits en formato 555 (que es el más usado), y que encima es dependiente de la tarjeta gráfica que uses. Por eso se recomienda usar mapas de 8bits: son más precisos y admiten hasta 256 durezas distintas, más fáciles de controlar.
O usar cierto truco, que consiste en pintar en una esquina todos los colores usados como durezas, y usar map_get_pixel para definir, en tu caso, COLOR_RED.

Y por último, la potencia de WIZ: a su resolución nativa, si no abusas de collision, de ALPHA y alguna virguería gráfica (blendops) no deberías tener problemas de hacer andar la WIZ a 60 fps. Un scroll apenas lo nota, y creo que puedes meterle 4 (con ambas imágenes) sin que se queje. A mi me ha soportado tres modos7 con mapas GIGANTES (y hablo 9MB de mapas a 8bits en total, unos 2000x1500 pixels cada uno más o menos) con una ligera ralentización en determinados puntos (vease nivel 3 de SBTime).
También el exceso de procesos puede ser un problema, creo que la cosa podría rondar por los 300 procesos simultaneos, pero es cuestión de experimentar.
Yo te recomendaría usar unos 50fps, eso te da algo de margen extra y es un fantástico múltiplo de los segundos, a la hora de calcular velocidades y tiempos (1 frame = 0.02 seg).

Perdon por el TOCHACO ;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

boe, veo que hay nivel para el
yo todavia me estoy peleando con las diagonales, y no te digo ná de la gravedad...
puf

je je

turco

Aun me queda mucho por aprender jeje. Este fin de semana estoy fuera y no puedo probar nada, cuando vuelva miraré lo que me dices drumpi  ;)

Drumpi

Tranqui, que yo todavía estoy aprendiendo también :D
Todavía no sé cómo hacer el tema de las plataformas móviles, por ejemplo ^^U
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