Os pixels estão ativados ou desativados. A quantidade mínima que você pode mover um sprite é um único pixel. Então, como você faz o sprite se mover mais lento que 1 pixel por quadro?
A maneira como fiz isso foi adicionar a velocidade a uma variável e testar se havia atingido 1 (ou -1). Se isso acontecesse, eu moveria o sprite e redefiniria a variável para 0, assim:
update(dt):
temp_dx += speed * dt
temp_dy += speed * dt
if (temp_dx > 1)
move sprite
reset temp_dx to 0
if (tempy_dy > 1)
move sprite
reset temp_dy to 0
Eu não gostei dessa abordagem porque parece boba e o movimento do sprite parece muito irregular. Então, de que maneira você implementaria o movimento sub-pixel?