2008-12-01 9 views
16

que era un fin de semana largo, por lo que ha conseguido el insecto codificación de nuevo y comenzó a jugar en torno a:2d física de plataformas

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

escribí un motor básico de baldosas, pero que nunca había intentado esto antes, yo soy realmente luchando con el manejo de la detección de colisiones de sprites e implementando física realista para la gravedad.

Para cualquier otro escritor de juegos de hobby, ¿me puede indicar algunos recorridos sobre la mejor manera de abordar esto?

Actualización:

pensé que me gustaría compartir un informe de progreso:

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

Su todavía, pero la detección de colisiones muy cochecito está trabajando sobre todo, me He comenzado 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; 
+8

¡El video está apagado! –

Respuesta

1

que puede ser un rodeo, pero probar el kit de inicio de plataformas de XNA 3.0, que contiene cosas como la física básica y la detección de colisiones. Tendrá que cambiar cosas para que funcione fuera de XNA, pero no es ciencia de cohetes.

XNAGS 3.0 download

2

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 hacer no tiene la gravedad realista. ¡Simplemente haz lo que haga que el juego sea divertido!

+4

Técnicamente, creo que primero debes actualizar la posición (por lo que usa la velocidad del paso de tiempo anterior) y luego actualizar la velocidad. – gnovice

+0

@gnovice Aún más técnicamente, echa un vistazo al verlet – super

-6

¿Has oído hablar de GameMaker?

+7

Eso le quita toda la diversión. – FlySwat

+0

quieres pasar tu vida haciendo las cosas de la manera difícil, sé mi invitado – wjhplano

2

jnrdev puede 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.

+0

Gracias por ese enlace. Iba a recomendarlo también, pero desde entonces se ha perdido a lo largo de los años en mis marcadores :) – grepsedawk

0

No sé lo que está utilizando para un modelo de física, pero los modelos de física que usan fluid drag se han direccionado recientemente en another SO question. No repetiré todo lo que di en mi respuesta, solo voy a link to it.

En resumen, el OP de la pregunta quería acelerar un objeto desde el reposo a 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.

2

Hay un par de tutoriales de plataformas en 2D realmente ú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 ... .)

+0

por su aspecto, los tutoriales que sugerí cubren cosas similares a jnrdev mencionadas por Zack Mulgrew. Todavía no he leído jnrdev (más allá de un vistazo inicial), así que no puedo compararlos realmente. – bm212

0

Su error con los bloques múltiples que se golpean, usted podría solucionar eso golpeando solamente el bloque que está más alineado con el playerprite, o tiene la menor compensación. Asegúrese de no limitarlo a una sola dirección. Los bloques realmente pueden ser golpeados desde cualquier dirección en Mario. (Arriba haciendo un ground libra en los mismos juegos, o el drill-spin-thing) (Laterales mediante un shell)

0
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();