Archivado en: Informática variada
Algo muy importante en los juegos, especialmente cuando hablamos de antiguos juegos 2D (y vital en los de plataformas), eran las colisiones.
La máquina debÃa detectar cuando el personaje (no sólo el protagonista, sino todos los personajes móviles) colisionaba con las paredes, con el suelo de las plataformas, los enemigos o las balas.
Ahora hay métodos mucho más complejos, sobretodo cuando extrapolamos esto en el entorno de las 3D, pero entonces se utilizaba la simple técnica del cuadrado. Al personaje se le adjudicaba un “cuadrado” compuesto por unas coordenadas relativas a su posición. Generalmente coincidÃa con el cuadrado formado por su imagen, para evitar ocupar más memoria con información extra para cada elemento de la pantalla pero, cuando se disponÃan de suficientes recursos, se procuraba que el cuadrado fuera tan ajustado a la superficie dibujada como fuera posible, a veces utilizando más de un cuadrado asociado al personaje, si este tenÃa una forma demasiado poco rectangular.

La solución es simple, si dos de estos cuadrados se superponen, hay colisión, y se dispara el efecto adecuado.
Con el escenario, el suelo, plataformas, etc, pasa algo parecido. En realidad existe un doble mapeado, uno que tiene los gráficos que se muestran y otro, generalmente solo de dos colores, que separa las zonas colisionables de las que no. Cuando la zona de colisión toca la zona inferior del personaje, este deja de caer. De la misma forma, el personaje no atravesará paredes ni techos.
Lo más curioso es que muchos de los bugs que se pueden encontrar con los juegos antiguos son debido al mal uso de las zonas de colisión. Cuando un enemigo nos mataba al acercarse mucho, aún sin habernos tocado realmente, era debido a una área de colisión demasiado grande. Cuando no nos mataban a pesar de tocarnos claramente, era debido a una área de colisión demasiado pequeña.
La colisión también podÃa provocar esos tÃpicos cuelgues al quedar el personaje “atrapado” en el suelo o en una pared. Eso era debido a que el ordenador no habÃa detectado la colisión a tiempo, y el personaje habÃa entrado en la pared. Entonces, por más que nos moviéramos, como detectaba constantemente colisión, no podÃamos despegarnos.

Hay un efecto muy curioso en el juego Cauldron, al menos en CPC. PodÃamos ponernos en el lÃmite de las plataformas. Hasta el punto en que nos aguantábamos en el aire sólo contactando con la plataforma con la parte trasera de nuestra túnica. Pero, el cuadrado de colisión no estaba centrado en el personaje (era más largo atrás que adelante) por lo que, si nos girábamos para volver al centro de la plataforma, nos caÃamos. En mi época del CPC me mataron unas cuantas veces, por haber aterrizado al lÃmite de la plataforma y no poder volver al centro, sin saber que todo esto era culpa de un cuadrado de colisión descentrado.
Otro dÃa os explicaré más cosas de la colisión, esta vez aplicado a los juegos de lucha.
Un par de anotaciones:
La primera es que la imagen del marcianito colisionando con el cohete la he sacado de un tutorial de programación de videojuegos en java muy bueno. Os lo recomiendo si teneis pensado aprender java.
La segunda es que, si os ha gustado el artÃculo técnico, y considerais que la página vale la pena, votadme en el concurso. Sólo son un par de clics.
2 comentarios por mucho
Deja un comentario
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Uis, esto de las colisiones lo aprendà con el “Game Maker” (Programa, antes freeware, orientado a la creación de videojuegos basados en objetos). Me tiré meses con el programita, lástima que ahora no tenga tanto tiempo… (O tal vez es que soy un vaog =P)
Comment por Koopa Julio 21, 2005 @ 12:22 pmBueno, también está la técnica de la máscara (usada en algunos juegos de NES) y la pixel-perfect.
Comment por Anoninato Agosto 16, 2005 @ 1:58 am