Как нарисовать снаряд, следуя определенным координатам 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 введите описание изображения здесь **