Sfoglia il codice sorgente

小游戏表现优化

zhangyuqian 1 anno fa
parent
commit
af3ab16713

+ 5 - 5
GameClient/Assets/Game/HotUpdate/Views/MiniGame/FlipGameStartView.cs

@@ -12,6 +12,7 @@ namespace GFGGame
         private UI_FlipGameStartUI _ui;
         //后续这里改成读表内容
         private List<string> name = new List<string>(){ "翻牌", "2048" };
+        private List<string> viewName = new List<string>() { "FlipGameView", "TZFEGameView" };
         private List<string> CustemsDesc = new List<string>()
         {
             "首次评价达到卓越奖励:",
@@ -52,6 +53,7 @@ namespace GFGGame
         protected override void OnShown()
         {
             base.OnShown();
+            _ui.m_c1.selectedIndex = 0;
             UpdateView();
             UpdateList();
         }
@@ -92,6 +94,7 @@ namespace GFGGame
             switch (index)
             {
                 case 0:
+
                         break;
                 case 1:
                     descItem.m_star3.visible = false;
@@ -137,11 +140,8 @@ namespace GFGGame
         }
         private void OnClickBtnStart()
         {
-            if(_ui.m_c1.selectedIndex == 0)
-            {
-                ViewManager.Show<FlipGameView>();
-                this.Hide();
-            }
+            ViewManager.Show($"GFGGame.{viewName[_ui.m_c1.selectedIndex]}");
+            this.Hide();
         }
     }
 }

+ 135 - 15
GameClient/Assets/Game/HotUpdate/Views/MiniGame/TZFEGameVIew.cs

@@ -12,7 +12,7 @@ namespace GFGGame
         private UI_TZFEGameView _ui;
 
         private int[,] Map;
-        enum Direction { up, down, left, right };
+        enum Direction { up, down, left, right};
         private Vector2 touchFirst = Vector2.zero;//手指开始按下的位置
         private Vector2 touchSecond = Vector2.zero;//手指拖动的位置
         private System.Random rand;
@@ -33,8 +33,10 @@ namespace GFGGame
             public int y;
             public bool isCreat;
         }
+        //需要播放动效的列表
         private List<NumPos> numPosArray = new List<NumPos>();
 
+
         public override void Dispose()
         {
             if (_ui != null)
@@ -107,8 +109,35 @@ namespace GFGGame
             int x = index / rows;
             int y = index % columns;
             numItem.m_numTxt.text = Map[x,y].ToString();
+            if(Map[x,y] == 0)
+            {
+                numItem.m_numTxt.visible = false;
+            }
+            else
+            {
+                numItem.m_numTxt.visible = true;
+            }
             //这个后续根据数组内容替换图片
             //_ui.m_icon.url = 
+            //播放生成和合并动效
+            for(int i=0; i<numPosArray.Count; i++)
+            {
+                if(x == numPosArray[i].x && y == numPosArray[i].y)
+                {
+                    if(numPosArray[i].isCreat)
+                    {
+                        numItem.m_t0.Play();
+                        numPosArray.RemoveAt(i);
+                        break;
+                    }
+                    else
+                    {
+                        numItem.m_t1.Play();
+                        numPosArray.RemoveAt(i);
+                        break;
+                    }
+                }
+            }
             UI_numItem.ProxyEnd();
         }
 
@@ -162,7 +191,7 @@ namespace GFGGame
         /// 去零
         /// </summary>
         /// <param name="row">对于一行或一列元素</param>
-        private void Remove0(int[] row)
+        private void Remove0(int[] row,Direction dir,int xy = 0)
         {
             int pos = 0;
             int[] rowB = new int[row.Length];
@@ -175,7 +204,54 @@ namespace GFGGame
                 if (row[i] != 0)
                 {
                     row[pos] = row[i];
+                    
+                    //-----这里修改需要播放动效的列表-----
+                    int x = 0;
+                    int y = 0;
+                    int nextX = 0;
+                    int nextY = 0;
+                    for (int t = 0; t < numPosArray.Count; t++)
+                    {
+                        switch (dir)
+                        {
+                            case Direction.up:
+                                x = i;
+                                y = xy;
+                                nextX = pos;
+                                nextY = xy;
+                                break;
+                            case Direction.down:
+                                x = row.Length - 1 - i;
+                                y = xy;
+                                nextX = row.Length - 1 - pos;
+                                nextY = xy;
+                                break;
+                            case Direction.left:
+                                x = xy;
+                                y = i;
+                                nextX = xy;
+                                nextY = pos;
+                                break;
+                            case Direction.right:
+                                x = xy;
+                                y = row.Length - 1 - i;
+                                nextX = xy;
+                                nextY = row.Length - 1 - pos;
+                                break;
+                        }
+                        if(numPosArray.Count != 0 && numPosArray[t].x == x && numPosArray[t].y == y && pos != i)
+                        {
+                            numPosArray.RemoveAt(t);
+                            NumPos item;
+                            item.x = nextX;
+                            item.y = nextY;
+                            item.isCreat = false;
+                            numPosArray.Add(item);
+                        }
+                    }
+                    //---------------------------------------
                     pos++;
+                    
                 } 
             }
             for (; pos < row.Length; ++pos) row[pos] = 0;
