Próbuję stworzyć prostą grę samochodową z ręczną zmianą biegów. Mam jednak problem z wprowadzeniem zmiany biegów.
Oto mój obecny kod „samochodu”:
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
}
}
}
Jednak ta implementacja tak naprawdę nie działa. Pierwszy bieg działa dobrze, ale kolejne zmiany biegów powodują spadek prędkości. Dodając niektóre komunikaty debugowania, otrzymuję te wartości prędkości podczas zmiany przy limicie 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
Jak widać, prędkość po każdej zmianie jest wolniejsza przed zmianą. Jak weźmiesz pod uwagę prędkość przed zmianą biegów, aby prędkość nie spadła podczas zmiany biegów?