tutorial source open melonjs game fun framework fast engine crafty and physics tile-engine

physics - source - Física de Platformer 2d



phaser (9)

Descargue el motor FarseerPhysics, eche un vistazo a cómo funciona http://www.codeplex.com/FarseerPhysics ¡Creo que es lo mejor disponible para XNA / Silverlight!

Fue un largo fin de semana festivo, así que volví a encontrar el error de codificación y comencé a jugar:

Mario http://gfilter.net/junk/tileengine.jpg

Escribí un motor de mosaico básico, pero nunca había intentado esto antes, realmente estoy luchando con la detección de colisiones de sprites y la implementación de la física realista para la gravedad.

Para cualquier otro escritor de hobbies de juegos, ¿puedes dirigirme hacia algunos recorridos sobre la mejor manera de abordar esto?

Actualizar:

Pensé que compartiría un informe de progreso:

http://www.youtube.com/watch?v=-RKNQ2UiiLY <- Juego en acción

Todavía tiene errores, pero la detección de colisiones funciona, he empezado a trabajar en otras funciones (como golpear los bloques (observar el error) e interactuar con los enemigos).

Mario todavía camina como si estuviera en la luna, estoy usando estas constantes, ¿algún consejo para ajustarlas para obtener más realismo?

const float AirDrag = 1.00f; const float GroundFriction = .97f; const float Gravity = 0.8f;


Eso puede ser un desvío, pero prueba el kit de inicio de plataformas de XNA 3.0, que contiene cosas como física y detección de colisión básica. Tendrá que cambiar cosas para que funcione fuera de XNA, pero no es ciencia de cohetes.

Descarga de XNAGS 3.0



La gravedad es fácil:

const gravity = ... ; // pixels per timestep (eg. video frame) squared // while in freefall, each timestep: y_velocity += gravity; y_pos += y_velocity;

Eso sí, la mayoría de los juegos de plataformas en 2D que he jugado no tienen gravedad realista. ¡Simplemente haz lo que haga que el juego sea divertido!


jnrdev podría ser de alguna ayuda. Cubre la colisión / respuesta de los azulejos y las pendientes. No es el mejor código que he visto en mi vida, pero hace el trabajo bien.


Hay un par de tutoriales de plataformas bidimensionales muy útiles en http://www.metanetsoftware.com/technique/tutorialA.html y http://www.metanetsoftware.com/technique/tutorialB.html . Creo que han sido mencionados por otros en otras partes de SO. Cubren la detección y respuesta de colisión, la emisión de rayos, diversas técnicas de optimización, etc. y tienen una buena explicación de la teoría detrás de todo esto para aquellos (como yo) que están menos inclinados matemáticamente. No va tan lejos como cosas como la dinámica corporal rígida, pero no creo que necesites eso para el tipo de juego que estás escribiendo (aunque, por supuesto, sería fantástico si añadieses este tipo de cosas ... .)


Tu error con los múltiples bloques que se ven afectados, podrías arreglarlo solo al golpear el bloque que esté más alineado con el jugador, o que tenga el menor desplazamiento. Asegúrese de no limitarlo a una sola dirección. Los bloques realmente pueden ser golpeados desde cualquier dirección en Mario. (Arriba haciendo una libra de tierra en los mismos juegos, o el taladro-giro-cosa) (Laterales mediante el uso de un caparazón)


UIGraphicsBeginImageContext(images.size); CGContextRef context = UIGraphicsGetCurrentContext(); UIColor *color = [UIColor whiteColor]; [color setFill]; CGContextTranslateCTM(context, 1, images.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextSetBlendMode(context, kCGBlendModeDestinationOver); CGRect rect = CGRectMake(0.0, 0.0, images.size.width, images.size.height); CGContextDrawImage(context, rect, images.CGImage); CGContextClipToMask(context, rect, images.CGImage); CGContextAddRect(context, rect); CGContextDrawPath(context, kCGPathFill); images = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();


No sé lo que estás usando para un modelo de física, pero los modelos de física que usan arrastre de fluidos fueron abordados recientemente en otra pregunta de SO . No voy a repetir todo lo que di en mi respuesta, solo lo enlazaré .

En resumen, el OP de la pregunta quería acelerar un objeto desde el reposo hasta una velocidad máxima. Pasé por algunas derivaciones para modelar la velocidad como una función del tiempo para dos tipos diferentes de arrastre. Su situación puede ser ligeramente diferente, por lo que las integrales utilizadas pueden tener diferentes formas o deben resolverse con diferentes condiciones iniciales, pero con suerte mi respuesta lo guiará en algunas direcciones informativas.