J'essaie de créer un jeu de voiture simple avec des changements de vitesse manuels. Cependant, j'ai un peu de mal à implémenter les changements de vitesse.
Voici mon code actuel pour la "voiture":
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
}
}
}
Cependant, cette implémentation ne fonctionne pas vraiment. La première vitesse fonctionne bien, mais les changements de vitesse suivants entraînent une baisse de vitesse. En ajoutant des messages de débogage, j'obtiens ces valeurs de vitesse lorsque je change à la limite de 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
Comme vous pouvez le voir, la vitesse après chaque changement est plus lente avant le changement. Comment prendriez-vous en considération la vitesse avant le changement de vitesse afin que la vitesse ne baisse pas lors du changement de vitesse?