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

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,角色移动是以地图坐标为基点的,所以这里进行了设置,也绘画了网格 ,更直观的观察。