elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Duda sobre detección de colisiones en un juego 2D sencillo
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre detección de colisiones en un juego 2D sencillo  (Leído 116 veces)
candicelia

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Duda sobre detección de colisiones en un juego 2D sencillo
« en: Hoy a las 17:37 »

Hola a todos, soy nueva por aquí. Llevo un tiempo trasteando con un pequeño juego 2D por afición (nada serio, solo para aprender) y me ha surgido una duda con la detección de colisiones. Estoy usando cajas rectangulares simples (bounding boxes) para cada objeto, pero cuando hay muchos enemigos en pantalla a la vez noto que el rendimiento baja bastante y a veces se detectan colisiones que no deberían darse. He leído que se pueden usar estructuras como quadtrees para optimizar esto, pero no sé si es excesivo para un proyecto tan pequeño. ¿Alguien que tenga experiencia con esto me puede orientar sobre si merece la pena complicarse con ese tipo de estructuras o si hay una forma más sencilla de mejorar el rendimiento? Gracias de antemano.


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.809


Hackentifiko!


Ver Perfil
Re: Duda sobre detección de colisiones en un juego 2D sencillo
« Respuesta #1 en: Hoy a las 18:35 »

No sabía de los "quadtrees", pero si sólo importa la colisión del avatar y: Los enemigos y sus disparos, entonces no parece necesario, distinto es si los enemigos pueden colisionar entre ellos, con sus propios disparos, con los tuyos, los disparos colisionar con los tuyos, bloques, etc.

noto que el rendimiento baja bastante y a veces se detectan colisiones que no deberían darse.
Deberías ver si ocurre siempre o porque con bajo rendimiento tu lenguaje se apura y chequea de forma menos exacta, ni idea, quizá ocurre siempre pero sólo lo notas cuando el juego está lento. Si los cuadros son más grandes que los objetos se detectarán colisiones inexistentes entre los objetos.

Yo pasé por problemas similares pero no me acuerdo mucho, abandoné el proyecto debido a otra dificultad, pero creo que recomendaría esto:
Supón que puede haber hasta 100 peligros en la pantalla. No hagas constantemente un chequeo de los 100 objetos. Ten una lista de cuales hay y chequea sólo esos. Puede ser algo complicado pues por ejemplo puede que se elimine el nro 3, no puedes "chequear el n, hacer n+1, repetir hasta...". Debes tener los números en un array y actualizarlo. Todo eso enlentece también, supongo que sólo es bueno si suele ocurrir que los enemigos son mucho menos que el máximo.

Sobre los quadtrees supongo que la pantalla se divide según dónde estén los objetos, si la división es fija y hay algunos en el límite podría fallar, considerar que están en una zona en vez de otra, el objeto A en la zona 1 y el B en la 2, pero están colisionando. Pero si los objetos son muchos puede ser muy difícil dividir la pantalla sin que una línea toque alguno, además que sean divisiones cuadradas o rectangulares...
Sino podrías hacer quadtrees fijos pensando en ese tipo de cosas, pero tendrías que ver en cuales está el objeto, agregarlos a un array correspondiente, y en algunos casos en más de uno.

En juegos como de Pool donde no puedes simplemente analizar colisiones de a pares (o sí pero sin alterar los valores, aún) o casos como que un disparo tuyo toca a una nave que te está tocando, se complica más.


« Última modificación: Hoy a las 18:38 por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Colisiones en juego SDL
Programación C/C++
Guillermo575 3 6,187 Último mensaje 28 Marzo 2011, 02:15 am
por oxydec
[duda] Sobre un juego online de juego flash
Juegos y Consolas
Senior++ 6 9,500 Último mensaje 28 Junio 2011, 08:49 am
por тαптяα
Duda sobre programa sencillo [C++]
Programación C/C++
danny920825 0 1,938 Último mensaje 10 Noviembre 2013, 20:30 pm
por danny920825
Duda sobre nmap y detección de sistema operativo
Seguridad
Schaiden 1 4,222 Último mensaje 21 Octubre 2016, 02:29 am
por engel lex
¿Sugerencias sobre detectar colisiones?
Programación General
Tachikomaia 7 10,494 Último mensaje 5 Junio 2026, 09:25 am
por leprosyuncut
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines