Uh. That's kind of bad practice. You should base your game mechanics on physics.
An object in motion stays in motion (
Okay. It's already moving so I should not change an objects velocity.) unless acted upon by an outside force. (
Okay. Friction is a force. I will use that.)
There are two types of friction. If you only care about coasting when the arrow key is released, then you only need to worry about kinetic friction. If you're moving across a solid surface, then friction is proportional to your speed. f = -k * x' = -k * v = -kinetic_friction_coefficient * speed. Force increases or (in this case) decreases speed in a given direction over time. So you just subtract more or less from the speed depending on the friction, which depends on the speed you are traveling.
1 2 3 4 5 6 7 8 9 10 11 12 13
| if(right && !left) { vx = 5; } else if(left && !right) { vx = -5; } else { vx -= 0.5 * vx; } x += vx; |
If you wanted acceleration when the key is pressed, you would use vx += something instead of vx = something.
Changing k changes how slippery the surface is. A value of zero is frictionless, so you never lose speed. A value of 1 makes you stop instantaneously.