繪圖
關鍵的資料
地圖客戶區,以主角的地圖座標為中心左右各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