1
\$\begingroup\$

Im trying to make a car game, but i cannot get the acceleration code right. With this code:

        if(gas){
        speed += 3;
    }else if(break_ && !(speed < 6)){
        speed -= 3;
    }else if(!break_ && !gas && !(speed < 6)){
        speed -= 0.3;
    }else{
        speed = 6;
    }

it is up on 1000 within 5 secounds. I tried multiplying it with smaller numbers, but it still doesnt work(in fact it got worse). So, how can this be improved so it has reasonable parameters? Asof the maximum speed, i can implement that on my own.

\$\endgroup\$
4
  • 2
    \$\begingroup\$ Quick tip: cars have "brakes" not "breaks". So your variable can be called "brake" and you don't need the underscore after it. :) \$\endgroup\$ Commented Nov 4, 2015 at 20:18
  • 2
    \$\begingroup\$ Do you have any concept of a frame time. Or change per second. I expect your loop is freewheeling as fast as it can. Hence the issue. Always measure frame time and multiply it by a rate of change to get actual change \$\endgroup\$ Commented Nov 4, 2015 at 20:19
  • \$\begingroup\$ What is this >6 stuff? \$\endgroup\$ Commented Nov 4, 2015 at 20:27
  • \$\begingroup\$ Jon it is to prevent the speed from going below 6 \$\endgroup\$ Commented Nov 4, 2015 at 20:30

1 Answer 1

3
\$\begingroup\$

Try adding in a Velocity variable. But more importantly, you need to keep track of your deltaTime, which is the time that elapsed since your last frame.

More than likely the framework you are using has this, if not you will need to implement one.

float Velocity;
float Speed = 3;     //Your speed could vary here

if(gas){
   Velocity += Speed * deltaTime;     //when gas is pressed, speed up
}
else if (brake && (Velocity > 6)) {
   Velocity -= Speed * deltaTime;      //When brakes are pressed, slow down
} 
else if(!brake && !gas && (Velocity > 6)){
   Velocity -= Speed * deltaTime;     //friction should be a different value than Speed
}
else {
    Velocity = 6;
}


//Update the position
Position.Axis += Velocity;
\$\endgroup\$
3
  • \$\begingroup\$ The position.axis change should also be multiplied by delta. Other than that; exactly this \$\endgroup\$ Commented Nov 4, 2015 at 20:22
  • \$\begingroup\$ The speed determines how quick the stripes moves(everything else stands still). However, how do i get the delta time? Im using Android, but it should be the same as normal Java \$\endgroup\$ Commented Nov 4, 2015 at 20:28
  • 1
    \$\begingroup\$ @Polarbear0106 gamedev.stackexchange.com/a/56993/10728 typically you would use a framework/engine, which takes care of this stuff for you ;) \$\endgroup\$ Commented Nov 4, 2015 at 20:46

You must log in to answer this question.