Quote: "Increasing the rate of movement means skipping pixels to give it the illusion of moving faster, or is there another way of doing this?"
I'm pretty sure this is the only working solution, since you can't really do anything about the 60 FPS limit. Also note that your current implementation would not work well on slower computers. If the program runs with only 200 FPS by itself due to the PC needing more time to render the scene, your fast sprites (moving more often than every 5ms) would be slowed down.
However, skipping pixels to "give the illusion of moving faster" really isn't a big deal. Just think of movies - they've only got 24 FPS, but if a car moves from the left side of the screen to the right, you still perceive it as moving, although it skips 80 pixels each frame (assuming a full HD resolution).
And while the human eye can spot the difference between 24FPS and 60FPS (both appearing as motion, but the latter a little more fluent), I believe we can't see any difference between 60FPS and 120FPS or even 1000FPS. So what it comes down to is that nobody would even be able to tell the difference between a game running at 1000FPS, and a game running at 60FPS but using the method mentioned above.
Edit: I wrote a small example code.
Rem Project: Dark Basic Pro Project
Rem Created: Sunday, February 02, 2014
Rem ***** Main Source File *****
set display mode 800,600,32,0
set window on
sync on
sync rate 1000
sync
next1 = timer()
next2 = next1
next3 = next1
do
cls
t = timer()
rem Update First Row every frame
off0 = (0.5*t mod 200) - 160
rem Update Second Row every 16ms (~60FPS)
if t > next1 then off1 = off0 : inc next1, 16 : if next1 < t then next1 = t
rem Update Third Row every 40ms (~24FPS)
if t > next2 then off2 = off0 : inc next2, 40 : if next2 < t then next2 = t
rem Update Fourth Row every 100ms (10FPS)
if t > next3 then off3 = off0 : inc next3, 100 : if next3 < t then next3 = t
rem Draw
ink 0xFFFFFFFF,0
drawRow(off0, 20)
drawRow(off1, 180)
drawRow(off2, 340)
drawRow(off3, 500)
ink 0xFFFF0000,0
print "FPS: ", screen fps()
sync
loop
function drawRow(offx, offy)
for i = 1 to 5
box offx, offy, offx + 80, offy + 80
inc offx, 200
next
endfunction
It renders four rows of moving boxes. The first row moves at the maximum FPS rate, the second one is updated every 16ms (hence it moves at about 60FPS), the third row at 24FPS and the fourth one at 10FPS. If you just compile the code the way it is, you'll possibly see a small difference between the first two rows - however, this effect vanishes once you turn on VSync (line 6, change last parameter from 0 to 1), and the rows will behave identical and look even better than before since the tearing is gone. There's just no way for you to notice that those boxes skip pixels at this FPS rate.
Row #3 looks kind of choppy in comparison, but if you added a bit of motion blur to the box it would probably look like proper movement as well - but that doesn't really matter at this point.