Chỉnh sửa: Tôi đã khắc phục sự cố bằng cách thực hiện bước nhảy được sửa đổi và thêm vào, và tốc độ chỉ bằng tốc độ nhảy * t. Đây là những gì tôi có ngay bây giờ:
if (GUI->Space && grounded){
jumpvelocity = -185.f * 2 / gravity;
grounded = false;
}
if(!grounded ){
if(jumpvelocity < terminaly){
jumpvelocity += 185.f * t * 4 / gravity;
yvelocity = jumpvelocity * t;
}
else{
jumpvelocity = terminaly;
yvelocity = jumpvelocity * t / gravity;
}
}
else{
yvelocity = 0.f;
jumpvelocity = 0.f;
}
Cảm ơn đã giúp đỡ.
Tôi đang cố gắng để làm cho trọng lực của tôi để làm việc. Mã tôi có cho đến nay là
if (jumpvelocity < 0){
yvelocity = jumpvelocity * t *2/gravity;
jumpvelocity += 185.f*t * 2 / gravity;
}
else if(!grounded ){
if(yvelocity < terminaly)
yvelocity += t / gravity;
else
yvelocity = terminaly;
}
Trọng lực lên cao, làm cho cao hơn rơi xuống và nhảy chậm hơn. Giá trị mặc định của nó là 1. Jumpvelocity được đặt thành 185 khi người chơi muốn nhảy. Vấn đề của tôi là bạn rơi chậm hơn ở tốc độ khung hình chậm hơn, nhưng bạn nhảy với tốc độ tương tự như thể nó là tốc độ khung hình cao hơn. Làm thế nào tôi có thể làm cho nó khung độc lập? T là thời gian đồng bằng.
jumpvelocity
với giá trị trước đó của nó khi cập nhật yvelocity
, gây ra lỗi chính xác sẽ trở nên tồi tệ hơn ở tốc độ khung hình thấp hơn. Những gì bạn gọi yvelocity
thực sự nên là ymovement
vì nó là một vận tốc nhân với thời gian. Bạn đang cập nhật jumpvelocity
khi nhân vật không còn chạm đất, không có ý nghĩa vật lý. Kiểm tra của bạn terminaly
được thực hiện trước khi cập nhật, gây ra jumpvelocity
lớn hơn terminaly
và xấu đi ở tốc độ khung hình thấp hơn.