@@ -192,9 +268,9 @@ namespace GFGGame
         /// 合并
         /// </summary>
         /// <param name="row">对于一行或一列元素,完成一次向左合并的操作</param>
-        private void Merge(int[] row , int colrow = 0)
+        private void Merge(int[] row , Direction dir, int xy)
         {
-            Remove0(row);
+            Remove0(row,dir,xy);
             // 相邻相同则合并
             for (int i = 0; i < row.Length - 1; ++i)
             {
@@ -202,6 +278,11 @@ namespace GFGGame
                 {
                     row[i] *= 2;
                     row[i + 1] = 0;
+                    //将合并的数字放入列表
+                    NumPos item;
+                    item = MoveAddNum(i, xy, dir, row.Length-1);
+                    numPosArray.Add(item);
+                    //-------
                     score += row[i];
                     UpdateScore();
                     if (row[i] == targetNum)
@@ -211,9 +292,37 @@ namespace GFGGame
                     isMerge = true;
                 }
             }
-            Remove0(row);
+            Remove0(row,dir,xy);
+        }
+        //将合并的数字放入列表的准备
+        private NumPos MoveAddNum(int i, int xy, Direction dir,int length)
+        {
+            NumPos item = new NumPos();
+            switch (dir)
+            {
+                case Direction.up:
+                    item.x = i;
+                    item.y = xy;
+                    item.isCreat = false;
+                    break;
+                case Direction.down:
+                    item.x = length - i;
+                    item.y = xy;
+                    item.isCreat = false;
+                    break;
+                case Direction.left:
+                    item.x = xy;
+                    item.y = i;
+                    item.isCreat = false;
+                    break;
+                case Direction.right:
+                    item.x = xy;
+                    item.y = length - i;
+                    item.isCreat = false;
+                    break;
+            }
+            return item;
         }
-
         /// <summary>
         /// 上移
         /// </summary>
@@ -224,8 +333,11 @@ namespace GFGGame
             int[] arr = new int[rows];
             for (int j = 0; j < columns; ++j)
             {
-                for (int i = 0; i < rows; ++i) arr[i] = map[i, j];
-                Merge(arr);
+                for (int i = 0; i < rows; ++i)
+                {
+                    arr[i] = map[i, j]; 
+                }
+                Merge(arr,Direction.up,j);
                 for (int i = 0; i < rows; ++i) map[i, j] = arr[i];
             }
         }
@@ -237,8 +349,11 @@ namespace GFGGame
             int[] arr = new int[rows];
             for (int j = 0; j < columns; ++j)
             {
-                for (int i = 0; i < rows; ++i) arr[rows - 1 - i] = map[i, j];
-                Merge(arr);
+                for (int i = 0; i < rows; ++i)
+                {
+                    arr[rows - 1 - i] = map[i, j];
+                }
+                Merge(arr,Direction.down ,j);
                 for (int i = 0; i < rows; ++i) map[i, j] = arr[rows - 1 - i];
             }
             return map;
@@ -252,13 +367,15 @@ namespace GFGGame
             int[] arr = new int[columns];
             for (int i = 0; i < rows; ++i)
             {
-                for (int j = 0; j < columns; ++j) arr[j] = map[i, j];
-                Merge(arr);
+                for (int j = 0; j < columns; ++j)
+                {
+                    arr[j] = map[i, j];
+                }
+                Merge(arr,Direction.left,i);
                 for (int j = 0; j < columns; ++j) map[i, j] = arr[j];
             }
             return map;
         }
-
         /// <summary>
         /// 右移
         /// </summary>
@@ -267,8 +384,11 @@ namespace GFGGame
             int[] arr = new int[columns];
             for (int i = 0; i < rows; ++i)
             {
-                for (int j = 0; j < columns; ++j) arr[columns - 1 - j] = map[i, j];
-                Merge(arr);
+                for (int j = 0; j < columns; ++j)
+                {
+                    arr[columns - 1 - j] = map[i, j];
+                }
+                Merge(arr,Direction.right,i);
                 for (int j = 0; j < columns; ++j) map[i, j] = arr[columns - 1 - j];
             }
             return map;