無限tilemap實現基於ccc

2021-09-14 01:02:59 字數 2842 閱讀 1582

原始碼版本是2.09r5

我這邊 主要是實際需要 實現 先 cok一樣的無限大地圖, 方法很簡單

comp.testarray – (這個是我自己專案需要的乙個列表 裡面 放了 我需要顯示的tile節點)

關鍵在於邊界的處理 比如你的地圖是 30x30 那麼 超過 30或者 低於 0 怎麼顯示 很簡單,比如 (0,31)就是把(0,0)移動到0,31的位置就行了,所以我們地圖設計 師需要 收尾可以無縫結合的, comp.testarray 這個列表的選擇可以比螢幕大一些,具體需要什麼 自己結合遊戲邏輯

if(comp.testarray)

else

grid = grids[(gid & flipped_mask) >>> 0];

let isok = true;

if (!grid)

if(isok)

} left = maptw / 2 * ( cols + tcol - trow - 1);

bottom = mapth / 2 * ( rows * 2 - tcol - trow - 2);

break;

case orientation.hex:

let diffx2 = (axis === staggeraxis.staggeraxis_y && row % 2 === 1) ? (maptw / 2 * odd_even) : 0;

left = col * (maptw - diffx1) + diffx2 + tileoffset.x;

let diffy2 = (axis === staggeraxis.staggeraxis_x && col % 2 === 1) ? (mapth/2 * -odd_even) : 0;

bottom = (rows - row - 1) * (mapth -diffy1) + diffy2 - tileoffset.y;

break;

}if (tiledtile)

right = left + tilew;

top = bottom + tileh;

// tmx_orientation_iso trim

//這段是 源** 對 剪裁的優化 因為我已經自己剪裁了 所以就不需要了

/*if (enabledculling && layerorientation === orientation.iso)

gr = cullingmapx + right*cullinga;

if (gr < -cullingw)

gl = cullingmapx + left*cullinga;

gt = cullingmapy + top*cullingd;

if (gl > winw || gt < 0) }*/

if(isok)

renderdata.vertexcount += 4;

renderdata.indicecount += 6;

renderdata.datalength = renderdata.vertexcount;

// tl

data[dataoffset].x = left * a + top * c + tx;

data[dataoffset].y = left * b + top * d + ty;

data[dataoffset].u = flippedx ? grid.r : grid.l;

data[dataoffset].v = flippedy ? grid.b : grid.t;

data[dataoffset].color = color;

dataoffset++;

// bl

data[dataoffset].x = left * a + bottom * c + tx;

data[dataoffset].y = left * b + bottom * d + ty;

data[dataoffset].u = flippedx ? grid.r : grid.l;

data[dataoffset].v = flippedy ? grid.t : grid.b;

data[dataoffset].color = color;

dataoffset++;

// tr

data[dataoffset].x = right * a + top * c + tx;

data[dataoffset].y = right * b + top * d + ty;

data[dataoffset].u = flippedx ? grid.l : grid.r;

data[dataoffset].v = flippedy ? grid.b : grid.t;

data[dataoffset].color = color;

dataoffset++;

// br

data[dataoffset].x = right * a + bottom * c + tx;

data[dataoffset].y = right * b + bottom * d + ty;

data[dataoffset].u = flippedx ? grid.l : grid.r;

data[dataoffset].v = flippedy ? grid.t : grid.b;

data[dataoffset].color = color;

dataoffset++;

if (tiledtile) }}

}}這個是實現的原始碼 位置在 tmx-layer-assembler.js這個檔案

實際效果

C C 實現基於UDP的網路程式設計

在網路程式設計中,我們一般用udp或者tcp這兩種協議來進行編寫網路應用程式,那叫udp呢?udp udp的簡稱是user datagram protocol,中文名是使用者資料報協議,是osi 參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,ietf rfc 768是udp...

基於網格的無限大戰爭迷霧實現方案

戰爭迷霧常見的實現方案是使用一張貼圖儲存地圖上每個格仔有無迷霧,然後對這樣貼圖進行模糊後作為mask,可以實現邊緣柔和漸變的迷霧效果。如果地圖大小是固定的,那麼使用採用固定的一張或多張貼圖的方案,覆蓋整個地圖。但是如果地圖是無限大的,那麼隨著攝像機的移動,這些貼圖必然要比較頻繁地更新,而每次更新都需...

Gallery 實現無限迴圈

通過設定最大值兩億來模擬迴圈 因為總數很大時,肯定數不過來,就相當於模擬了 但是你的實際資料可能只有十幾個 所以iv.setimageresource img.get position 8 通過position 會很大很大 模一下你的實際資料的大小,就行了 gallery.setselection ...