public void Move(int x, int y, int level = 0) { LeftTop[curLevel].x = Mathf.Clamp(x - viewX[curLevel], 0, MAP_BLOCK_COUNT_TOTAL_X - 1); LeftTop[curLevel].y = Mathf.Clamp(y - viewY2[curLevel], 0, MAP_BLOCK_COUNT_TOTAL_Y - 1); BottomRight[curLevel].x = Mathf.Clamp(x + viewX[curLevel], 0, MAP_BLOCK_COUNT_TOTAL_X - 1); BottomRight[curLevel].y = Mathf.Clamp(y + viewY[curLevel], 0, MAP_BLOCK_COUNT_TOTAL_Y - 1); for (int ry = LeftTopOld.y; ry <= BottomRightOld.y; ++ry) { for (int rx = LeftTopOld.x; rx <= BottomRightOld.x; ++rx) { if (!in_view(rx, ry)) { int block_id = ry * MAP_BLOCK_COUNT_TOTAL_X + rx; ReleaseResource(block_id); } } } Debug.LogFormat("LeftTopOld ={0},{1} BottomRightOld = {2},{3}", LeftTopOld.x, LeftTopOld.y, BottomRightOld.x, BottomRightOld.y); Debug.LogFormat("LeftTop[curLevel] ={0},{1} BottomRight[curLevel] = {2},{3}", LeftTop[curLevel].x, LeftTop[curLevel].y, BottomRight[curLevel].x, BottomRight[curLevel].y); showBlocks = (BottomRight[curLevel].x - LeftTop[curLevel].x) * (BottomRight[curLevel].y - LeftTop[curLevel].y); int startX = Mathf.Max(0, x - viewX[curLevel]); int startY = Mathf.Max(0, y - viewY2[curLevel]); int endX = Mathf.Min(MAP_BLOCK_COUNT_TOTAL_X - 1, x + viewX[curLevel]); int endY = Mathf.Min(MAP_BLOCK_COUNT_TOTAL_Y - 1, y + viewY[curLevel]); for (int i = startY; i <= endY; ++i) { for (int j = startX; j <= endX; ++j) { int block_id = i * MAP_BLOCK_COUNT_TOTAL_X + j; MapBlock mb = blocks[block_id]; mb.Show(curLevel); } } LeftTopOld.x = LeftTop[curLevel].x; LeftTopOld.y = LeftTop[curLevel].y; BottomRightOld.x = BottomRight[curLevel].x; BottomRightOld.y = BottomRight[curLevel].y; }