Tôi đang cố gắng tạo ra một trò chơi xe hơi đơn giản với thay đổi thiết bị bằng tay. Tuy nhiên, tôi có một chút rắc rối khi thực hiện thay đổi thiết bị.
Đây là mã hiện tại của tôi cho "xe hơi":
int gear = 1; // Current gear, initially the 1st
int gearCount = 5; // Total no. of gears
int speed = 0; // Speed (km/h), initially 0
int[] maxSpeedsPerGear = new int[]
{
40, // First gear max. speed at max. RPM
70, // Second gear max. speed at max. RPM
100, // and so on
130,
170
}
int rpm = 0; // Current engine RPM
int maxRPM = 8500; // Max. RPM
public void update(float dt)
{
if(rpm < maxRPM)
{
rpm += 65 / gear; // The higher the gear, the slower the RPM increases
}
speed = (int) ((float)rpm / (float)maxRPM) * (float)maxSpeedsPerGear[gear - 1]);
if(isKeyPressed(Keys.SPACE))
{
if(gear < gearCount)
{
gear++; // Change the gear
rpm -= 3600; // Drop the RPM by a fixed amount
if(rpm < 1500) rpm = 1500; // Just a silly "lower limit" for RPM
}
}
}
Tuy nhiên, việc thực hiện này không thực sự hiệu quả. Thiết bị đầu tiên hoạt động tốt, nhưng các thiết bị sau thay đổi gây ra giảm tốc độ. Bằng cách thêm một số thông báo gỡ lỗi, tôi nhận được các giá trị tốc độ này khi thay đổi ở giới hạn RPM:
Speed at gear 1 before change: 40
Speed after changing from gear 1 to gear 2: 41
Speed at gear 2 before change: 70
Speed after changing from gear 2 to gear 3: 59
Speed at gear 3 before change: 100
Speed after changing from gear 3 to gear 4: 76
Speed at gear 4 before change: 130
Speed after changing from gear 4 to gear 5: 100
Như bạn có thể thấy, tốc độ sau mỗi thay đổi chậm hơn trước khi thay đổi. Làm thế nào bạn sẽ xem xét tốc độ trước khi thay đổi bánh răng để tốc độ sẽ không giảm khi thay đổi bánh răng?