miércoles, 14 de noviembre de 2018

Hijos de Camelot: Máscara de Colisión

Máscara de colisión

Una máscara de colisión es un gráfico que representa la zona "sensible" de un objeto (un jugador, un enemigo, una pared, una puerta). La máscara no tiene que ser igual que el sprite del objeto, de hecho no conviene que lo sea (el motivo lo vemos más abajo).


La máscara se usa para detectar cuando dos objetos chocan, por ejemplo si al jugador le ha alcanzado un proyectil, o bien si está chocando con una pared.

Por defecto GM usa una máscara equivalente a un recuadro que cubre todo el sprite del objeto, por tanto la máscara puede ser realmente grande si el sprite es irregular, además esto significa un desperdicio de CPU, mucho mejor utilizar formas simples como una máscara rectangular o en forma de elipse, para evitar problemas cuando el sprite tenga formas irregulares.

Por ejemplo, si tenemos el sprite de un esqueleto


La máscara por defecto es la siguiente (sombreado):



Máscara del Player

La máscara será manual, de tipo (shape) rectangular, desde la cabeza hasta las rodillas por ejemplo.



En cada sprite del objeto, para caminar, correr, etc hay que asegurarse de que la máscara está en manual y adecuar una máscara del mismo tamaño que la inicial, cambiando su posición según el sprite pero manteniendo siempre ese tamaño y forma de máscara.

La única excepción en mi juego será el sprite de esquivar, que será un simple píxel situado a los pies del personaje y un poco por delante, de forma que nos aseguramos de que al esquivar, el player es prácticamente invulnerable, y de que no se quede atascado en ninguna pared.

Si usáramos una máscara diferente para diferentes estados (corriendo, quieto, herido, esquivando, etc), con diferentes tamaños y formas, puede ocurrir que haya un cambio justo cuando estemos cerca p.e. de una pared, si la máscara cambia, puede quedarse el personaje "atascado"

Otras máscaras: Enemigos y Mobiliario

En general, máscara automática. Pero teniendo en cuenta lo que contamos a continuación.


Cuando no usar máscara automática

Si tenemos un sprite de este tipo (esqueleto gigante):


La máscara de colisión por defecto es cuadrada, es decir, incluye las partes transparentes(cuadrados grises), por tanto disparando a las zonas transparentes también estaríamos haciendo daño al esqueleto.

Para evitar esto, he cambiado la máscara a un óvalo que se ajuste a la zona donde queremos que el jugador dispare:

No hay comentarios :

No hay comentarios :

Publicar un comentario