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


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Sugerencias sobre detectar colisiones?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Sugerencias sobre detectar colisiones?  (Leído 1,866 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.645


Hackentifiko!


Ver Perfil
¿Sugerencias sobre detectar colisiones?
« en: 13 Octubre 2025, 00:12 am »

Mi Flash toma los objetos como rectángulos, así que por ejemplo esto:

se considera que colisiona con otra cosa si el área dentro del rectángulo azul colisiona con otra área así.

Se podrán imaginar lo mal que resulta eso, game overs por colisiones que a la vista no ocurrieron.

Intentando mejorar el tema, cree zonas (la imagen es otra):

Es tedioso y parece poco eficiente, en este caso chequear 11 zonas en vez de 1.

Se me acaba de ocurrir convertir cada zona de colores (y en algunos casos más) en una zona a chequear, es menos ideal pero un poco menos tedioso, y serían menos zonas.

¿Qué buenas opciones hay?


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.645


Hackentifiko!


Ver Perfil
Re: ¿Sugerencias sobre detectar colisiones?
« Respuesta #1 en: 20 Octubre 2025, 01:56 am »

Se me ocurrió poner rectángulos/cuadrados girados:

Luego chequeo esas zonas.

El problema es... ¿Cuánto debo girarlos/estirarlos, desde dónde y hacia dónde? Ahí por ejemplo tracé 2 líneas que usen puntas de píxeles extremos. Pero no sé cómo hacer que un cuadrado quede con ese ángulo. Si a esa línea le agrego más líneas de modo que sea un cuadrado rotado y lo convierto en símbolo, va a quedar una figura romboide cuya área va a ser un cuadrado, como se muestra la figura roja. Al crear la zona, debe hacerse derecha y rotarse/estirarse después, cuando ya esté creada, para evitar el problema. Pero de hacer las figuras adecuadas es como que no tengo idea, no me sale bien. Supongo que debo poner paralelogramos en cada zna inclinada, pero no me sale hacerlo rápido, bien.

Por ahora estoy separando a Mario en zonas, ya tengo 3: La cabeza, el pelo de atrás que no se considera zona de hit, y el cuerpo.

Supongo que haré un video que muestre mejor mi problema.


En línea

RayR

Desconectado Desconectado

Mensajes: 245


Ver Perfil
Re: ¿Sugerencias sobre detectar colisiones?
« Respuesta #2 en: 22 Octubre 2025, 01:31 am »

Puede que te estés complicando de más. La gran mayoría de los juegos de plataformas 2D simples usan cajas alineadas a los ejes, es decir, sin rotar, como lo hacías al principio. Simplemente usan varias (Super Mario Bros de NES usaba 3: cabeza, pies y torso), y, de ser necesario, son distintas para cada frame de la animación. Incluso juegos como Street Fighter o Fatal Fury lo hacen así. Que la colisión tenga unos cuantos pixels de imprecisión es irrelevante. A escala normal y en plena acción prácticamente no se nota, y por eso esa técnica sigue siendo usada en la actualidad. Y lo que es más, casi siempre se busca de forma intencional que las áreas de colisión sean un poco más pequeñas o un poco más grandes (según convenga) que el propio sprite, para mejorar la jugabilidad.

Si entiendo lo que pones en tu último mensaje, ¿quieres que las zonas de colisión sean paralelogramos, pero que tú las crees como rectángulos simples, y al ejecutar el programa, se deformen/roten para formar los paralelogramos deseados? Para hacer esto último necesitarías encontrar la transformación afín que haga esa conversión. Y luego usar alguna de las técnicas que hay para detectar colisiones entre polígonos convexos. Nada de eso es muy difícil (sólo hace falta un poco de álgebra lineal) pero sí más que el método de las cajas "sin rotar",  además de  ser menos eficiente y mucho más tedioso, pues aunque en ciertos casos y para ciertos tipos de juegos sí se llegan a usar polígonos convexos como zonas de colisión, éstas siempre se generan directamente con herramientas visuales como las que proporcionan los motores. En mi opinión no vale la pena, suponiendo que lo que buscas son colisiones para un juego tipo Mario clásico, cosa que tampoco has especificado, pero si es el caso, yo usaría directamente las cajas alineadas al eje y ya.
En línea

Alston

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: ¿Sugerencias sobre detectar colisiones?
« Respuesta #3 en: 24 Octubre 2025, 08:52 am »

Puede que te estés complicando de más. La gran mayoría de los juegos de plataformas 2D simples usan cajas alineadas a los ejes, es decir, sin rotar, como lo hacías al principio. Simplemente usan varias (Super Mario Bros de NES usaba 3: cabeza, pies y torso), y, de ser necesario, son distintas para cada frame de la animación. Incluso juegos como Street Fighter o Fatal Fury lo hacen así. Que la colisión tenga unos cuantos pixels de imprecisión es irrelevante. A escala normal y en plena acción prácticamente no se nota, y por eso esa técnica sigue siendo usada en la actualidad. Y lo que es más, casi siempre se busca de forma intencional que las áreas de colisión sean un poco más pequeñas o un poco más grandes (según convenga) que el propio sprite, para mejorar la jugabilidad.

Si entiendo lo que pones en tu último mensaje, ¿quieres que las zonas de colisión sean paralelogramos, pero que tú las crees como rectángulos simples, y al ejecutar el programa, se deformen/roten para formar los paralelogramos deseados? Para hacer esto último necesitarías encontrar la transformación afín que haga esa conversión. Y luego usar alguna de las técnicas que hay para detectar colisiones entre polígonos convexos. Nada de eso es muy difícil (sólo hace falta un poco de álgebra lineal) pero sí más que el método de las cajas "sin rotar",  además de  ser menos eficiente y mucho más tedioso, pues aunque en ciertos casos y para ciertos tipos de juegos sí se llegan a usar polígonos convexos como zonas de colisión, éstas siempre se generan directamente con herramientas visuales como las que proporcionan los motores. En mi opinión no vale la pena, suponiendo que lo que buscas son colisiones para un juego tipo Mario clásico, cosa que tampoco has especificado, pero si es el caso, yo usaría directamente las cajas alineadas al eje y ya.


Muchas gracias por tus consejos y por compartirlos. La información que proporcionaste es muy útil y aprendí muchos consejos.
En línea

Oyostepper supply the following products online: servo motors, geared stepper motor, spindle motors, and stepper motor for sale, which can be purchased online if needed.
Tachikomaia


Desconectado Desconectado

Mensajes: 1.645


Hackentifiko!


Ver Perfil
Re: ¿Sugerencias sobre detectar colisiones?
« Respuesta #4 en: 24 Octubre 2025, 11:03 am »

¿quieres que las zonas de colisión sean paralelogramos, pero que tú las crees como rectángulos simples, y al ejecutar el programa, se deformen/roten para formar los paralelogramos deseados?
Los creo como rectángulos, lo que en Flash son símbolos (objetos), y en el mismo editor, antes de ejecutar el programa, a copias de esos símbolos los estiro de un lado, los roto, modifico el tamaño, etc, para que queden como más convenga.

Mi idea con eso era reducir el nro de zonas necesarias, pero según he pensado un poco más no es posible en imágenes como estas de pixeles, cuadriculadas, quizá sí con una imagen más normal.

Voy a dar más detalles.

El juego es para ir aprendiendo a hacer juegos, ya que incluso los supuestamente más sencillos me resultan complicados. Este sería basado en el Donkey Kong clásico, una versión simplificada, y voy agregando cosas según pueda.
https://youtu.be/Ht6RcDBMaB8
Ahí se ve que la 2nda versión, al usar 2 zonas de colisión en vez de 1, funciona mejor, o eso intenté mostrar, pasa que falta mejorar la zona de los barriles también.

Ahora el tema de las figuras... intentaré mostrar que no me sale que queden como quiero xD o que no tengo mucha idea de cómo es.
https://youtu.be/oUv_uLQfyuo
En cuanto a cómo sería útil, no sé, si el paralelogramo sólo abarca una fila parece inútil, capáz que abarcando más podría ser, si es suficientemente ancho también.

Yo en papel lo probé con escaleras 2d y pareció inútil porque hay partes que no las cubre, así que se deben cubrir luego de la forma normal, y es lo mismo o peor, no sé.
En línea

RayR

Desconectado Desconectado

Mensajes: 245


Ver Perfil
Re: ¿Sugerencias sobre detectar colisiones?
« Respuesta #5 en: 30 Octubre 2025, 01:06 am »

En ese caso, el uso de cajas simples debería bastar. Ten por seguro que casi todos los juegos retro usan ese método o alguna variación. Simplemente, como te dije antes:

Citar
se busca de forma intencional que las áreas de colisión sean un poco más pequeñas o un poco más grandes (según convenga) que el propio sprite, para mejorar la jugabilidad.

Sin necesidad de ver el código del Donkey Kong original, es muy obvio que las cajas de colisión son más pequeñas que los sprites.

En cuanto a los paralelogramos, el método no es inútil, pero sí innecesario en este caso. La detección de colisiones se hace más complicada, y que yo sepa, Flash no la implementa (lo único que hará será verificar la colisión entre las áreas rectangulares que delimitan esas figuras), así que tendrías que programarla tú. Y aún si Flash lo hiciera por ti, necesariamente va a ser menos eficiente. Independientemente del método que se use, detectar colisiones con paralelogramos será al menos unas 30 o 40 veces más lento que hacerlo con cajas "simples" (alineadas al eje). En la práctica, como las computadoras modernas son rápidas, probablemente no haya problemas de rendimiento, y aún si pudieras tener cientos de barriles en pantalla (cosa que obviamente ya en el juego no sucedería), se pueden realizar optimizaciones (separar la verificación de colisiones en dos fases, dividir el nivel en secciones/sectores), pero no deja de ser trabajo extra que no se justifica para juegos de este tipo.

Otras alternativas más eficientes serían: usar zonas de forma circular y verificar la colisión comparando la distancia al centro del círculo con su radio, o cápsulas, que se pueden implementar como un rectángulo con semicírculos en dos extremos opuestos, pero tampoco las considero necesarias, puesto que el método de las cajas basta y sobra en este caso. El Donkey Kong probablemente haga algo así:



Aunque pueda parecer que las cajas son muy pequeñas, puedes hacer pruebas en un emulador y verás que son bastante aproximadas a las que el juego original de arcade debe usar. En todo caso, puedes hacer ajustes o incluso usar cajas separadas para la cabeza y el cuerpo si quieres algo un poco más preciso, pero sólo un poco, pues paradójicamente, las colisiones muy exactas pueden perjudicar la jugabilidad y causar frustración. Como regla general, y en particular en juegos de plataformas, suele ser aconsejable que, cuando se trata de cosas que pueden dañar al jugador (enemigos, balas, barriles), las cajas de colisión sean más pequeñas, y en caso contrario (plataformas, escaleras, power-ups), hacerlas exactas o incluso más grandes, según cada caso. De igual manera, por lo general es conveniente tratar los pies de manera aparte, ya que su principal uso es aterrizar en superficies (o pisar enemigos, pero aquí no es el caso), por lo cual su caja es algo más precisa y muchas veces no se toma en cuenta para colisiones con enemigos, así que yo te aconsejaría que únicamente la uses para detectar si Mario está sobre una plataforma, pero no con barriles y bolas de fuego. Con esto consigues dar al jugador un margen de tolerancia para la parte inferior del sprite.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sugerencias sobre un banner y una firma
Diseño Gráfico
mit 4 2,541 Último mensaje 23 Julio 2005, 03:18 am
por mit
Sugerencias sobre record
Sugerencias y dudas sobre el Foro
Kobe_Crack 7 4,909 Último mensaje 26 Mayo 2010, 00:14 am
por Constance
Sugerencias sobre el diseño de esta APP
.NET (C#, VB.NET, ASP)
Eleкtro 3 2,916 Último mensaje 8 Enero 2013, 16:49 pm
por Eleкtro
Sugerencias sobre tutoriales
Sugerencias y dudas sobre el Foro
crazykenny 6 4,638 Último mensaje 1 Julio 2013, 14:22 pm
por crazykenny
¿Sugerencias sobre hacer/encontrar íconos?
Diseño Gráfico
Tachikomaia 3 15,568 Último mensaje 21 Agosto 2024, 13:45 pm
por Songoku
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines