2d игровая физика, делаю все правильно

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

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

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

Я могу увеличить 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 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам