Pregunta

He estado jugando este juego flash y después Había superado la reacción inicial ('lol, fuego'). Comencé a preguntarme cómo podría replicar este comportamiento de mutación de contacto en la programación. Supongo que es un poco como el honeypot xkcd .

Estaba pensando en comenzar con un escenario donde las partículas se desvían entre sí y las paredes que las contienen. La secuencia comenzaría con un número determinado de partículas 'mutantes', y cuando estos mutantes chocan con partículas regulares, se convierten en mutantes. Podría trabajar en algunas cosas más divertidas más tarde.

Mi problema es cómo comenzar con esto. Estoy planeando hacerlo en C # usando los elementos de dibujo de .NET (aunque soy bastante nuevo en C #; si hay una parte diferente de .NET que debería usar, avíseme) pero si hay algún documento general sobre él, estaría interesado en leerlos (si están disponibles en línea, por supuesto).

Gracias Ross

¿Fue útil?

Solución

Creo que está en el camino correcto con lo que está pensando, algunas partículas en una caja estaría bien aquí. No puedo imaginar que encuentre documentos sobre un caso tan específico y simple, pero tal vez para algunas de las técnicas requeridas, pero una implementación del backend debería ser relativamente simple en comparación con un renderizador.

Para mover las partículas alrededor de un método simple es Euler iteration , donde almacena Las posiciones y velocidades. posición = posición + velocidad * dt; donde dt es el cambio en el tiempo desde el último fotograma. Es mejor mantener dt fijo e interpolar entre puntos para el renderizador si puede ... esto reducirá los problemas de estabilidad y facilitará la detección de colisiones.

Para reflejar una partícula fuera de una pared, verifique si sus componentes x o componentes de posición y excederán los límites y luego voltee el signo del otro componente de la velocidad, por ejemplo

if(Math.Abs(position.x_component + velocity.x_component * dt) > x_bound) 
    velocity.y_component = -velocity.y_component;

if(Math.Abs(position.y_component + velocity.y_component * dt) > y_bound)
    velocity.x_component = -velocity.x_component;

Si tiene dt constante, esto funciona bastante bien, pero si varía, tendrá que hacer algo más complicado. encuentre el punto de colisión con el cuadro y refleje la parte de el vector fuera de la caja en la cara con la que colisionó.

Para colisionar las partículas entre sí, probablemente sea mejor verificar la distancia, ya que activa la reflexión una vez que la distancia es demasiado pequeña. es decir, si se acercan demasiado, chocan. Refleje los componentes de la velocidad como si las partículas fueran esferas, por lo que lo normal para la reflexión es la diferencia de sus posiciones.

Puede encontrar este artículo en gamedev también es útil ...

Espero que esto ayude.

Otros consejos

¿Por qué no echar un vistazo al clásico juego de asteroides como punto de partida? Aquí hay un enlace a uno que no usa DirectX y está en c #

http://www.codeproject.com/KB/GDI-plus /asteroids.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top