2010-07-15 25 views
16

Oye, actualmente estoy buscando varios métodos para implementar la respuesta de colisión en videojuegos 2D, algo similar a este tutorial Metanet tiene: N Tutorial Estoy buscando implementar algo en XNA, pero cualquier lenguaje estar bien. Estoy más interesado en implementando programáticamente que la teoría real. Preferiría más material amigable para principiantes, pero realmente recibo más temas avanzados.Buenas referencias de respuesta de colisión 2D

Entonces, ¿alguien podría sugerir algunos buenos artículos/libros de respuesta de colisión en 2D?

(PS: Estoy más interesado en respuesta a la detección)

+0

Lo sentimos, no podemos migrar a los sitios stackexchange. Pero si puedes acceder a ellos (¿está gamedev en versión beta?), Puedes hacer la pregunta por allí. – Will

Respuesta

15

El N tutorial que mencionas ya es un gran recurso para empezar. También recomiendo el muy buen artículo 2D Polygon Collision Detection. Viene con una gran implementación de C# y un ejemplo para la detección de colisiones de polígonos utilizando el Teorema del eje separado y explica mejor algunos de los conceptos.

En lo que se refiere a la colisión, depende del escenario. Para los juegos, es posible que desee comprobar una posible colisión basada en velocidad actual y luego simplemente ajustar la velocidad real para evitar la colisión. También podría implementar algún tipo de efecto de 'rebote'. En cualquier caso, probablemente ajustará tanto la velocidad como la dirección del objeto.

Puede usar el Teorema del eje separador para realizar la detección de colisiones y también utilizar la proyección de polígono para encontrar la distancia al objetivo en un eje específico. (la mayoría de las veces el vector en el que te mueves).

+0

¡Esto es excelente! – Jeff

+0

¡De nada! –

+1

Encuentro que esta versión de C# es un mejor recurso. El tutorial profundiza sobre la proyección de un polígono en un eje, y me parece que el N tut falla. Si alguien tiene alguna confusión del N tut, mira este C# uno. – Jeff

0

Los motores de física son muy complicados. Sería mucho mejor usar uno existente.

  • Farseer (C#, derivado de una versión anterior de Box2D).
  • Box2d (C++, tiene fijaciones .NET)
  • Chipmunk (C, no creo que tiene un puerto # C, pero se podría hacer uno).

Si desea utilizar la física en su juego, use Farseer o una de las encuadernaciones de Box2D. Si quieres aprender sobre física, considera hacer un puerto C# de Box2D o Chipmunk. Si solo tiene curiosidad, todo su código es de código abierto.

+0

Estoy menos interesado en hacer física realista y más interesado en cómo lidiar con la colisión real (como cómo N usa la proyección). Supongo que lo que estoy buscando son los básicos básicos, nada complicado. He visto Box2D y he oído hablar de Farseer, y se ven bastante bien y definitivamente recurriría a uno u otro si decidiera hacer un juego basado en la física. Box2d también está en Flash. – Jeff

1

¿Cuantos detalles necesita? Responder algunas de estas preguntas lo ayudaría a eliminar paquetes que no hacen lo que necesita.

¿Tiene que preocuparse por la rotación de objetos? Entonces debe preocuparse por los brazos de palanca, el momento angular, los momentos de inercia y los momentos de torsión.

¿Tiene que preocuparse por la deformación? Luego tiene que entrar en el análisis de elementos finitos, estrés/tensión, etc., algo que describe cómo los objetos responden internamente a las fuerzas externas.

¿Qué pasa con los efectos de fricción? Entonces necesitará coeficientes de fricción, o posiblemente modelos de velocidad para la resistencia del aire.

¿Efectos gravitacionales? Efectos electromagnéticos? Otras fuerzas?

+1

Yo, literalmente, solo quiero una respuesta básica. Algún tutorial que implemente algo como Mario 3 estaría bien (aunque el New Mario tiene una física bastante divertida ...). Quiero saber qué hacen para responder a las colisiones. ¿Producen un vector de corrección mínimo y se mudan? ¿Usan pequeños resortes? Pero lo más importante es que estoy buscando CÓMO implementaron esto. El tutorial N que publiqué está bastante cerca de lo que estoy buscando, pero prefiero algo más a fondo. – Jeff

-2
+0

He oído hablar de eso. ¿Para qué sirve la colisión? Además, no es realmente lo que estoy buscando, pero gracias :) – Jeff

+0

No estoy seguro de qué entorno está desarrollando, pero Cocos2d se puede utilizar para Mac y iPhone, pero no estoy seguro de qué más se puede usar para (si existe) – gWaldo

+0

cocos es para productos de manzana, no XNA – redcodefinal

1

Si desea una respuesta básica para resp colisión Onse, aquí está:

for each pair of objects that collide 
    ask gently to the collision detection lib their interpenetration distance 
    Apply an impulse (i.e. a force in the duration of the frame) to both objects : 
     force proportional to penetration depth (you will have to tune the coef by hand) 
     direction : perpendicular to the collision normal. 
     application point : the collision point (approximately, since it s not a point anymore but a volume) 
integrate (Euler, Verlet,)\ 
0

buscaba misma información también, el más fácil de usar que he encontrado hasta ahora era

http://www.myphysicslab.com/collision.html

lo peor aquí para mí es tahat esto es sin fricción (impulso de colisión tangente solo impulso normal) y creo que uno con tal impulso de fricción sería mejor, pero aún así no se encontró un tutorial sobre cómo implementar correctamente que