//检查消除方块的上下左右是否有毒液 private void CheckPoison(GridBean gridBean) { int checkCounts = mPoisonList.Count; for (int x = 0; x < checkCounts; x++) { for (int i = 0, v, h; i < mPoisonList.Count; i++) { v = mPoisonList[i].vertical; h = mPoisonList[i].horizontal; if ((System.Math.Abs(v - gridBean.vertical) <= 1 && h - gridBean.horizontal == 0) || (v - gridBean.vertical == 0 && System.Math.Abs(h - gridBean.horizontal) <= 1)) { mGridListManager[v].Remove(mPoisonList[i]); Destroy(mPoisonList[i].gridObject); mGridBaseListManager[v][h].gridBean = null; mGridBaseListManager[v][h].isHasGrid = false; mGridBaseListManager[v][h].spriteIndex = 0;//随机赋值,只要不是挖空,雪块、毒液的资源索引值即可 isRemovePoison = true; mPoisonList.RemoveAt(i); deleteCounts++; break; } } } }
/// <summary> /// GridBean的复制方法 /// </summary> /// <param name="copyGridBean"></param> /// <param name="Grid"></param> /// <returns></returns> public static GridBean mClone(GridBean copyGridBean, GameObject Grid) { GridBean gridBean = new GridBean(); GameObject gridObject = new GameObject(); gridObject.AddComponent <RectTransform>(); gridObject.GetComponent <RectTransform>().position = copyGridBean.gridObject.GetComponent <RectTransform>().position; gridObject.GetComponent <RectTransform>().sizeDelta = copyGridBean.gridObject.GetComponent <RectTransform>().sizeDelta; gridObject.AddComponent <Image>(); gridObject.GetComponent <Image>().sprite = copyGridBean.gridObject.GetComponent <Image>().sprite; gridObject.transform.SetParent(Grid.transform); gridBean.gridObject = gridObject; gridBean.horizontal = copyGridBean.horizontal; gridBean.vertical = copyGridBean.vertical; gridBean.spriteIndex = copyGridBean.spriteIndex; gridBean.dropCounts = copyGridBean.dropCounts; gridBean.dropHeight = copyGridBean.dropHeight; gridBean.dropHeightFromOtherCounts = copyGridBean.dropHeightFromOtherCounts; gridBean.hasDropHeight = copyGridBean.hasDropHeight; gridBean.moveDirection = copyGridBean.moveDirection; gridBean.hasMoveWidth = copyGridBean.hasMoveWidth; gridBean.moveCounts = copyGridBean.moveCounts; gridBean.isTop = copyGridBean.isTop; gridBean.isDropInDoor = copyGridBean.isDropInDoor; gridBean.isDropOutDoor = copyGridBean.isDropOutDoor; gridBean.isDestroy = copyGridBean.isDestroy; gridBean.isFrostingRemove = copyGridBean.isFrostingRemove; return(gridBean); }
//初始化格子内容 private void InitGridContentSet() { gridSize = (Screen.width - leaveSize - (9 - 1) * intervalPx) / 9; interval = gridSize + intervalPx; x = leaveSize / 2 + gridSize / 2; //设置编辑器格子内容 gridListOfEditor = new List <List <GridBean> >(); for (int vertical = 0; vertical < 9; vertical++, x = x + interval) { y = Screen.height * 0.75f - gridSize / 2; gridList = new List <GridBean>(); for (int horizontal = 0; horizontal < 9; horizontal++, y = y - interval) { GameObject grid = Instantiate(Resources.Load("prefabs/grid"), GridContentSet.transform) as GameObject; Destroy(grid.GetComponent <SpriteRenderer>()); grid.AddComponent <Image>(); GridBean gridBean = new GridBean(); if (mGridDataList != null) { foreach (GridBean gridData in mGridDataList) { if (vertical == gridData.vertical && horizontal == gridData.horizontal) { if (gridData.spriteIndex == -1) { gridBean.spriteIndex = 1; } else { gridBean.spriteIndex = gridData.spriteIndex; } break; } else { gridBean.spriteIndex = 0; } } } else { gridBean.spriteIndex = 0; } grid.GetComponent <Image>().sprite = mSprites[gridBean.spriteIndex]; grid.GetComponent <RectTransform>().position = new Vector3(x, y, 0); grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); grid.AddComponent <Button>(); grid.GetComponent <Button>().onClick.AddListener(OnGridClick); gridBean.gridObject = grid; gridList.Add(gridBean); } gridListOfEditor.Add(gridList); } }
//生成特效方块 private void CreateSpecialGrid(int specialTpye) { //获取连线第一个方块的位置 int v = lineConnectGridList[0].vertical; int h = lineConnectGridList[0].horizontal; GameObject grid = Instantiate(Resources.Load("prefabs/grid"), mGrid.transform) as GameObject; grid.GetComponent <RectTransform>().position = mGridBaseListManager[v][h].gridBase.GetComponent <RectTransform>().position; grid.GetComponent <RectTransform>().sizeDelta = new Vector2(mGridSize, mGridSize); Destroy(grid.GetComponent <SpriteRenderer>()); grid.AddComponent <Image>(); GridBean gridBean = new GridBean(); gridBean.gridObject = grid; gridBean.moveHorizontal = 9; gridBean.vertical = v; gridBean.horizontal = h; gridBean.isTop = false; gridBean.spriteIndex = lineConnectGridList[0].spriteIndex; gridBean.specialTpye = specialTpye; //根据specialTpye特效类型判断生成哪种特效 switch (specialTpye) { case 0: //魔力鸟 gridBean.specialIndex = 0; break; case 1: //竖线 case 2: //横线 gridBean.specialIndex = lineConnectGridList[0].spriteIndex - 1; break; case 3: //爆炸 gridBean.specialIndex = lineConnectGridList[0].spriteIndex - 1 + 6; break; } grid.GetComponent <Image>().sprite = mSpecialSprites[gridBean.specialIndex]; grid.name = "grid" + v.ToString() + h.ToString(); mGridBaseListManager[v][h].spriteIndex = gridBean.spriteIndex; mGridBaseListManager[v][h].isHasGrid = true; //获取当前位置所在列的索引,进行添加 int index = 0; foreach (GridBean g in mGridListManager[v]) { if (h > g.horizontal) { index++; } } mGridListManager[v].Insert(index, gridBean); }
//初始化格子类型选择列表 private void InitGridTypeChooseContent() { if (mSprites != null) { gridSize = Screen.width / 10; lines = (mSprites.Count - 1) / 10; //根据选择类型个数,设置背景高度 gridTypeBackground.GetComponent <RectTransform>().sizeDelta = new Vector2(Screen.width, gridSize * (lines + 2)); Arrows.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); Arrows.GetComponent <RectTransform>().position = gridTypeBackground.GetComponent <RectTransform>().position + new Vector3(0.0f, -((gridSize * (lines + 2)) / 2 - gridSize / 2), 0.0f); x = gridSize / 2; y = Arrows.GetComponent <RectTransform>().position.y + gridSize * (lines + 1); for (int i = 0, reSetX = 0, whichLine = 0; i < mSprites.Count; i++, reSetX++) { GameObject grid = Instantiate(Resources.Load("prefabs/grid"), gridTypeBackground.transform) as GameObject; Destroy(grid.GetComponent <SpriteRenderer>()); grid.AddComponent <Image>(); grid.GetComponent <Image>().sprite = mSprites[i]; grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); grid.AddComponent <Button>(); grid.GetComponent <Button>().onClick.AddListener(OnGridTypeClick); if (reSetX == 10) { reSetX = 0; whichLine++; } grid.GetComponent <RectTransform>().position = new Vector3(x + gridSize * reSetX, y - whichLine * gridSize, 0); //调整部分UI的属性 switch (i) { case 8: //传送门入口 grid.GetComponent <RectTransform>().position = new Vector3(x + gridSize * reSetX, y - whichLine * gridSize - gridSize / 3, 0); grid.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f)); break; case 9: //传送门出口 grid.GetComponent <RectTransform>().position = new Vector3(x + gridSize * reSetX, y - whichLine * gridSize + gridSize / 3, 0); grid.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f)); break; case 14: //金豆荚篮子 grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize * 0.9f, gridSize * 0.4f); break; } GridBean gridBean = new GridBean(); gridBean.gridObject = grid; } } }
//元素互换 private static void exchangeGrid(LeaveGridMsg gridA, LeaveGridMsg gridB) { //获取互换位置的索引 int gridAInedx = mGridListManager[gridA.vertical].IndexOf(mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean); int gridBInedx = mGridListManager[gridB.vertical].IndexOf(mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean); //复制互换的对象 GridBean cloneGridA = GridBean.mClone(mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean, mGrid); GridBean cloneGridB = GridBean.mClone(mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean, mGrid); //移除对象 Destroy(mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean.gridObject); Destroy(mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean.gridObject); mGridListManager[gridA.vertical].RemoveAt(gridAInedx); //根据索引添加复制后的对象 if (gridAInedx < 8) { mGridListManager[gridA.vertical].Insert(gridAInedx, cloneGridB); } else { mGridListManager[gridA.vertical].Add(cloneGridB); } mGridListManager[gridB.vertical].RemoveAt(gridBInedx); if (gridBInedx < 8) { mGridListManager[gridB.vertical].Insert(gridBInedx, cloneGridA); } else { mGridListManager[gridB.vertical].Add(cloneGridA); } //修改互换的数据 mGridListManager[gridA.vertical][gridAInedx].vertical = gridA.vertical; mGridListManager[gridA.vertical][gridAInedx].horizontal = gridA.horizontal; mGridListManager[gridA.vertical][gridAInedx].gridObject.GetComponent <RectTransform>().position = mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBase.GetComponent <RectTransform>().position; mGridListManager[gridA.vertical][gridAInedx].gridObject.name = "grid" + gridA.vertical.ToString() + gridA.horizontal.ToString(); mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean = mGridListManager[gridA.vertical][gridAInedx]; mGridBaseListManager[gridA.vertical][gridA.horizontal].spriteIndex = mGridListManager[gridA.vertical][gridAInedx].spriteIndex; mGridListManager[gridB.vertical][gridBInedx].vertical = gridB.vertical; mGridListManager[gridB.vertical][gridBInedx].horizontal = gridB.horizontal; mGridListManager[gridB.vertical][gridBInedx].gridObject.GetComponent <RectTransform>().position = mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBase.GetComponent <RectTransform>().position; mGridListManager[gridB.vertical][gridBInedx].gridObject.name = "grid" + gridB.vertical.ToString() + gridB.horizontal.ToString(); mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean = mGridListManager[gridB.vertical][gridBInedx]; mGridBaseListManager[gridB.vertical][gridB.horizontal].spriteIndex = mGridListManager[gridB.vertical][gridBInedx].spriteIndex; }
/// <summary> /// 从备用行补充方块到List中 /// </summary> private static void DropFromTopList(int v, int addCounts) { for (int a = addCounts, topMoveCounts = 0; a > 0; a--, topMoveCounts++) { Vector3 newDropPosition = mGridDropList[v].gridObject.GetComponent <RectTransform>().position; int newDropHorizontal = mGridDropList[v].horizontal; //下移的距离 dropHeight = a * mInterval; //修改备用掉落方块的信息 mGridDropList[v].dropHeight = dropHeight + mInterval * topMoveCounts; mGridDropList[v].dropCounts = a; mGridDropList[v].isTop = true; mGridDropList[v].gridObject.GetComponent <RectTransform>().position += new Vector3(0.0f, +(mInterval * topMoveCounts), 0.0f); //管理所有列的List对象对应添加方块 mGridListManager[v].Insert(0, mGridDropList[v]); //修改GridBean下移后的listHorizontal信息 mGridListManager[v][0].horizontal = (a - 1); mGridListManager[v][0].gridObject.name = "grid" + v.ToString() + mGridListManager[v][0].horizontal.ToString(); mGridBaseListManager[v][mGridListManager[v][0].horizontal].isHasGrid = true; mGridBaseListManager[v][mGridListManager[v][0].horizontal].gridBean = mGridListManager[v][0]; mGridBaseListManager[v][mGridListManager[v][0].horizontal].spriteIndex = mGridListManager[v][0].spriteIndex; //移除掉落备用List对应位置的方块 mGridDropList.RemoveAt(v); //在下移的掉落对象位置,创建一个方块备用,添加于掉落备用List中 GameObject grid = Instantiate(Resources.Load("prefabs/grid"), mGrid.transform) as GameObject; Destroy(grid.GetComponent <SpriteRenderer>()); grid.AddComponent <Image>(); GridBean gridBean = new GridBean(); gridBean.specialTpye = -1; gridBean.spriteIndex = UnityEngine.Random.Range(2, 8); grid.GetComponent <Image>().sprite = mAllSprites[gridBean.spriteIndex]; grid.GetComponent <RectTransform>().position = newDropPosition; grid.GetComponent <RectTransform>().sizeDelta = new Vector2(mGridSize, mGridSize); grid.name = "grid" + v.ToString() + newDropHorizontal.ToString(); grid.SetActive(false); gridBean.gridObject = grid; gridBean.horizontal = newDropHorizontal; gridBean.vertical = v; gridBean.isTop = true; gridBean.moveHorizontal = 9; mGridDropList.Insert(v, gridBean); } }
//消除特效方块 private void RemoveSpecialGrid(GridBean gridBean) { switch (gridBean.specialTpye) { case 0: //魔力鸟 break; case 1: //竖线 break; case 2: //横线 break; case 3: //爆炸 break; } }
//检查消除方块的上下左右是否有雪块 private void CheckFrosting(GridBean gridBean) { for (int i = 0; i < mFrostingList.Count; i++) { if ((System.Math.Abs(mFrostingList[i].vertical - gridBean.vertical) <= 1 && mFrostingList[i].horizontal - gridBean.horizontal == 0) || (mFrostingList[i].vertical - gridBean.vertical == 0 && System.Math.Abs(mFrostingList[i].horizontal - gridBean.horizontal) <= 1)) { if (!mFrostingList[i].isFrostingRemove) { mFrostingList[i].spriteIndex--; if (mFrostingList[i].spriteIndex >= 15) { mFrostingList[i].gridObject.GetComponent <Image>().sprite = mAllSprites[mFrostingList[i].spriteIndex]; } else { Destroy(mFrostingList[i].gridObject); deleteCounts++; mGridBaseListManager[mFrostingList[i].vertical][mFrostingList[i].horizontal].isHasGrid = false; } mGridBaseListManager[mFrostingList[i].vertical][mFrostingList[i].horizontal].spriteIndex = mFrostingList[i].spriteIndex; mFrostingList[i].isFrostingRemove = true; } } } //更新雪块List for (int v = 0; v < 9; v++) { for (int h = 0; h < 9; h++) { if (mGridBaseListManager[v][h].spriteIndex == 14) { foreach (GridBean grid in mFrostingList) { if (grid.vertical == v && grid.horizontal == h) { mFrostingList.Remove(grid); mGridListManager[v].Remove(grid); break; } } } } } }
/// <summary> /// 从传送门补充方块到List中 /// </summary> private static void DropFromDoor(DoorBean doorBean, int addCounts) { int inV = doorBean.inVertical; int inH = doorBean.inHorizontal; int outV = doorBean.outVertical; int outH = doorBean.outHorizontal; int inVGridCounts = 0; //判断入口列还剩余多少个方块,是否足以掉落至出口列, for (int h = inH; h >= 0; h--) { if (mGridBaseListManager[inV][h].isHasGrid && mGridBaseListManager[inV][h].spriteIndex != -1 && !(mGridBaseListManager[inV][h].spriteIndex >= 15 && mGridBaseListManager[inV][h].spriteIndex <= 21)) { inVGridCounts++; } } //若不足,则从备用列生成补充 if (inVGridCounts < addCounts) { DropFromTopList(inV, addCounts - inVGridCounts); } //根据addCounts执行循环 for (int i = 0, inIndex = inH, topMoveCounts = 0; i < addCounts; i++, inIndex--, topMoveCounts++) { //下移的距离 dropHeight = addCounts * mInterval; //修改入口列的掉落信息和List处理 mGridListManager[inV][inIndex].dropHeight = dropHeight; mGridBaseListManager[inV][mGridListManager[inV][inIndex].horizontal].gridBean = null; mGridBaseListManager[inV][mGridListManager[inV][inIndex].horizontal].isHasGrid = false; mGridListManager[inV][inIndex].isDropInDoor = true; mGridListManager[inV][inIndex].isDestroy = true; //复制一个对象 GridBean gridBean = GridBean.Clone(mGridListManager[inV][inIndex], mGrid); //计算传送出口在GridList中的索引 outIndex = 0; for (int x = 0; x < mGridListManager[outV].Count; x++) { if (inV != outV) { if (mGridListManager[outV][x].horizontal < outH) { outIndex++; } else { break; } } else { if (mGridListManager[outV][x].horizontal < outH + addCounts - i) { outIndex++; } else { break; } } } //将该方块添加进传送出口的索引位置 mGridListManager[outV].Insert(outIndex, gridBean); //修改出口列的掉落信息和List处理 mGridListManager[outV][outIndex].horizontal = outH + addCounts - 1 - i; mGridListManager[outV][outIndex].vertical = outV; mGridListManager[outV][outIndex].gridObject.GetComponent <RectTransform>().position = mGridBaseListManager[outV][outH].gridBase.GetComponent <RectTransform>().position + new Vector3(0.0f, (i + 1) * mInterval, 0.0f); mGridListManager[outV][outIndex].gridObject.name = "grid" + outV.ToString() + mGridListManager[outV][outIndex].horizontal.ToString(); mGridBaseListManager[outV][mGridListManager[outV][outIndex].horizontal].isHasGrid = true; mGridBaseListManager[outV][mGridListManager[outV][outIndex].horizontal].gridBean = mGridListManager[outV][outIndex]; mGridBaseListManager[outV][mGridListManager[outV][outIndex].horizontal].spriteIndex = gridBean.spriteIndex; mGridListManager[outV][outIndex].gridObject.SetActive(false); mGridListManager[outV][outIndex].isDropInDoor = false; mGridListManager[outV][outIndex].isDestroy = false; mGridListManager[outV][outIndex].isDropOutDoor = true; //入口的列的剩余方块,需掉落addCounts个格子 if (i + 1 == addCounts) { for (int x = inH - addCounts; x >= 0; x--) { mGridListManager[inV][x].dropHeight += addCounts * mInterval; mGridListManager[inV][x].dropCounts += addCounts; mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].gridBean = null; mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].isHasGrid = false; mGridListManager[inV][x].horizontal += addCounts; mGridListManager[inV][x].gridObject.name = "grid" + inV.ToString() + mGridListManager[inV][x].horizontal.ToString(); mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].isHasGrid = true; mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].gridBean = mGridListManager[inV][x]; mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].spriteIndex = mGridListManager[inV][x].spriteIndex; } } } //从备用行补充传送门入口方块 DropFromTopList(inV, addCounts); }
public void InitData() { //[0]读取配置,获取对象 editorData = JsonUtil.GetEditorData(10); GridUIAttributeManager.GetInstance().editorData = editorData; //[1]获取格子内容信息 if (!editorData.gridData.Equals("")) { string[] gridDatas = editorData.gridData.Split(','); gridDataList = new List <GridBean>(); foreach (string grid in gridDatas) { if (!grid.Equals("")) { string[] result = grid.Split('|'); GridBean gridBean = new GridBean(); gridBean.vertical = int.Parse(result[0]); gridBean.horizontal = int.Parse(result[1]); gridBean.spriteIndex = int.Parse(result[2]); gridDataList.Add(gridBean); } } GridUIAttributeManager.GetInstance().gridDataList = gridDataList; } //[2]获取传送门数据 if (!editorData.doorData.Equals("")) { string[] doorDatas = editorData.doorData.Split(','); doorDataList = new List <DoorBean>(); foreach (string door in doorDatas) { if (!door.Equals("")) { string[] result = door.Split('|'); DoorBean doorBean = new DoorBean(); doorBean.inVertical = int.Parse(result[0]); doorBean.inHorizontal = int.Parse(result[1]); doorBean.outVertical = int.Parse(result[2]); doorBean.outHorizontal = int.Parse(result[3]); doorDataList.Add(doorBean); } } GridUIAttributeManager.GetInstance().doorDataList = doorDataList; } //[3]获取冰块数据 if (!editorData.iceData.Equals("")) { string[] iceDatas = editorData.iceData.Split(','); iceDataList = new List <IceBean>(); foreach (string ice in iceDatas) { if (!ice.Equals("")) { string[] result = ice.Split('|'); IceBean iceBean = new IceBean(); iceBean.iceVertical = int.Parse(result[0]); iceBean.iceHorizontal = int.Parse(result[1]); iceBean.iceLevel = int.Parse(result[2]); iceDataList.Add(iceBean); } } GridUIAttributeManager.GetInstance().iceDataList = iceDataList; } //获取金豆荚篮子数据 if (!editorData.basketData.Equals("")) { string[] basketDatas = editorData.basketData.Split(','); basketDataList = new List <BasketBean>(); foreach (string basket in basketDatas) { if (!basket.Equals("")) { string[] result = basket.Split('|'); BasketBean basketBean = new BasketBean(); basketBean.basketVertical = int.Parse(result[0]); basketBean.basketHorizontal = int.Parse(result[1]); basketDataList.Add(basketBean); } } GridUIAttributeManager.GetInstance().basketDataList = basketDataList; } //获取树藤数据 if (!editorData.timboData.Equals("")) { string[] timboDatas = editorData.timboData.Split(','); timboDataList = new List <TimboBean>(); foreach (string timbo in timboDatas) { if (!timbo.Equals("")) { string[] result = timbo.Split('|'); TimboBean timboBean = new TimboBean(); timboBean.timboVertical = int.Parse(result[0]); timboBean.timboHorizontal = int.Parse(result[1]); timboDataList.Add(timboBean); } } GridUIAttributeManager.GetInstance().timboDataList = timboDataList; } }
public void InitGrid() { //[0]初始化父控件 GridBg = new GameObject(); Grid = new GameObject(); GridUIAttributeManager.GetInstance().Grid = Grid; GridUIAttributeManager.GetInstance().GridBg = GridBg; GridBg.AddComponent <RectTransform>(); Grid.AddComponent <RectTransform>(); GridBg.name = "GridBg"; Grid.name = "Grid"; GridBg.GetComponent <RectTransform>().SetParent(mainCanvas.transform); Grid.GetComponent <RectTransform>().SetParent(mainCanvas.transform); //[2]设置格子大小 gameData = new GameData(); gameData.horizontal = 9; gameData.vertical = 9; GridUIAttributeManager.GetInstance().gameData = gameData; leaveSize = 0; GridUIAttributeManager.GetInstance().leaveSize = leaveSize; intervalPx = 1.0f; if (Screen.height >= Screen.width) { if (gameData.vertical > 9) { gridSize = (Screen.width - leaveSize - (gameData.vertical - 1) * intervalPx) / gameData.vertical; } else { gridSize = (Screen.width - leaveSize - (9 - 1) * intervalPx) / 9; } } else { if (gameData.horizontal > 9) { gridSize = (gameBgWith - leaveSize - (gameData.horizontal - 1) * intervalPx) / gameData.horizontal; } else { gridSize = (gameBgWith - leaveSize - (9 - 1) * intervalPx) / 9; } } interval = gridSize + intervalPx; GridUIAttributeManager.GetInstance().intervalPx = intervalPx; GridUIAttributeManager.GetInstance().gridSize = gridSize; GridUIAttributeManager.GetInstance().interval = interval; //[3]动态创建方块 //[3.1]设置每一列方块的初始位置 x if (Screen.height >= Screen.width) { x = leaveSize / 2 + gridSize / 2; } else { x = Screen.width / 2 - gameBgWith / 2 + leaveSize / 2 + gridSize / 2; } for (int vertical = 0; vertical < gameData.vertical; vertical++, x = x + interval) { //[3.2]设置第一行方块的初始位置 y y = Screen.height * 0.75f - gridSize / 2 + interval; gridList = new List <GridBean>(); gridBaseList = new List <GridBaseBean>(); for (int horizontal = 0; horizontal < gameData.horizontal + 1; horizontal++, y = y - interval) { //[3.3]生成场景 if (horizontal != 0) { GameObject gridbase = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject; Destroy(gridbase.GetComponent <SpriteRenderer>()); gridbase.name = "gridbase" + vertical.ToString() + (horizontal - 1).ToString(); gridbase.AddComponent <Image>(); gridbase.GetComponent <Image>().sprite = baseSprites[0]; gridbase.GetComponent <RectTransform>().position = new Vector3(x, y, 0); gridbase.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); GridBaseBean gridBaseBean = new GridBaseBean(); gridBaseBean.gridBase = gridbase; gridBaseList.Add(gridBaseBean); } //[3.31]生成冰块 if (iceDataList != null && horizontal != 0) { foreach (IceBean iceBean in iceDataList) { if (iceBean.iceVertical == vertical && iceBean.iceHorizontal == horizontal - 1) { GameObject ice = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject; Destroy(ice.GetComponent <SpriteRenderer>()); ice.name = "ice" + iceBean.iceVertical.ToString() + iceBean.iceHorizontal.ToString(); ice.AddComponent <Image>(); ice.GetComponent <Image>().sprite = allSprites[iceBean.iceLevel + 9]; ice.GetComponent <RectTransform>().position = new Vector3(x, y, 0); ice.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); iceBean.ice = ice; break; } } } //[3.32]生成金豆荚篮子 if (basketDataList != null && horizontal != 0) { foreach (BasketBean basketBean in basketDataList) { if (basketBean.basketVertical == vertical && basketBean.basketHorizontal == horizontal - 1) { GameObject basket = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject; Destroy(basket.GetComponent <SpriteRenderer>()); basket.name = "basket" + basketBean.basketVertical.ToString() + basketBean.basketHorizontal.ToString(); basket.AddComponent <Image>(); basket.GetComponent <Image>().sprite = allSprites[14]; basket.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize * 0.9f, gridSize * 0.4f); basket.GetComponent <RectTransform>().position = new Vector3(x, y, 0) + new Vector3(0.0f, -gridSize / 2 - gridSize * 0.4f / 2, 0.0f); basketBean.basket = basket; break; } } } //[3.4]生成方块 GameObject grid = Instantiate(Resources.Load("prefabs/grid"), Grid.transform) as GameObject; Destroy(grid.GetComponent <SpriteRenderer>()); grid.AddComponent <Image>(); GridBean gridBean = new GridBean(); gridBean.specialTpye = -1; if (horizontal != 0) { gridBaseList[horizontal - 1].gridBean = gridBean; } //遍历配置文件,若有对应固定的位置,则根据情况显示 if (horizontal != 0) { //默认随机 gridBean.spriteIndex = UnityEngine.Random.Range(2, 8); gridBaseList[horizontal - 1].spriteIndex = gridBean.spriteIndex; gridBaseList[horizontal - 1].isHasGrid = true; //如果配置数据为空,则默认随机 if (gridDataList != null) { foreach (GridBean gridData in gridDataList) { if (vertical == gridData.vertical && (horizontal - 1) == gridData.horizontal) { switch (gridData.spriteIndex) { case 1: //不显示 gridBaseList[horizontal - 1].spriteIndex = -1; gridBean.spriteIndex = gridData.spriteIndex; gridBaseList[horizontal - 1].gridBase.SetActive(false); grid.SetActive(false); break; case 15: //雪块 case 16: case 17: case 18: case 19: gridBean.spriteIndex = gridData.spriteIndex; gridBaseList[horizontal - 1].spriteIndex = gridData.spriteIndex; frostingList.Add(gridBean); break; case 20: gridBean.spriteIndex = gridData.spriteIndex; gridBaseList[horizontal - 1].spriteIndex = gridData.spriteIndex; poisonList.Add(gridBean); break; default: //默认根据ID显示对应资源 gridBean.spriteIndex = gridData.spriteIndex; gridBaseList[horizontal - 1].spriteIndex = gridBean.spriteIndex; break; } break; } } } else { //如果格子内容没有数据, 则默认为空 gridBean.spriteIndex = UnityEngine.Random.Range(2, 8); gridBaseList[horizontal - 1].spriteIndex = gridBean.spriteIndex; gridBaseList[horizontal - 1].isHasGrid = true; } } else { //备用方块的资源 gridBean.spriteIndex = UnityEngine.Random.Range(2, 8); } //设置金豆荚位置 if (beanPodList != null && horizontal != 0) { foreach (BeanPod beanPod in beanPodList) { if (beanPod.beanPodVeritcal == vertical && beanPod.beanPodHorizontal == horizontal - 1) { gridBean.spriteIndex = 13; gridOfBeanPodList.Add(gridBean); break; } } } //生成树藤 if (timboDataList != null && horizontal != 0) { foreach (TimboBean timboBean in timboDataList) { if (timboBean.timboVertical == vertical && timboBean.timboHorizontal == horizontal - 1) { GameObject timbo = Instantiate(Resources.Load("prefabs/gridbase"), Grid.transform) as GameObject; Destroy(timbo.GetComponent <SpriteRenderer>()); timbo.name = "timbo" + timboBean.timboVertical.ToString() + timboBean.timboHorizontal.ToString(); timbo.AddComponent <Image>(); timbo.GetComponent <Image>().sprite = allSprites[21]; timbo.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize * 1.1f, gridSize * 1.1f); timbo.GetComponent <RectTransform>().position = new Vector3(x - gridSize * 0.05f, y, 0); timboBean.timbo = timbo; gridBaseList[horizontal - 1].spriteIndex = 21; break; } } } if (gridBean.spriteIndex > 1) { grid.GetComponent <Image>().sprite = allSprites[gridBean.spriteIndex]; } grid.GetComponent <RectTransform>().position = new Vector3(x, y, 0); grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); gridBean.gridObject = grid; gridBean.moveHorizontal = 9; //[3.5]储存格子掉落信息 if (horizontal == 0) { gridBean.horizontal = horizontal; gridBean.vertical = vertical; grid.name = "grid" + gridBean.vertical.ToString() + gridBean.horizontal.ToString(); grid.SetActive(false); gridBean.isTop = true; gridDropList.Add(gridBean); } //[3.6]储存格式显示信息 if (horizontal != 0) { gridBean.horizontal = horizontal - 1; gridBean.vertical = vertical; grid.name = "grid" + gridBean.vertical.ToString() + gridBean.horizontal.ToString(); gridBean.isTop = false; gridList.Add(gridBean); } } gridBaseListManager.Add(gridBaseList); gridListManager.Add(gridList); } GridUIAttributeManager.GetInstance().gridDropList = gridDropList; GridUIAttributeManager.GetInstance().gridListManager = gridListManager; GridUIAttributeManager.GetInstance().gridBaseListManager = gridBaseListManager; if (gridOfBeanPodList != null) { GridUIAttributeManager.GetInstance().gridOfBeanPodList = gridOfBeanPodList; } if (frostingList != null) { GridUIAttributeManager.GetInstance().frostingList = frostingList; } if (poisonList != null) { GridUIAttributeManager.GetInstance().poisonList = poisonList; } //[4]生成传送门 if (doorDataList != null) { foreach (DoorBean doorbean in doorDataList) { //入口 GameObject indoor = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject; Destroy(indoor.GetComponent <SpriteRenderer>()); indoor.name = "indoor" + doorbean.inVertical.ToString() + doorbean.inHorizontal.ToString(); indoor.AddComponent <Image>(); indoor.GetComponent <Image>().sprite = allSprites[8]; doorPoint = gridListManager[doorbean.inVertical][doorbean.inHorizontal].gridObject.GetComponent <RectTransform>().position; indoor.GetComponent <RectTransform>().position = doorPoint + new Vector3(0.0f, -gridSize * 2 / 3, 0.0f); indoor.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); indoor.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f)); doorbean.indoor = indoor; //出口 GameObject outdoor = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject; Destroy(outdoor.GetComponent <SpriteRenderer>()); outdoor.name = "outdoor" + doorbean.outVertical.ToString() + doorbean.outHorizontal.ToString(); outdoor.AddComponent <Image>(); outdoor.GetComponent <Image>().sprite = allSprites[9]; doorPoint = gridListManager[doorbean.outVertical][doorbean.outHorizontal].gridObject.GetComponent <RectTransform>().position; outdoor.GetComponent <RectTransform>().position = doorPoint + new Vector3(0.0f, gridSize * 2 / 3, 0.0f); outdoor.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize); outdoor.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f)); doorbean.outdoor = outdoor; } } }
//消除特效方块 private void removeSpecialGrid(GridBean gridBean) { }