GML
if x == 20 & yy == 20 {hspeed *= -1; vspeed *=-1}
Pętla while nie jest wykonywana co step, bo sam step jest pewnym rodzajem pętli. Gdybyś wrzucił while w step, gra zatrzymałaby się na aktualnej klatce aż do skończenia pętli. Wszystko inne w grze by po prostu stało, bo kod wykonywał by się tylko dla tego jednego obiektu.
Dla testu możesz sprawdzić:
GML
while (true) {}
Ale ostrzegam, bez Alt+Shift+Esc się nie obejdzie.