What Makes a platformer?
Many new developers make a platformer as their first game. Platformers can be easy to make, but they can be not so fun to play if made incorrectly. When you play a platformer, you expect it to feel smooth and responsive. As a judge for many game jams, I have seen beautiful platformers as well as ugly ones. A platformer requires a player. This player needs to be able to have horizontal and vertical movement (unless the game prevents it). When making such game, be sure to include acceleration, deceleration, accurate gravity, friction, and any other component to help your platformer feel better.
Let’s talk about responsiveness. When I press the spacebar, the player should jump. When there is a delay, or when I am just 1 pixel off from a perfect jump, it frustrates me. When your player jumps, they should jump slightly off the ground if you just tap the spacebar. If you hold it down, the player should jump much, much higher. This makes your game feel responsive. One of the biggest issues in indie platformers are the pixel-perfect jumps. When I jump off of a platform and I am just a pixel off, I tend to see the game as unresponsive. To fix this, just add a timer after the player leaves a platform and if they are just a pixel off, alow them to jump.
Now let’s talk movement. Your player should follow the laws of gravity! If you have a space platformer, you should have lower gravity (or higher). Gravity makes the player fall at an increasing speed. Another key aspect is acceleration and deceleration. When the player moves, they should gradually pick up speed. Super Mario Bros. 3 is the perfect example of acceleration and deceleration, though there was just a little too much. When your player is in the air, they should move around slower (horizontally, that is). By adding a separate variable, you can make it easy to include this feature. My final tip is to have one variable that controls the rest of the variables. I use “m’ and multiply every value relating to movement by that variable. Here’s an example:
m = 0.5;
hspeed = 2*m;
vspeed = 2*m;