From my experience fullscreen and window should be equally fast, but in fullscreen the difference is often in lower resolution or bitrate. Windowed mode uses bitrate of desktop and it cannot be overriden.

If you plan going realtime style (might also apply frame way), there is at least 2 options:
- Vector based collision:
Creates a line from old position to new position and checks for intersections to collide. On complex landscapes needs optimizations like quadtrees or other to be fast enough.

- Limited speed:
Lets say lagcount for this frame is 80ms. Assume it is known that game runs smoothly if lagcount stays at 50ms.. so it would split the tick into 30ms and 50ms. Generally physics count much faster than graphics code. Draw graphics separately after physics loops are finished, so do not include drawing code in loop below:

[pascal]procedure GameTick(LagCount: integer);
begin
while LagCount>50 do begin
GameTick(50); dec(LagCount,50);
end;

// Process game events here, and LagCount will never exceed 50ms...

end;[/pascal]