Понг в Box2D XNA - PullRequest
       20

Понг в Box2D XNA

1 голос
/ 22 июня 2010

Итак, я пытался воссоздать Pong в Box2D, чтобы узнать, как использовать движок, и я думаю, что создать в нем понг сложнее, чем я думал. У меня есть столкновение само по себе, у меня установлено восстановление мяча на уровне 1,0, моя единственная проблема в том, что я понятия не имею, как заставить мяч ударить по веслу, отскочить назад под прямым углом и иметь достаточную скорость, чтобы достичь другой стороны. Я просто хочу, чтобы это выглядело как естественная игра в понг. Я посмотрел на c ++, actionscript, но кажется, что никто не полностью реализовал игру понг.

Должен ли я просто реализовать свою физику?

Ответы [ 2 ]

6 голосов
/ 23 июня 2010

По сути, для подлинного ощущения понга вам нужно реализовать свою физику.

Классические игры обычно реализуют физику как простую 2D скорость и положение (и может быть ускорение), а затемподделка всего остального.

(Стоит отметить, что даже современные игры подделывают столько, сколько они могут себе позволить. Не стоит реализовывать что-то нелегко, если вы можете сделать это простым способом и при этом получить тот же игровой процессчувствовать.)

"Поддельная" физика для понга должна быть довольно простой.Вот очень простой, не обязательно полный фрагмент упрощенной физики для вас:

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...
}

Теперь, скажем, вам действительно нужна настоящая физика в вашей игре.Игра в понг с реальной физикой может быть забавной (на самом деле кто-то уже сделал это, даже real-er ).

То, что я сказал о "подделке"все еще применяется.Физика в играх, как правило, больше связана с настройкой вещей, чтобы они чувствовали себя лучше, чем реальный реализм.Возможно, вам нужно увеличить коэффициент отказов до 1,1 и, возможно, добавить некоторое линейное сопротивление мячу, чтобы он не вылетел из-под контроля?

(Или, если у вас возникли проблемы с переносом мяча в другойсторону, попробуйте уменьшить линейное сопротивление.)

На самом деле, что более вероятно для "главного героя" в игре - вы хотите оставить его в симуляторе физики, чтобы он мог взаимодействовать с вещами (возможно, ваше игровое полезавалены препятствиями - это может быть весело) - но вы хотите, чтобы завершено контролировало его движение.

Чтобы сделать это просто, после запуска обновления вашего физического движка, зайдите и измените любоеценности, которые вам не нравятся!В случае Понга это может быть что-то простое, например, сбросить скорость мяча, чтобы он двигался с постоянной скоростью в каждом кадре.Я предполагаю, что вы уже делаете что-то подобное для весла - чтобы установить их положение в каждом кадре.

(Я использовал этот подход, когда я сделал платформер на физическом движке .)

Другим альтернативным способом подделки вещей может быть добавление обработчика столкновений к лопастям, который устанавливает скорость мяча именно так, как вам нравится.

0 голосов
/ 23 июня 2010

Мой другой ответ по-прежнему применяется при создании игр с использованием физических движков.Но я также понял, что вы говорите:

У меня установлено восстановление мяча на 1,0

У вас также установлено восстановление весла на 1,0?Я не проверял Box2D, но в Farseer (что у меня есть под рукой и что связано с Box2D) сила восстановления, используемая в ответе на столкновение, рассчитывается как среднее (из Arbiter.cs):

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

Если Box2D работает так же, как это делает , вероятно, , а не (спасибо Марку из комментариев) , вашим веслам также потребуется восстановление на 1.0, чтобы получить желаемый эффект.

(Также: это демонстрирует, как это помогает иметь исходный код для вашего физического движка под рукой.)

...