组装19 人物动画的简单实现 绘画出网格更直观

Pic005
 UNITX = 48;
 UNITY = 32;


procedure TForm1.DrawGrid;
var
  i: Integer;
begin
 
  with DXDrawHuman.Surface.Canvas do
  begin
    Pen.Color := clWhite;
    DXDrawHuman.Surface.Canvas.Pen.Width := 1;
    for i := 0 to 800 div UNITX do
    begin
      MoveTo(i * UNITX, 0);
      LineTo(i * UNITX, 600);
    end;
     for i := 0 to 600 div UNITY do
    begin
      MoveTo(0, i * UNITY);
      LineTo(800, i * UNITY);
    end;
    Release;
  end;
end;


procedure TForm1.TimerShowTimer(Sender: TObject);
begin
  DXDrawHuman.Surface.Fill(clGray);
  DrawGrid;
  PlayScence(DXDrawHuman.Surface);
  DXDrawHuman.Flip;
end;

这个实现虽较简单,但自己只知道需要用到一个循环,没有想到算法

还是是DEEPSEEK了一下,才知道了,先画横,在画竖

// 绘制垂直线
for i := 0 to ClientWidth div FGridSize do
begin
MoveTo(i * FGridSize, 0);
LineTo(i * FGridSize, ClientHeight);
end;

// 绘制水平线
for i := 0 to ClientHeight div FGridSize do
begin
MoveTo(0, i * FGridSize);
LineTo(ClientWidth, i * FGridSize);

这样一看就明白了。

总结:

1,DX7这个在用了surface 的 canvas 后需要释放,Release, 否则虽然程序编译不报错,但是没有图像显示了,

2,地图坐标 左上 为起始,为0,0 

3,角色是以地图坐标为基点的,但是绘图是以屏幕的像素坐标为基点的

     像素坐标又可以分,屏幕的像素坐标,窗口的像素坐标,DX 的surface 的像素坐标,控件的CANVAS像素坐标等等,

     注意区别,需要进行计算转换。

4,角色移动是以地图坐标为基点的,所以这里进行了设置,也绘画了网格 ,更直观的观察。

posted @ 2025-08-15 12:02  D7mir  阅读(3)  评论(0)    收藏  举报