2010-02-09 16 views
7

Estoy tratando de hacer (descubrir cómo ...) una plataforma de 2d en XNA.XNA C# 2D juego de plataformas

Sé cómo crear una cuadrícula de mosaico y cómo realizar la detección de colisión. Realizo la detección de colisión en los 9 bordes del jugador, pero me gustaría saber si hay una mejor manera de realizar la detección de colisión.

He leído que Braid no utiliza mosaicos, sino imágenes reconstruidas o algo así, ¿cómo se realiza la detección de colisiones? y es mejor que usar fichas?

Respuesta

3

Suponiendo que no le importe utilizar una herramienta de terceros para hacer la mayor parte del trabajo, es mejor que utilice algo como Box2D para C#.

http://www.box2d.org/ http://code.google.com/p/box2dx/

Esta biblioteca le dará el capacidades de detección de colisiones y física.

+5

utilizando una biblioteca de física para la detección de colisiones simple para su personaje principal en un juego de plataforma es generalmente una mala idea. Se necesita un gran esfuerzo para modificarlo y hacer que el movimiento y el tacto sean correctos. Los juegos como Mario no son físicamente correctos y, por lo tanto, son mucho más divertidos de jugar. Eso no quiere decir que parezca comportarse y cumplir con algunas reglas (como que el personaje principal se cae debido a la gravedad) es solo que está programado para sentirse bien, en lugar de físicamente correcto. – Toad

+0

Box2D y Farseer Physics, como se menciona a continuación, son API de física extremadamente simples. De hecho, son tan simples que podría argumentar que establecer un mundo basado en lo físico implicaría menos líneas de código que rodar su propia detección de colisión. Incluso para una simple plataforma en 2D. – xgalaxy

+2

el problema con la física (una vez más) es que toma mucho tiempo para hacerlo bien. Todo es posible, lo cual es divertido para algunos juegos, pero normalmente no quieres que el personaje principal interactúe y use todo. Los juegos basados ​​en la física se convierten rápidamente en juegos de simulación de estilo, mientras que los juegos de plqtform son mucho más directos que los de estilo arcade. No significa que utilicen elementos de física para ciertos elementos, pero definitivamente no significa que todo esté simulado. – Toad

0

¿Ha comprobado los ejemplos en la serie de colisiones en el club de creadores XNA, en particular la muestra pixel-collision?

+3

Con un juego de plataforma, realmente no quieres la detección de colisión perfecta de píxeles. Significaría que si el personaje principal se anima, eso a veces (debido a que su mano sobresale, por ejemplo) choca contra una pared, y luego vuelve a andar, y aún puede caminar 2 píxeles. Lo que normalmente hace es definir ya sea unos pocos cuadros de colisión o una forma de elipsoide invisible alrededor del personaje y usar esto como su área de colisión. – Toad

+0

@reinier: He escrito juegos de plataformas 2D donde la colisión entre el héroe y las fichas no era perfecta, pero la colisión entre objetos (como bolas) y las fichas era perfecta y entre los objetos y el héroe también eran perfectos. Por lo tanto, puede ser más complejo que "colisión sin píxeles perfectos". :) – SyntaxT3rr0r

+0

@reinier: buen punto, estoy de acuerdo. –

1

Si piensas en un estilo retro, ¡está bien utilizar baldosas! Sin embargo, si quieres algo más "moderno", entonces puedes utilizar un motor de física más convencional. Farseer Physics es un gran motor, y varias personas lo han usado para hacer plataformas. Está basado en Box2D y motores similares, pero ofrece una API más simple y varias características únicas (como textura a geometría) y yo mismo puedo testificar que es bueno haber jugado un poco con esto.

1

Probablemente necesites un poco más que la detección de colisión para un juego como Braid. Asumiría que también necesitas un motor de física. Yo recomendaría que eche un vistazo a Farseer Physics engine, que es un motor 2D que funciona muy bien con XNA. Es compatible con una serie de técnicas diferentes para la detección de colisiones.

+0

Gracias, echaré un vistazo a farseer. – Restart

+0

He estado mirando a Farseer ahora, a partir de las muestras que tiene se ve bien pero no puedo hacer que la detección de colisiones entre 2 geoms funcione. Creé un PhysicsSimulator, 2 Bodys, 2 Geoms, y ahora 1 cuerpo se cae debido a la gravedad. El problema es que cae directamente a través del otro cuerpo. – Restart

+0

@Restart: ¿Miraste todas las demos? Hay muchos ejemplos de detección de colisión. –