Пытаюсь сделать игру наподобие гта)))) чисто для себя. При движении точка почему-то дёргается, хотелось бы сделать движение более плавным, период таймера 20мс. В качестве всех объектов использую Shape. Мне кажется это из-за того что координаты объекта left,top целые числа.
http://rghost.ru/3990871
Код:
procedure TForm1.tmr1Timer(Sender: TObject);
var
i:integer;
b:boolean;
foo:TPoint;
begin
GetCursorPos(foo);
edt4.Text:=IntToStr(foo.x-form1.left);
edt5.Text:=IntToStr(foo.y-form1.top-60);
{angle:=;}
//============================================================
// Вычисление движения по углу.
// Границы угла от 0 до 360 градусов.
//============================================================
if (ObjP>0) and (ObjS>=0) then
begin
x:=Round(JUMP_SPEED*cos((angle*2*PI)/360));
y:=Round(JUMP_SPEED*sin((angle*2*PI)/360));
ObjP:=ObjP-1;
edt1.Text:='Скорость: '+FloatToStr(JUMP_SPEED);
end
else
begin
edt1.Text:='Скорость: '+FloatToStr(ObjS);
x:=Round(ObjS*cos((angle*2*PI)/360));
y:=Round(ObjS*sin((angle*2*PI)/360));
end;
if angle+ObjA<0 then
angle:=360;
if angle+ObjA>360 then
angle:=0;
angle:=angle+ObjA;
//============================================================
// Проверка всех объектов на столкновения.
// OBJECT_COUNT - количество существующих объектов.
//============================================================
b:=true;
for i:=1 to OBJECT_COUNT do
if not(ObjColl(shp1.top+y,shp1.Left+x,i,h)) then
b:=False;
//============================================================
//============================================================
//============================================================
// Проверка условий для движения.
// Движение.
//============================================================
if b and BorderColl(shp1.Left+x,shp1.Top+y) then
begin
pnl2.Left:=pnl2.Left-x;
pnl2.Top:=pnl2.Top-y;
shp1.Left:=shp1.Left+x;
shp1.Top:=shp1.Top+y;
end;
//============================================================
//============================================================
end;