Im working on my 2nd game overall, my 1st using SDL, and Im having trouble with the left and right movement.
The falling motion is working perfectly just by using change in time ( y += yVel * deltaTime; )
However, this isnt working for left/right motion. I need the tetris block to move in increments of 20 pixels, not too quickly. Im thinking 10 times a second maybe, so once every 100ms. Ive tried an if statement using change in time of 100ms but it just seems to get ignored and blocks go across the screen super fast.
Now Im doing this without a tutorial, just grabbing pieces I need from LazyFoo and google, and now Im at my last resort on figuring out this incremental movement.
Can anyone help or provide any advice on this situation?
How my code is set up:
I have a block class with an input function and a move function.
the input function just takes key presses and adjusts velocity while the move function handles changing the x and y offsets and collision. Pretty much just like the motion tutorial on LazyFoo.com aside from the deltaTime code.
I suggest that you can use the same formula: x += xVel * deltaTime.
Why not to decrease x axis velocity value? Then you can set up real X position as x_real = (x / 20) * 20. This will gives you always 20x offset.
As far as I know, tetris is a game that advances in well defined steps (from one cell to the next), but your use of deltaTIme implies that you're breaking that fundamental characteristic.
You should really have a Board structure, which describes what every cell contains. With that, you don't have to actually change the graphical x/y. Instead, the graphical coordinates are generated from board coordinates, whenever they're required for rendering.