Показать сообщение отдельно
  #1  
Старый 18.01.2011, 23:35
Tenesi Tenesi вне форума
Прохожий
 
Регистрация: 18.01.2011
Сообщения: 1
Репутация: 10
По умолчанию 2Д бродилка

Пытаюсь сделать игру наподобие гта)))) чисто для себя. При движении точка почему-то дёргается, хотелось бы сделать движение более плавным, период таймера 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;
Ответить с цитированием