2d игровая физика, делаю все правильно - PullRequest
3 голосов
/ 15 июня 2011

У меня есть скрытое подозрение, что я делаю это неправильно.Теперь это работает, до такой степени, что гравитация притягивает объект к земле, но у меня возникают проблемы с управлением скоростью объекта.

Что это, мяч прыгает и падает на землю?

У меня есть еще одна функция, называемая «прыжок», которая просто добавляет jSpeed к ее yVel

Iможет увеличить gravity, и он падает быстрее.

Я могу увеличить скорость jSpeed, и она будет расти дольше, но не быстрее

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

Это просто мой эмулятор или что-то на моем конце?

float time = elapsedTime/1000F;
if (speed < maxSpeed){
    speed = speed + accel;
}
if(mY + mVelY < Panel.mHeight){ //0,0 is top-left
    mVelY += (speed);
}

if (!(mY + height >= Panel.mHeight)){
    mVelY = mVelY  + gravity ;
}

mX  =  (float) (mX +(mVelX * time));
mY =  (float) (mY + (mVelY * time));

1 Ответ

0 голосов
/ 15 июня 2011

Я думаю, что у вас есть правильные общие идеи, но многое о вашем коде сбивает с толку.

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

Теперь, как правило, это не тот «прыжок», как вы его описываете.Поэтому для меня, когда игрок нажимает «прыгать», вы должны установить YVel на jspeed и просто позволить гравитационной части уравнения вернуть его вниз - то есть, если вы удалили код:

if(mY + mVelY < Panel.mHeight){ //0,0 is top-left
  mVelY += (speed);
}

Тогда этоненадолго поднялся бы, а затем потерял импульс к гравитации и вернулся вниз - где, как этот код выше, продолжает толкать его вверх, пока он не достигнет вершины, и как только он начнет опускаться, толкнет его обратно вверх.

Интересно, должен ли код вокруг скорости и максимальной скорости действовать на XVel, а не на YVel, как вы кодировали - это будет иметь больше смысла.

...