Pregunta

Así que he estado tratando de recrear Pong en Box2D a aprender a utilizar el motor y yo pensé que crear pong en el que es más complicado de lo que pensaba. Tengo la colisión por sí mismo, tengo el juego de bolas de restitución en el 1,0, el único problema es que no tengo idea de cómo hacer que la pelota pegó en la paleta, de vuelta de rebote en el ángulo derecho y tiene la velocidad suficiente para llegar al otro lado. Sólo quiero que se vea como un juego de Pong natural. He mirado en C ++, ActionScript, pero parece que nadie ha aplicado plenamente un juego de mesa.

¿Tendría que acaba de poner en práctica mi propia física?

¿Fue útil?

Solución

Básicamente, la verdadera sensación de Pong, es necesario poner en práctica su propia física.

Los juegos clásicos en general, poner en práctica la física tan simples velocidad y la posición 2D (y tal vez aceleración), y luego falso todo lo demás.

(Vale la pena señalar que incluso moderna falsa juegos lo más que pueden salirse con la. No vale la pena implementar algo de la manera difícil si puede hacerlo de la manera fácil y aún así obtener la misma sensación de juego.)

La física "falsos" para Pong debe ser bastante simple. Aquí es un poco muy básico, no necesariamente completa de la física simple para usted:

Vector2 position;
Vector2 velocity;
protected override void Update(GameTime gameTime)
{
    position += velocity * (float)gameTime.ElapsedGameTime.TotalSeconds;

    if((IsInsideLeftBat(position) && velocity.X <= 0)
            || IsInsideRightBat(position) && velocity.X >= 0)
    {
        velocity.X = -velocity.X; // Bounce the other way
        // To change things up, maybe you can change velocity.Y too.
    }

    // And of course handle the ball going out of the play field, scoring, etc...
}

Ahora, supongamos que realmente tiene necesidad de la física real en su juego. Un juego de mesa con la física real podría ser divertido (, de hecho, alguien ya lo ha hecho, incluso -er real ).

Lo que dije sobre "fingiendo" sigue siendo válida. Física en los juegos es por lo general más acerca de ajustar las cosas para conseguir algo que se siente bien que el realismo real. Tal vez usted necesita para aumentar su coeficiente de rebote a 1,1, y tal vez añadir un poco de arrastre lineal a la pelota para que no vuela fuera de control?

(O si usted está teniendo problemas para conseguir la pelota al otro lado, intente reducir la fricción lineal.)

En realidad lo que es más probable para un "personaje principal" en un juego - que desea mantenerlo en la simulación física para que pueda interactuar con las cosas (quizás su campo de juego está lleno de obstáculos - que podría ser divertido) - pero usted quiere tener completa el control de su movimiento.

Para hacer esto, simplemente, después de sus carreras de física de actualización del motor, entrar y cambiar cualquier valor que no me gusta! En el caso de Pong esto podría ser algo tan simple como restablecer la velocidad de la bola de modo que se mueve con una velocidad constante de cada cuadro. Imagino que ya está haciendo algo como esto para las paletas -. Para fijar su posición cada cuadro

(I utiliza este enfoque cuando hice una de plataformas en un motor de física .)

Otra forma alternativa de cosas falsas podría ser para agregar un controlador de colisión para las paletas que establece la velocidad de la pelota, lo que les guste.

Otros consejos

otra respuesta todavía se aplica al hacer juegos que utilizan motores de física. Pero también he dado cuenta de que usted dice:

  

i tiene fijado el balón restitución en 1.0

¿Tienes el conjunto de paletas de restitución a 1,0? No he comprobado Box2D, pero en Farseer (lo que tengo en la mano y que se relaciona con Box2D) la fuerza restituion utilizado en una respuesta de colisión calculado como promedio (de Arbiter.cs):

_restitution = (GeometryA.RestitutionCoefficient
               + GeometryB.RestitutionCoefficient) * .5f;

Si Box2D funciona de la misma manera, el que probablemente hace no (gracias Mark de comentarios) , también tendrán sus paletas del conjunto de la restitución a 1,0 para obtener el efecto que desea.

(también:. Esto demuestra lo que ayuda a tener el código fuente para el motor de física en la mano)

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