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, как вы кодировали, - это будет иметь больше смысла.