scratch updates the screen after every code block, rather than having a bunch of code it runs every tick before rendering. Your code basically needs to ask "will I run into something if I move here? if so, move forward until I run into it, then stop" there's no good way to do that without using "move 1" or whatever, which means you'll see it moving really slow whenever it's going to hit something instead of it doing all those move 1's at once, then rendering the frame, which is what should happen.
tl;dr there's no good way to make a collision engine in scratch that doesn't run super slow