Вот измени в своём танке код на этот и проверь!

program Tanks;
var
GameFF: array[1..30, 1..30] of integer;
MO: array[0..10] of image;
i,j,t,xc,yc,xc1,yc1: integer;
SXPos,SYPos: integer; { Position Screen on Map }
StageRes: resource;
Tank1: array [1..4] of image;
keyAction :integer;{Click Key}
UTT:integer; { Type of Tank for User }
UXPos,UYpos: integer; { UserPosition on Area }
Exit:integer;{Exit}
Secund:command;
Secund1,Secund2,SecundD:integer;
Procedure Camera(xi,yi:integer;);
begin
for i:=1 to (getwidth/16) do for j:=1 to (getheight/16) do
begin
if xi<0 then xi:=0;
if yi<0 then yi:=0;
if xi>(30-getwidth/16) then xi:=(30-getwidth/16);
if yi>(30-getheight/16) then yi:=(30-getheight/16);
drawimage(MO[GameFF[i+xi,j+yi]],(i*16)-16,(j*16)-16);
end;
end;
begin
{ Loading Stage 1 }
{ Setting Stage Constants }
UXPos:=32;UYPos:=32;
{ Loading Images }
MO[1]:=loadimage('/Wall1.png');
MO[0]:=loadimage('/Floor1.png');
Tank1[1]:=loadimage('/tank1.png');
Tank1[2]:=loadimage('/tank2.png');
Tank1[3]:=loadimage('/tank3.png');
Tank1[4]:=loadimage('/tank4.png');
{ Loading Map }
StageRes:=OpenResource('/stage1.tt');
if ResourceAvailable(StageRes) then begin
for i:=1 to 30 do for j:=1 to 30 do begin
repeat
t:=readbyte(StageRes);
until (t=$30)OR(t=$31);
GameFF[j,i]:=t-$30;
end;
end;
CloseResource(StageRes);
{ Main Loop }
SXPos:=0;
SYPos:=0;
t:=1;
SecundD:=1000;
repeat
Secund1:=GetRelativeTimeMs;
keyAction := keyToAction(getKeyClicked);
if keyAction = GA_RIGHT then SXPos:=SXPos+t;
if keyAction = GA_LEFT then SXPos:=SXPos-t;
if keyAction = GA_DOWN then SYPos:=SYPos+t;
if keyAction = GA_UP then SYPos:=SYPos-t;
Camera(SXPos,SYPos);
if keyAction = GA_FIRE then Exit:=999;{EXIT}
repaint;
delay(SecundD);
Secund2:=GetRelativeTimeMs;
RemoveCommand(Secund);
Secund := CreateCommand(IntegerToString((Secund2-Secund1)-SecundD),CM_OK, 1);
AddCommand(Secund);
until Exit=999
end.
ФПС должно быть получше и скажи солько у тебя будет равно Secund
Чтобы приложение стало быстрее поставь делай SecundD:=1;