Тема: проект
Показать сообщение отдельно
Старый 01.01.2006, 00:25   #26
Red Ninja(Михайлов Никита)
Оператор ЭВМ
 
Регистрация: 30.12.2005
Сообщений: 45
Написано одно полезное сообщение
Вот измени в своём танке код на этот и проверь!

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;
(Offline)
 
Ответить с цитированием