Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Cámara 3D que no atraviese sólidos. [Resuelto]  (Leído 305 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DarkKRuleR

en: Agosto 18, 2020, 02:24:24 pm
¡Buenas! Pues tengo una cámara con una posición 3D dada, digamos "x, y, z". El problema es que si me pongo contra un muro, la cámara puede quedarse dentro de él, viendo las cosas desde ángulos incorrectos o hasta pudiendo ver cosas que hay detrás de las paredes. Incluso si no ocurre esto, podría ocurrir que la cámara quede al otro lado de un muro, sin colisionar con nada en x, y, z, pero sí colisionando en la línea, quedando la cámara al otro lado de la pared y también viendo cosas que no debería poder ver.

Hice un bucle para calcular en qué coordenada poner la cámara, comenzando en el personaje, sumando 1 píxel a la distancia, calculando que no haya colisión, y así iterar hasta llegar a la posición de la cámara, habiéndome asegurado que entre el personaje y ésta no haya sólidos. Pero iterar tanto y buscar colisión en cada iteración dispara el coste. Intenté poner un modo "económico" en que hiciera saltos por ejemplo de 50 en 50 píxeles (los muros son de tamaño 150), pero a veces los atraviesa igual.

También pensé alternativas, como dejar que la cámara atraviese los muros, pero si lo hace, poner la vista en negro, o teletransportarla al personaje, o mil cosas.... pero ninguna me convence. Y el problema principal es saber que entre la cámara y el personaje no haya sólidos y colocar la cámara a la distancia máxima (pegada al muro) sin disparar el coste con un bucle y mil comprobaciones.

¿Quien haya hecho algo similar, cómo lo arreglaste?
« última modificación: Agosto 19, 2020, 03:35:01 pm por DarkKRuleR »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Clamud

Respuesta #1 en: Agosto 18, 2020, 05:58:15 pm
En este tema subí ejemplos donde la cámara colisiona, pero es un juego donde la cámara sigue al personaje por la espalda y creo que tu juego es un plataformero
https://www.comunidadgm.org/preguntas-y-respuestas/camara-3d-d-estilo-yume-niki-3d-(solucionado)

En alguna parte del código se usa este script
https://yal.cc/gamemaker-collision-line-point/
ya no estoy seguro, pero creo que encuentra el punto de colisión usando un método parecido a la búsquda binaria. Es decir, comienza revisando distancias largas y en cada iteración la distancia se reduce a la mitad, eso reduce considerablemente el número de iteraciones.

 


Desconectado DarkKRuleR

Respuesta #2 en: Agosto 19, 2020, 03:34:51 pm
Graciass. En principio no planteé collision_line ya que al ser full 3D pues faltaba la tercera componente. Sin embargo vi que de alguna forma podía hacerse, aunque fue complicado.

Entre pruebas y pruebas di con una solucion alternativa. La original, con un pequeño retoque xD Gracias igual por ser esa chispa (!)