Как нарисовать снаряд, следуя определенным координатам XY на заданном битпе под Delphi

На самом деле я хочу нарисовать анимированную линию от заданных координат точки к другой точке на растровом холсте, для этого я попытался прочитать некоторые открытые исходные коды OpenGl, но задача, по-видимому, трудна для моих маленьких компетенций в Delphi. Я нашел этот источник C++ на GitHub и это именно то, что я хочу сделать, но в Delphi 2009, если линия анимированная, это может быть лучше для этого личного прототипа игры.

Я попробовал некоторые функции, такие как -LineDDA-, но он очень ограничен. я ищу что-то вроде этого:

 function Make_Projectile( canvas:tcanvas;Start,Target:Tpoint):boolean;   
 with canvas do  
 draw the animated_arc_line  form start to trget;

if we toutch target then result= true else false...
end;

Я попробовал этот кусок кода:

procedure ArcByStartEndAngle(Canvas:TCanvas;P0, P1: TPoint; Angle: Double; NSeg: Integer);
var
  i: Integer;
  len, dx, dy, mx, my, px, py, t, cx, cy, p0x, p0y, an: Double;
  xx, yy: Integer;
begin
  mx := (P0.x + P1.x) / 2;
  my := (P0.y + P1.y) / 2;

  dx := (P1.x - P0.x) / 2;
  dy := (P1.y - P0.y) / 2;

  len := Math.Hypot(dx, dy);

  px := -dy / len;
  py := dx / len;

  if Angle = Pi then
    t := 0
  else
    t := len / Math.Tan(Angle / 2);

  cx := mx + px * t;
  cy := my + py * t;

  p0x := P0.x - cx;
  p0y := P0.y - cy;

  for i := 0 to NSeg + 1 do
  begin

   an := i * Angle / (NSeg + 1);
   xx := Round(cx + p0x * Cos(an) - p0y * Sin(an));
   yy := Round(cy + p0x * Sin(an) + p0y * Cos(an));
   Canvas.Pen.Color:=clBlue;
   Canvas.Brush.Color:=clRed;
   Canvas.Ellipse(xx - 3, yy - 3, xx + 4, yy + 4);
  end;
end;

и для этих аргументов это дает: этот результат

ArcByStartEndAngle(Form1.Image1.Canvas, Point(574,199),Point(62,202), Pi / 2, 8);

Пожалуйста, оставьте кусок кода, который может помочь, или перечислите приведенный выше перевод кода на c для получения желаемого эффекта. следующий скриншот может дать представление: ScreenShoot введите описание изображения здесь **

0 ответов

Другие вопросы по тегам