Am besten misst du die Zeit in der Schleife mit TimerInit und TimerDiff.
Bei einer Framerate von 40 machst du ein Sleep mit (25 - TimerDiff)
Das fiese daran ist, dass ein Sleep(1) genausoviel Zeit benötigt wie Sleep(10), also hast du trotzdem eine Schwankungsbreite von 10ms.
evtl. hilft hier die Funktion HighPrecisionSleep (hier im Forum zu finden), oder du machst es etwas anders:
Sleep(10), wenn gemessene Zeit <= 15
Wenn Zeit >= 25ms, dann werden die Berechnungen ausgeführt.
(Wenn ich mich richtig erinnere, ist dies die Methode, wie ich sie bei SuperMario verwendet hab)
Zum KollisionsCheck:
Du könnest die Bricks in Gruppen verwalten. z.B. alle Bricks einer Zeile gehören zusammen.
Somit kannst du die ganze Gruppe überspringen, wenn die Y-Koordinate des Balles nicht passt. anstatt jedesmal einen kompletten Kollisionscheck durchzuführen...
E