如何在Delphi下在给定的位图上按照特定的XY坐标绘制弹丸

时间:2018-09-27 19:26:20

标签: delphi projectile

事实上,我想从给定的Tpoint坐标到Bitmap画布上的另一个Tpoint绘制一条动画线,因为我试图读取OpenGl的一些开源资源,但是我发现的delphi的小能力似乎很难完成这个C++ source在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;

对于这些参数,它给出了:this result

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

请留下一段代码,可以帮助上面的c代码翻译或在上面列出以获得所需的效果。 以下屏幕快照可能会提示您:ScreenShoot enter image description here  **

0 个答案:

没有答案