绘图
关键的数据
地图客户区,以主角的地图坐标为中心左右各9格,上下9,8格
一切以主角为中心进行计算,换算。
Map.m_ClientRect
Left := g_MySelf.m_nRx - 9;
Top := g_MySelf.m_nRy - 9;
Right := g_MySelf.m_nRx + 9;
Bottom := g_MySelf.m_nRy + 8;
地图地面绘图
m_MapSurface的像素大小,宽,高
在显示的范围增加4格 800+192+30=1022,455+128=538
m_MapSurface.SetSize(MAPSURFACEWIDTH + UNITX * 4 + 30, MAPSURFACEHEIGHT + UNITY
* 4);
MAPSURFACEWIDTH 800 显示区域宽 实际16.66格
MAPSURFACEHEIGHT 455 显示区域高减去了底台的高度 14.21格
绘制到m_MapSurface
===================================================
贴大地砖 2格一贴
(i mod 2 = 0) and (j mod 2 = 0) 偶数格开始贴,
像素坐标nY := 但是这个是没有在y中间的,是从顶开始贴的?
地图坐标j := (Top - Map.m_nBlockTop - 1) to (Bottom - Map.m_nBlockTop + 1)
换算 g_MySelf.m_nRy -10格 到 g_MySelf.m_nRy + 9 格
以主角为中心格
像素 格
-64 -10
-32 -9*
0 -8
32 -7
256 0
512 8*
544 9
像素坐标nX := - UNITX + AAX + 14; AAX 为16 这样30?人物看起来在格子X中间?
地图坐标i := (Left - Map.m_nBlockLeft - 2) to (Right - Map.m_nBlockLeft + 1)
换算 g_MySelf.m_nRx - 11格,到 g_MySelf.m_nRx + 10格
像素 -18 30 78 510 942 990
格 -11 -10 -9* 0 9* 10
==================================
贴小地砖
像素坐标nY := -UNITY;
地图坐标j := (Top - Map.m_nBlockTop - 1) to (Bottom - Map.m_nBlockTop + 1)
像素 格
-32 -10
0 -9*
288 0
544 8*
576 9
像素坐标nX :=- UNITX + AAX + 14 ;
地图坐标i := (Left - Map.m_nBlockLeft - 2) to (Right - Map.m_nBlockLeft + 1)
像素 -18 30 78 510 942 990
格 -11 -10 -9* 0 9* 10
=======================================================
地图地面(地图背景)画到物体表面层
截取地图地面区域的144 64,944 519.左缩进3格,上缩进2格。
这里假设取偏移为0.
m_ObjSurface.SetSize(MAPSURFACEWIDTH - SOFFX * 2, MAPSURFACEHEIGHT);
m_ObjSurface.Draw(0, 0,
Rect(UNITX * 3 + g_MySelf.m_nShiftX,
UNITY * 2 + g_MySelf.m_nShiftY,
UNITX * 3 + g_MySelf.m_nShiftX + MAPSURFACEWIDTH,
UNITY * 2 + g_MySelf.m_nShiftY + MAPSURFACEHEIGHT),
m_MapSurface,
FALSE);
=======================================================
默认的起始像素坐标
为了保证主角在屏幕中间,需要减去其移动中产生的偏移
AAX 为16 ,不知道代表什么
14 不知道代表什么
UNITX地图坐标一格的宽度 48像素
UNITY地图坐标一格的高度 32像素
1个地图坐标表示1格,
1格表示1个地砖贴图。
这里是挖过来的地图背景已经偏移过了,所以要将偏移补偿回去
原来地图背景坐标是从AAX + 14开始,所以得同步加上去
defx := -UNITX * 2 - g_MySelf.m_nShiftX + AAX + 14;
defy := -UNITY * 2 - g_MySelf.m_nShiftY
赋值给全局变量。
m_nDefXX := defx;
m_nDefYY := defy;
开始了,前景的贴图
但实际是当背景的小地砖块
m := defy - UNITY
j := (Map.m_ClientRect.Top - Map.m_nBlockTop) to (Map.m_ClientRect.Bottom
- Map.m_nBlockTop + LONGHEIGHT_IMAGE
开始像素-3格 - g_MySelf.m_nShiftY (对照m_ObjSurface坐标)
换算对照(m_MapSurface)
开始格-9 8+35
n := defx - UNITX * 2
i := (Map.m_ClientRect.Left - Map.m_nBlockLeft - 2) to
(Map.m_ClientRect.Right - Map.m_nBlockLeft + 2)
开始像素 -4格 - g_MySelf.m_nShiftX + AAX + 14
开始格 -11 到 11
(m_MapSurface)UNITX * 3 + g_MySelf.m_nShiftX
(m_MapSurface)UNITY * 2 + g_MySelf.m_nShiftY
标签:CLIENT8,Map,MySelf,12,翎风,地图,像素,UNITX,坐标 From: https://www.cnblogs.com/D7mir/p/18178588