Сейчас со мной произошла довольно странная вещь. Решив ещё потренироваться в работе с камерой, решил сделать 2D платформер с скроллингом. Возникли трудности, но когда я написал код, я ВНЕЗАПНО задумался, а почему он работает?

Это повергло меня в шок: я не понял как работает мой же код. Когда я его писал, всё выходило машинально и я даже не думал что я делаю, просто делал и всё.
Function UpdWorld()
Color 50,100,255
Rect cx,cy,R1,R2,1
DrawImage road(1),cx,R2-100+cy
End Function
Function UpdPl()
cx=R1/2-px
cy=R2/2-py
a=KeyDown(57)
b=KeyDown(32)-KeyDown(30)
If a>0 And air=0 Then
acv#=5
Else
acv#=acv#-0.3
EndIf
If acv#<-6 Then acv#=-6
If acv#>3 Then acv#=3
If b=0 ach=0
speedh#=ach#*5
speedv#=acv#*2.5
pny#=py#-speedv#
px#=pnx#
If pny<R2-100 Then
py#=pny#
Else
acv=0
EndIf
If b<>0 And air=0 And ach=0 Then
ach#=1
ElseIf b<>0 And air=1 And ach=0
ach#=0.5
EndIf
If air=0 And b<>0 ach=1
If b>0 Then
pnx=px+speedh
ElseIf b<0
pnx=px-speedh
EndIf
DrawImage player_image,R1/2,R2/2
Color 0,0,0
Text 0,0,px
Text 0,25,py
Text 0,50,acv
Text 0,75,ach
Text 0,100,air
If acv<>0 Then
air=1
Else
air=0
EndIf
Color 255,255,255
Rect px-5,py-5,10,10,1
End Function
Решив проверить все переменные я вообще запутался. Оказывается, переменные px,py двигаются быстрее игрока, что ли. То есть, они двигаются в каком-то масштабе относительно игрока: когда квадратик с px;py находится в начале экрана, то и игрок находится в начале карты, когда в конце - игрок в конце и тд. , но визуально кажется что игрок медленнее квадратика. Это оптическая иллюзия, или вообще что это за такое и как это происходит?