Una idea para darle profundidad a los gráficos

For all things Churrera. ¿Estás haciendo un juego? ¿quieres proponer un cambio? ¿tienes alguna duda? ¡Cuéntanoslo!

Moderador: na_th_an

Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Una idea para darle profundidad a los gráficos

Mensajepor radastan » Mié, 23 Oct 2013, 13:14

Bien, estoy haciendo experimentos con los gráficos para dar algo de sensación de profundidad. La idea es que en vez de poner los gráficos de plataformas en 2D se hagan en pseudo3D, es decir que tengan cierta perspectiva.

Imaginad un tile de suelo, pero que sea un cuadrado como el de las losas de suelo de un juego Filmation. El personaje se sigue moviendo en 2D, de lado, pero el suelo da apariencia de 3D.

Trasteando me he dado cuenta que para hacerlo con las posibilidades actuales requeriría dos tiles de altura y tres de anchura mínima para crear ese efecto, es decir seis tiles. El motivo es que al situarse el personaje en medio del suelo 3D habría que poner un tile de perspectiva por debajo y otro por encima en su línea de suelo. Otra pega importante es que se pierde mucho escenario con el efecto, por lo que no lo veo muy viable así de primeras para hacer un juego bonito.

¿Solución? que existiera un tile que fuese traspasable en los dos caracteres de arriba pero que fuese intraspasable en los dos caracteres de abajo (cada tile se compone de 2x2 caracteres). ¿Sería posible?

Es que se podría dar un efecto precioso en el juego, en la línea de los juegos modernos 2D de plataformas de hoy día.
Adjuntos
test3d.png
Prince of Mojonersia concept art
test3d.png (461 Bytes) Visto 2355 veces
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Una idea para darle profundidad a los gráficos

Mensajepor na_th_an » Mié, 23 Oct 2013, 13:40

Sería posible, pero problemático. Tal y como está hecho el motor toda la colisión es a bloque completo, y habría que parchear un montón.

Para hacer lo que tú quieres se puede hacer algo intermedio:
sol1.png
sol1.png (4.2 KiB) Visto 2351 veces


Precisa nueve tiles. Los de fondo rojo y amarillo oscuro son transpasables, los otros obstáculo. Así se consigue el efecto que quieres.

Otra solución es exigir que todos los tiles estén diseñados de forma parecida, dejar la colisión como está, pero volcar los sprites 8 pixels más abajo de donde realmente están. Para eso sólo hay que cambiar el motor en mainloop.h y dejar la parte de render así:

$this->bbcode_second_pass_code('', ' // Render
for (gpit = 0; gpit < 3; gpit ++) {
#if defined (RANDOM_RESPAWN) || defined (ENABLE_CUSTOM_TYPE_6)
if (en_an [gpit].fanty_activo || malotes [enoffs + gpit].t == 6) {
x = en_an [gpit].x >> 6;
y = en_an [gpit].y >> 6;
} else {
#endif
x = malotes [enoffs + gpit].x;
y = malotes [enoffs + gpit].y;
#if defined (RANDOM_RESPAWN) || defined (ENABLE_CUSTOM_TYPE_6)
}
#endif
sp_MoveSprAbs (sp_moviles [gpit], spritesClip, en_an [gpit].next_frame - en_an [gpit].current_frame, 1 + VIEWPORT_Y + (y >> 3), VIEWPORT_X + (x >> 3),x & 7, y & 7);
en_an [gpit].current_frame = en_an [gpit].next_frame;
}

// Precalc this, comes handy:
x = player.x >> 6;
y = player.y >> 6;

#ifdef ACTIVATE_SCRIPTING
#ifdef ENABLE_FIRE_ZONE
if (f_zone_ac == 1) {
if (x >= fzx1 && x <= fzx2 && y >= fzy1 && y <= fzy2) {
run_fire_script ();
}
}
#endif
#endif

if ( !(player.estado & EST_PARP) || !(half_life) )
sp_MoveSprAbs (sp_player, spritesClip, player.next_frame - player.current_frame, 1 + VIEWPORT_Y + (y >> 3), VIEWPORT_X + (x >> 3), x & 7, y & 7);
else
sp_MoveSprAbs (sp_player, spritesClip, player.next_frame - player.current_frame, -2, -2, 0, 0);

player.current_frame = player.next_frame;


#ifdef PLAYER_CAN_FIRE
for (gpit = 0; gpit < MAX_BULLETS; gpit ++) {
if (bullets [gpit].estado == 1) {
sp_MoveSprAbs (sp_bullets [gpit], spritesClip, 0, 1 + VIEWPORT_Y + (bullets [gpit].y >> 3), VIEWPORT_X + (bullets [gpit].x >> 3), bullets [gpit].x & 7, bullets [gpit].y & 7);
} else {
sp_MoveSprAbs (sp_bullets [gpit], spritesClip, 0, -2, -2, 0, 0);
}
}
#endif ')
(el cambio es sencillo: basta con cambiar "VIEWPORT_Y" por "1 + VIEWPORT_Y" en los tres sitios donde sale, para que pinte todo un carácter más abajo)

Esto sería equivalente a lo que propones, más o menos, pero no le encuentro la ventaja real porque al final necesitamos el mismo número de tiles, solo que arreglados de otra forma:
sol2.png
sol2.png (5.11 KiB) Visto 2343 veces


Sin embargo ambas soluciones comparten el mismo problema: si el muñeo se cae por la parte izquierda de la plataforma se pierde toda la perspectiva, ya que lo que debería cubrirle le queda por detrás. Y no hay forma de colocar sprites detrás de tiles.
Como diría Rorshach: "Urm..."

Volver a “La Churrera”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados