对接地图边界

测试一个超大地形,
地图是一个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);
                }
            }
        }

文章待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值