测试一个超大地形,
地图是一个6*6大小的,从0-35编号的场景组成,玩家在0点点时候在边界,为了达到无缝感觉,可以把0之前接到4和5编号,这样在玩家从5场景走到0的时候,给一个瞬移坐标,相当于整个世界无边界效果。
[System.Serializable]
public class CWorldData
{
public int serailNo; //包含边框的顺序编号
//public int worldNo; //包含边框的地图编号
public int gridNo; //不包含边框的场景编号,也是场景的顺序编号
public int gridSerail; //当前场景编号在整个边框序号中的位置
public bool isBorder; //是否边框数据
}
public const int MapGrid = 6; //正方形世界的维度格子数量
public const int MapGridNumber = MapGrid * MapGrid; //地图大小
public const int MapGridRadius = 2; //距离最中心的格子显示几层.1就是9个格子,2就是16个格子
public const int TerrainSize = 2000; //地形大小
public const int WorldSize = MapGrid * TerrainSize; //整个世界多少地形大小
//public int[] WorldGridData = new int[(MapGridRadius * 2 + MapGrid)*(MapGridRadius * 2 + MapGrid)]; //地图数据,包含扩展外的
List<CWorldData> WorldGridData = new List<CWorldData>();
Dictionary<int, TMapPiece> dictMapPieces = new Dictionary<int, TMapPiece>();
10 11 6 7 8 9 10 11 6 7
4 5 0 1 2 3 3 5 0 1
34 35 30 31 32 33 34 35 30 31
28 29 24 25 26 27 28 29 24 25
22 23 18 19 20 21 22 23 18 19
16 17 12 13 14 15 16 17 12 13
10 11 6 7 8 9 10 11 6 7
4 5 0 1 2 3 4 5 0 1
34 35 30 31 32 33 34 35 30 31
28 29 24 25 26 27 28 29 24 25
数组的初始化:
/// </summary>
void InitGridData()
{
int i, j ,iSize , add;
int beginNumber ,lineNumber;
iSize = MapGrid * MapGrid;
beginNumber = iSize - MapGridRadius * MapGrid; //计算
iSize = MapGridRadius * 2 + MapGrid;
for (i = 0, add=0; i < iSize; i++)
{
lineNumber = (beginNumber + i * MapGrid) % MapGridNumber; //0所在行的每行数字,从下开始
//Debug.Log(i + "," + lineNumber);
for (j = 0; j < iSize; j++, add++)
{
WorldGridData.Add(new CWorldData());
WorldGridData[add].serailNo = add;
WorldGridData[add].isBorder = false;
if (j < MapGridRadius) //左边的边框
{
WorldGridData[add].gridNo = lineNumber + MapGrid + (j - MapGridRadius) % MapGrid;
//WorldGridData[add].worldNo = WorldGridData[add].gridNo;
WorldGridData[add].isBorder = true;
}
else if (j < iSize - MapGridRadius) //中间数据
{
WorldGridData[add].gridNo = lineNumber + (j - MapGridRadius) % MapGrid;
if (i < MapGridRadius || i > iSize - MapGridRadius - 1)
{
//上下边框数据
//WorldGridData[add].worldNo = WorldGridData[add].gridNo;
WorldGridData[add].isBorder = true;
}
}
else
{
//右边的边框
WorldGridData[add].gridNo = lineNumber + (j - MapGridRadius)% MapGrid;
//WorldGridData[add].worldNo = WorldGridData[add].gridNo;
WorldGridData[add].isBorder = true;
}
WorldGridData[add].gridSerail = (WorldGridData[add].gridNo / MapGrid + MapGridRadius) * iSize + (WorldGridData[add].gridNo % MapGrid) + MapGridRadius;
Debug.Log(i+","+j + "," + WorldGridData[add].serailNo + "," + WorldGridData[add].gridNo + "," + WorldGridData[add].gridSerail);
}
}
}
文章待续…