Si algo se mueve a 3 pixels por frame, y el pintado = movimiento, puedes atravesar cosas.
Pero si lo separas, el movimiento y las colisiones se pueden calcular varias veces por frame de repintado.
Esto lo puedes hacer en terminos de "pixeles" (moviendo 3 veces 1 pixel), o por trigonometría (intersecciones de lineas, etc), depende del caso.
Por ejemplo, en un "Pong", si la pelota se mueve 5 pixeles por frame, y en un frame determinado la pelota está a 1 pixel de tocar una de las raquetas, en el siguiente repintado hay que haber hecho la colisión, rebotar la pelota, y moverla. Para hacer eso, la posición de los objetos no se obtiene de la posición de los "sprites", sino al revés. Los "objetos" del juego se mueven, colisionan, tienen efectos, y cada X tiempo, se pintan.
Es como si en el bucle de juego, la entrada se evaluara 1 vez, el movimiento y colisiones se evaluaran X veces, y luego se pintara 1 sola vez.