Timer schaffen häufig, besonders bei kleinen Intervallen, nie die Angegeben Zeit. So schaft ein Timer mit einem Intervall von 1-2 ms meist nie mehr als 14ms.
Du könntest versuchen das zu berücksichtigen wenn die Schlange berechnest "Timebased Movement" oder du baust dir einen Idle Handler in dem du dann die sleep Methode aufrufst.
Delphi-Quellcode:
procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
begin
//Code der alle 4 ms ausgeführt werden soll.
sleep(4);
done := false;
end;
den musst du dann nur mit
Application.OnIdle := IdleHandler;
setzen.
Gruß roboter202