eraser пре 5 година
комит
92acc31e8c
100 измењених фајлова са 7721 додато и 0 уклоњено
  1. 53 0
      .gitignore
  2. 7 0
      assets/Animations.meta
  3. 7 0
      assets/Animations/Matching.meta
  4. 385 0
      assets/Animations/Matching/bubble.anim
  5. 5 0
      assets/Animations/Matching/bubble.anim.meta
  6. 111 0
      assets/Animations/Matching/dot.anim
  7. 5 0
      assets/Animations/Matching/dot.anim.meta
  8. 84 0
      assets/Animations/Matching/matching.anim
  9. 5 0
      assets/Animations/Matching/matching.anim.meta
  10. 43 0
      assets/Animations/Matching/shootingStar.anim
  11. 5 0
      assets/Animations/Matching/shootingStar.anim.meta
  12. 7 0
      assets/Audios.meta
  13. 7 0
      assets/Audios/Pairing.meta
  14. BIN
      assets/Audios/Pairing/MatchSuccess.mp3
  15. 6 0
      assets/Audios/Pairing/MatchSuccess.mp3.meta
  16. 7 0
      assets/Scenes.meta
  17. 3180 0
      assets/Scenes/Pairing.fire
  18. 7 0
      assets/Scenes/Pairing.fire.meta
  19. 7 0
      assets/Scripts.meta
  20. 180 0
      assets/Scripts/Library.js
  21. 9 0
      assets/Scripts/Library.js.meta
  22. 7 0
      assets/Scripts/Matching.meta
  23. 176 0
      assets/Scripts/Matching/MutipleMatchingMode.js
  24. 9 0
      assets/Scripts/Matching/MutipleMatchingMode.js.meta
  25. 260 0
      assets/Scripts/Matching/PairingMode.js
  26. 9 0
      assets/Scripts/Matching/PairingMode.js.meta
  27. 256 0
      assets/Scripts/Mgobe.js
  28. 9 0
      assets/Scripts/Mgobe.js.meta
  29. 7 0
      assets/Scripts/ThirdParty.meta
  30. 7 0
      assets/Scripts/ThirdParty/MGOBE.meta
  31. 1439 0
      assets/Scripts/ThirdParty/MGOBE/MGOBE.d.ts
  32. 5 0
      assets/Scripts/ThirdParty/MGOBE/MGOBE.d.ts.meta
  33. 0 0
      assets/Scripts/ThirdParty/MGOBE/MGOBE.js
  34. 9 0
      assets/Scripts/ThirdParty/MGOBE/MGOBE.js.meta
  35. 48 0
      assets/Scripts/ThirdParty/WebSocket.js
  36. 9 0
      assets/Scripts/ThirdParty/WebSocket.js.meta
  37. 270 0
      assets/Scripts/WebView.js
  38. 9 0
      assets/Scripts/WebView.js.meta
  39. 7 0
      assets/Textures.meta
  40. 7 0
      assets/Textures/Matching.meta
  41. BIN
      assets/Textures/Matching/BG1600.png
  42. 36 0
      assets/Textures/Matching/BG1600.png.meta
  43. BIN
      assets/Textures/Matching/BlueLine.png
  44. 36 0
      assets/Textures/Matching/BlueLine.png.meta
  45. BIN
      assets/Textures/Matching/Boy.png
  46. 36 0
      assets/Textures/Matching/Boy.png.meta
  47. BIN
      assets/Textures/Matching/BoyAvatarStroke.png
  48. 36 0
      assets/Textures/Matching/BoyAvatarStroke.png.meta
  49. BIN
      assets/Textures/Matching/DefaultBoyAvatar.jpg
  50. 36 0
      assets/Textures/Matching/DefaultBoyAvatar.jpg.meta
  51. BIN
      assets/Textures/Matching/DefaultGirlAvatar.jpg
  52. 36 0
      assets/Textures/Matching/DefaultGirlAvatar.jpg.meta
  53. BIN
      assets/Textures/Matching/DownMeteor.png
  54. 36 0
      assets/Textures/Matching/DownMeteor.png.meta
  55. BIN
      assets/Textures/Matching/Girl.png
  56. 36 0
      assets/Textures/Matching/Girl.png.meta
  57. BIN
      assets/Textures/Matching/GirlAvatarStroke.png
  58. 36 0
      assets/Textures/Matching/GirlAvatarStroke.png.meta
  59. BIN
      assets/Textures/Matching/GrayTitleLine.png
  60. 36 0
      assets/Textures/Matching/GrayTitleLine.png.meta
  61. 7 0
      assets/Textures/Matching/LoadingDotAnimation.meta
  62. BIN
      assets/Textures/Matching/LoadingDotAnimation/LoadingLeftDot.png
  63. 36 0
      assets/Textures/Matching/LoadingDotAnimation/LoadingLeftDot.png.meta
  64. BIN
      assets/Textures/Matching/LoadingDotAnimation/LoadingMiddleDot.png
  65. 36 0
      assets/Textures/Matching/LoadingDotAnimation/LoadingMiddleDot.png.meta
  66. BIN
      assets/Textures/Matching/LoadingDotAnimation/LoadingRightDot.png
  67. 36 0
      assets/Textures/Matching/LoadingDotAnimation/LoadingRightDot.png.meta
  68. 7 0
      assets/Textures/Matching/MatchingAnimation.meta
  69. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_00.png
  70. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_00.png.meta
  71. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_01.png
  72. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_01.png.meta
  73. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_02.png
  74. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_02.png.meta
  75. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_03.png
  76. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_03.png.meta
  77. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_04.png
  78. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_04.png.meta
  79. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_05.png
  80. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_05.png.meta
  81. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_06.png
  82. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_06.png.meta
  83. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_07.png
  84. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_07.png.meta
  85. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_08.png
  86. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_08.png.meta
  87. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_09.png
  88. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_09.png.meta
  89. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_10.png
  90. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_10.png.meta
  91. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_11.png
  92. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_11.png.meta
  93. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_12.png
  94. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_12.png.meta
  95. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_13.png
  96. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_13.png.meta
  97. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_14.png
  98. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_14.png.meta
  99. BIN
      assets/Textures/Matching/MatchingAnimation/paopao-animation_15.png
  100. 36 0
      assets/Textures/Matching/MatchingAnimation/paopao-animation_15.png.meta

+ 53 - 0
.gitignore

@@ -0,0 +1,53 @@
+#/////////////////////////////////////////////////////////////////////////////
+# Fireball Projects
+#/////////////////////////////////////////////////////////////////////////////
+
+/library/
+/temp/
+/local/
+/build/
+
+#/////////////////////////////////////////////////////////////////////////////
+# npm files
+#/////////////////////////////////////////////////////////////////////////////
+
+npm-debug.log
+node_modules/
+
+#/////////////////////////////////////////////////////////////////////////////
+# Logs and databases
+#/////////////////////////////////////////////////////////////////////////////
+
+*.log
+*.sql
+*.sqlite
+
+#/////////////////////////////////////////////////////////////////////////////
+# files for debugger
+#/////////////////////////////////////////////////////////////////////////////
+
+*.sln
+*.csproj
+*.pidb
+*.unityproj
+*.suo
+
+#/////////////////////////////////////////////////////////////////////////////
+# OS generated files
+#/////////////////////////////////////////////////////////////////////////////
+
+.DS_Store
+ehthumbs.db
+Thumbs.db
+
+#/////////////////////////////////////////////////////////////////////////////
+# WebStorm files
+#/////////////////////////////////////////////////////////////////////////////
+
+.idea/
+
+#//////////////////////////
+# VS Code files
+#//////////////////////////
+
+.vscode/

+ 7 - 0
assets/Animations.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "d0e791bd-0a5b-4508-a9b8-7ceae557b89b",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 7 - 0
assets/Animations/Matching.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "360f8326-2f01-4d65-a713-6e76750f6708",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 385 - 0
assets/Animations/Matching/bubble.anim

@@ -0,0 +1,385 @@
+{
+  "__type__": "cc.AnimationClip",
+  "_name": "bubble",
+  "_objFlags": 0,
+  "_native": "",
+  "_duration": 5.016666666666667,
+  "sample": 60,
+  "speed": 3,
+  "wrapMode": 2,
+  "curveData": {
+    "comps": {
+      "cc.Sprite": {
+        "spriteFrame": [
+          {
+            "frame": 0,
+            "value": {
+              "__uuid__": "aa8342b8-1f07-497b-8983-78cd428c6268"
+            }
+          },
+          {
+            "frame": 0.08333333333333333,
+            "value": {
+              "__uuid__": "12fb674b-2ff1-48a1-84b0-23a7002d00ce"
+            }
+          },
+          {
+            "frame": 0.16666666666666666,
+            "value": {
+              "__uuid__": "bbab860c-8f33-4a4d-b4b5-172c5bbf22a9"
+            }
+          },
+          {
+            "frame": 0.25,
+            "value": {
+              "__uuid__": "ea419db9-f672-4f43-bf59-170ee671736c"
+            }
+          },
+          {
+            "frame": 0.3333333333333333,
+            "value": {
+              "__uuid__": "7d330fc7-1e78-4c30-9f1e-2ef73baa8c0d"
+            }
+          },
+          {
+            "frame": 0.4166666666666667,
+            "value": {
+              "__uuid__": "afe18ddf-c6fd-473c-b8d0-bb05babe0025"
+            }
+          },
+          {
+            "frame": 0.5,
+            "value": {
+              "__uuid__": "5a8e82c2-073a-4ad7-bd42-3634f76650a1"
+            }
+          },
+          {
+            "frame": 0.5833333333333334,
+            "value": {
+              "__uuid__": "29294db3-0005-41a7-9371-2bd826ed9742"
+            }
+          },
+          {
+            "frame": 0.6666666666666666,
+            "value": {
+              "__uuid__": "fffbc2cd-31a0-4813-bf88-30ab2fa9ed90"
+            }
+          },
+          {
+            "frame": 0.75,
+            "value": {
+              "__uuid__": "f107d392-5ed6-4d18-821a-cbba64ffc55d"
+            }
+          },
+          {
+            "frame": 0.8333333333333334,
+            "value": {
+              "__uuid__": "19e4fcf7-2d8a-401c-b3fc-bbdf2e152bb5"
+            }
+          },
+          {
+            "frame": 0.9166666666666666,
+            "value": {
+              "__uuid__": "27a87ed5-b244-4d9a-a669-cfbe03519d03"
+            }
+          },
+          {
+            "frame": 1,
+            "value": {
+              "__uuid__": "458b964e-439a-43be-9077-31cfcfa7a62e"
+            }
+          },
+          {
+            "frame": 1.0833333333333333,
+            "value": {
+              "__uuid__": "99787e05-ad2b-447f-b1fe-afb4b7b85b70"
+            }
+          },
+          {
+            "frame": 1.1666666666666667,
+            "value": {
+              "__uuid__": "16d5bb07-f8ce-46b9-ade8-1f1dfc5af53c"
+            }
+          },
+          {
+            "frame": 1.25,
+            "value": {
+              "__uuid__": "fcbf7bc1-1f9b-443d-822c-76a73611aa3e"
+            }
+          },
+          {
+            "frame": 1.3333333333333333,
+            "value": {
+              "__uuid__": "442a94cf-92ae-4856-b1b9-546d37575a0e"
+            }
+          },
+          {
+            "frame": 1.4166666666666667,
+            "value": {
+              "__uuid__": "3f838a12-9801-4f59-9897-d017378499f7"
+            }
+          },
+          {
+            "frame": 1.5,
+            "value": {
+              "__uuid__": "8572ddac-c665-410f-851c-f5f55e093c23"
+            }
+          },
+          {
+            "frame": 1.5833333333333333,
+            "value": {
+              "__uuid__": "6edb2523-6437-42e7-88dd-4f32dcef5902"
+            }
+          },
+          {
+            "frame": 1.6666666666666667,
+            "value": {
+              "__uuid__": "57dd6253-9393-489c-971f-a3bcaf7605bc"
+            }
+          },
+          {
+            "frame": 1.75,
+            "value": {
+              "__uuid__": "70269fd1-c7c5-43e0-a7c1-264ccb0a9e5d"
+            }
+          },
+          {
+            "frame": 1.8333333333333333,
+            "value": {
+              "__uuid__": "eb8a76a2-0519-464f-91b0-9f7b9356b941"
+            }
+          },
+          {
+            "frame": 1.9166666666666667,
+            "value": {
+              "__uuid__": "9b93b5a7-2058-4cd0-8112-4a3050a69932"
+            }
+          },
+          {
+            "frame": 2,
+            "value": {
+              "__uuid__": "7190f777-be44-4e2b-9cf5-635a6de5d223"
+            }
+          },
+          {
+            "frame": 2.0833333333333335,
+            "value": {
+              "__uuid__": "8a74afb3-17d0-4923-9b9b-ca9795ec5aa6"
+            }
+          },
+          {
+            "frame": 2.1666666666666665,
+            "value": {
+              "__uuid__": "50aa6c22-feac-4bbe-9abf-bb9f512c8ab8"
+            }
+          },
+          {
+            "frame": 2.25,
+            "value": {
+              "__uuid__": "ed8eb13a-dacc-4a35-af51-249d6b7a3e5c"
+            }
+          },
+          {
+            "frame": 2.3333333333333335,
+            "value": {
+              "__uuid__": "6d205b23-d084-4785-aa0e-39788d0b17b2"
+            }
+          },
+          {
+            "frame": 2.4166666666666665,
+            "value": {
+              "__uuid__": "0c3cb9df-9112-49ad-b77d-9d33a507be38"
+            }
+          },
+          {
+            "frame": 2.5,
+            "value": {
+              "__uuid__": "2be95c9a-7920-423f-8e2c-cfcbd15435a3"
+            }
+          },
+          {
+            "frame": 2.5833333333333335,
+            "value": {
+              "__uuid__": "221c1674-b7fa-4004-ac34-220475267c32"
+            }
+          },
+          {
+            "frame": 2.6666666666666665,
+            "value": {
+              "__uuid__": "bd7c6a1a-94f0-40e4-a197-9dda5fad22e5"
+            }
+          },
+          {
+            "frame": 2.75,
+            "value": {
+              "__uuid__": "6a7a30f6-1719-483a-a075-c31105b6b419"
+            }
+          },
+          {
+            "frame": 2.8333333333333335,
+            "value": {
+              "__uuid__": "ac698444-a773-49e1-b041-fe0d465d8943"
+            }
+          },
+          {
+            "frame": 2.9166666666666665,
+            "value": {
+              "__uuid__": "3220f622-4565-4141-8a72-5ab1eeecce61"
+            }
+          },
+          {
+            "frame": 3,
+            "value": {
+              "__uuid__": "ec905783-3f92-4de5-b8fe-50961f659bee"
+            }
+          },
+          {
+            "frame": 3.0833333333333335,
+            "value": {
+              "__uuid__": "e904f13e-29d2-4897-af1d-4795f643ffba"
+            }
+          },
+          {
+            "frame": 3.1666666666666665,
+            "value": {
+              "__uuid__": "9568a9b4-db3a-42d5-9233-529e2f0f9327"
+            }
+          },
+          {
+            "frame": 3.25,
+            "value": {
+              "__uuid__": "988555dd-f50a-4b66-b224-f97faf20fb63"
+            }
+          },
+          {
+            "frame": 3.3333333333333335,
+            "value": {
+              "__uuid__": "5325e301-29fa-482b-b81f-a6b08607df87"
+            }
+          },
+          {
+            "frame": 3.4166666666666665,
+            "value": {
+              "__uuid__": "09fc9c4e-3683-4aaf-a6bd-2fdaf960820f"
+            }
+          },
+          {
+            "frame": 3.5,
+            "value": {
+              "__uuid__": "0f979b1e-1f43-4d2b-b698-432d09bfc877"
+            }
+          },
+          {
+            "frame": 3.5833333333333335,
+            "value": {
+              "__uuid__": "5a0c2040-457b-43b8-a597-63dc46c4220f"
+            }
+          },
+          {
+            "frame": 3.6666666666666665,
+            "value": {
+              "__uuid__": "82c41d8a-bc2b-451f-9fce-3a52c1c45fef"
+            }
+          },
+          {
+            "frame": 3.75,
+            "value": {
+              "__uuid__": "7e3e2013-c4c8-4fc3-aa59-361c8e2359f2"
+            }
+          },
+          {
+            "frame": 3.8333333333333335,
+            "value": {
+              "__uuid__": "5d2edc25-28f2-402c-90d9-584045908e68"
+            }
+          },
+          {
+            "frame": 3.9166666666666665,
+            "value": {
+              "__uuid__": "4df36432-2fe8-4871-adb1-6004d3957de3"
+            }
+          },
+          {
+            "frame": 4,
+            "value": {
+              "__uuid__": "e52d5c81-3c69-46ba-aa18-a66d6d016524"
+            }
+          },
+          {
+            "frame": 4.083333333333333,
+            "value": {
+              "__uuid__": "9871247c-cb2b-4a26-a209-8ea28480ed0b"
+            }
+          },
+          {
+            "frame": 4.166666666666667,
+            "value": {
+              "__uuid__": "fee9f846-2a91-435f-8fca-3ca454332b06"
+            }
+          },
+          {
+            "frame": 4.25,
+            "value": {
+              "__uuid__": "e76a5327-6653-417f-aa97-7aee828dc10e"
+            }
+          },
+          {
+            "frame": 4.333333333333333,
+            "value": {
+              "__uuid__": "953fd1cb-5e2d-461f-bb6a-0fd9b46a870a"
+            }
+          },
+          {
+            "frame": 4.416666666666667,
+            "value": {
+              "__uuid__": "5f435daf-b2e7-40a0-9f9c-2b301f1eb57c"
+            }
+          },
+          {
+            "frame": 4.5,
+            "value": {
+              "__uuid__": "aa8342b8-1f07-497b-8983-78cd428c6268"
+            }
+          },
+          {
+            "frame": 4.583333333333333,
+            "value": {
+              "__uuid__": "28469033-6c76-4e19-b3b2-3b75d2039a4b"
+            }
+          },
+          {
+            "frame": 4.666666666666667,
+            "value": {
+              "__uuid__": "9e426e13-62ca-46d9-b83e-b5d98f968e94"
+            }
+          },
+          {
+            "frame": 4.75,
+            "value": {
+              "__uuid__": "baa26f77-3d83-451e-99b4-f64b24333cdd"
+            }
+          },
+          {
+            "frame": 4.833333333333333,
+            "value": {
+              "__uuid__": "358d21c7-4341-4dc9-81f2-c61939bbe4d2"
+            }
+          },
+          {
+            "frame": 4.916666666666667,
+            "value": {
+              "__uuid__": "ac6223ad-78a9-4e28-8955-ab57c78b68b1"
+            }
+          },
+          {
+            "frame": 5,
+            "value": {
+              "__uuid__": "24cd083d-004f-4177-86eb-a564554be1d0"
+            }
+          }
+        ]
+      }
+    }
+  },
+  "events": []
+}

+ 5 - 0
assets/Animations/Matching/bubble.anim.meta

@@ -0,0 +1,5 @@
+{
+  "ver": "2.1.0",
+  "uuid": "a4dc8dd1-0db5-441d-bf17-3dedf5c84a43",
+  "subMetas": {}
+}

+ 111 - 0
assets/Animations/Matching/dot.anim

@@ -0,0 +1,111 @@
+{
+  "__type__": "cc.AnimationClip",
+  "_name": "dot",
+  "_objFlags": 0,
+  "_native": "",
+  "_duration": 3.0166666666666666,
+  "sample": 60,
+  "speed": 1,
+  "wrapMode": 2,
+  "curveData": {
+    "paths": {
+      "LoadingLeftDot": {
+        "comps": {
+          "cc.Sprite": {
+            "spriteFrame": [
+              {
+                "frame": 0,
+                "value": {
+                  "__uuid__": "d57e9fdf-2fbf-4d31-8170-06e8ec564c79"
+                }
+              },
+              {
+                "frame": 1,
+                "value": {
+                  "__uuid__": "6afe5901-8c94-41f1-b2a1-4d7329f77c32"
+                }
+              },
+              {
+                "frame": 2,
+                "value": {
+                  "__uuid__": "0b9e2cd7-8c98-4c4a-bce6-98ee4e4389b5"
+                }
+              },
+              {
+                "frame": 3,
+                "value": {
+                  "__uuid__": "d57e9fdf-2fbf-4d31-8170-06e8ec564c79"
+                }
+              }
+            ]
+          }
+        }
+      },
+      "LoadingMiddleDot": {
+        "comps": {
+          "cc.Sprite": {
+            "spriteFrame": [
+              {
+                "frame": 0,
+                "value": {
+                  "__uuid__": "6afe5901-8c94-41f1-b2a1-4d7329f77c32"
+                }
+              },
+              {
+                "frame": 1,
+                "value": {
+                  "__uuid__": "0b9e2cd7-8c98-4c4a-bce6-98ee4e4389b5"
+                }
+              },
+              {
+                "frame": 2,
+                "value": {
+                  "__uuid__": "d57e9fdf-2fbf-4d31-8170-06e8ec564c79"
+                }
+              },
+              {
+                "frame": 3,
+                "value": {
+                  "__uuid__": "6afe5901-8c94-41f1-b2a1-4d7329f77c32"
+                }
+              }
+            ]
+          }
+        }
+      },
+      "LoadingRightDot": {
+        "comps": {
+          "cc.Sprite": {
+            "spriteFrame": [
+              {
+                "frame": 0,
+                "value": {
+                  "__uuid__": "0b9e2cd7-8c98-4c4a-bce6-98ee4e4389b5"
+                }
+              },
+              {
+                "frame": 1,
+                "value": {
+                  "__uuid__": "d57e9fdf-2fbf-4d31-8170-06e8ec564c79"
+                }
+              },
+              {
+                "frame": 2,
+                "value": {
+                  "__uuid__": "6afe5901-8c94-41f1-b2a1-4d7329f77c32"
+                }
+              },
+              {
+                "frame": 3,
+                "value": {
+                  "__uuid__": "0b9e2cd7-8c98-4c4a-bce6-98ee4e4389b5"
+                }
+              }
+            ]
+          }
+        }
+      }
+    }
+  },
+  "events": []
+}

+ 5 - 0
assets/Animations/Matching/dot.anim.meta

@@ -0,0 +1,5 @@
+{
+  "ver": "2.1.0",
+  "uuid": "e6eaf390-c69a-4c3b-9b04-a9a1edcb79da",
+  "subMetas": {}
+}

+ 84 - 0
assets/Animations/Matching/matching.anim

@@ -0,0 +1,84 @@
+{
+  "__type__": "cc.AnimationClip",
+  "_name": "matching",
+  "_objFlags": 0,
+  "_native": "",
+  "_duration": 4,
+  "sample": 60,
+  "speed": 1,
+  "wrapMode": 2,
+  "curveData": {
+    "paths": {
+      "Player2": {
+        "comps": {},
+        "props": {
+          "y": [
+            {
+              "frame": 0,
+              "value": 42.118
+            },
+            {
+              "frame": 1,
+              "value": -5.86
+            },
+            {
+              "frame": 3,
+              "value": 82.794
+            },
+            {
+              "frame": 4,
+              "value": 43.16
+            }
+          ]
+        }
+      },
+      "Player3": {
+        "comps": {},
+        "props": {
+          "y": [
+            {
+              "frame": 0,
+              "value": -134.619
+            },
+            {
+              "frame": 1.0166666666666666,
+              "value": -97.666
+            },
+            {
+              "frame": 3,
+              "value": -180.194
+            },
+            {
+              "frame": 4,
+              "value": -133.387
+            }
+          ]
+        }
+      },
+      "Player4": {
+        "comps": {},
+        "props": {
+          "y": [
+            {
+              "frame": 0,
+              "value": -254.711
+            },
+            {
+              "frame": 1,
+              "value": -325.992
+            },
+            {
+              "frame": 3.0166666666666666,
+              "value": -199.433
+            },
+            {
+              "frame": 4,
+              "value": -252.845
+            }
+          ]
+        }
+      }
+    }
+  },
+  "events": []
+}

+ 5 - 0
assets/Animations/Matching/matching.anim.meta

@@ -0,0 +1,5 @@
+{
+  "ver": "2.1.0",
+  "uuid": "c254bb52-dbc5-4958-a799-3c5b560354d5",
+  "subMetas": {}
+}

+ 43 - 0
assets/Animations/Matching/shootingStar.anim

@@ -0,0 +1,43 @@
+{
+  "__type__": "cc.AnimationClip",
+  "_name": "shootingStar",
+  "_objFlags": 0,
+  "_native": "",
+  "_duration": 0.16666666666666666,
+  "sample": 60,
+  "speed": 0.3,
+  "wrapMode": 1,
+  "curveData": {
+    "paths": {
+      "UpMeteor": {
+        "props": {
+          "x": [
+            {
+              "frame": 0,
+              "value": -557
+            },
+            {
+              "frame": 0.16666666666666666,
+              "value": 161.399
+            }
+          ]
+        }
+      },
+      "DownMeteor": {
+        "props": {
+          "x": [
+            {
+              "frame": 0,
+              "value": 567
+            },
+            {
+              "frame": 0.16666666666666666,
+              "value": -156.826
+            }
+          ]
+        }
+      }
+    }
+  },
+  "events": []
+}

+ 5 - 0
assets/Animations/Matching/shootingStar.anim.meta

@@ -0,0 +1,5 @@
+{
+  "ver": "2.1.0",
+  "uuid": "febfffa0-2a4b-4e78-9658-28b91e50c997",
+  "subMetas": {}
+}

+ 7 - 0
assets/Audios.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "4e2a3316-56fb-429c-97e5-c569e86c365c",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 7 - 0
assets/Audios/Pairing.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "f1673cd6-b6d1-492d-a305-fcccec4b019f",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

BIN
assets/Audios/Pairing/MatchSuccess.mp3


+ 6 - 0
assets/Audios/Pairing/MatchSuccess.mp3.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "2.0.0",
+  "uuid": "cb39bc91-cbde-46ee-9597-b1d25a611d48",
+  "downloadMode": 0,
+  "subMetas": {}
+}

+ 7 - 0
assets/Scenes.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "197172a8-9e07-4bfb-b73f-f3818b7b203a",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 3180 - 0
assets/Scenes/Pairing.fire

@@ -0,0 +1,3180 @@
+[
+  {
+    "__type__": "cc.SceneAsset",
+    "_name": "",
+    "_objFlags": 0,
+    "_native": "",
+    "scene": {
+      "__id__": 1
+    }
+  },
+  {
+    "__type__": "cc.Scene",
+    "_objFlags": 0,
+    "_parent": null,
+    "_children": [
+      {
+        "__id__": 2
+      }
+    ],
+    "_active": false,
+    "_components": [],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_is3DNode": true,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "autoReleaseAssets": false,
+    "_id": "a0c19945-fbba-43ae-98d2-535782ba3441"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Canvas",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 1
+    },
+    "_children": [
+      {
+        "__id__": 3
+      },
+      {
+        "__id__": 5
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 64
+      },
+      {
+        "__id__": 65
+      },
+      {
+        "__id__": 66
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 720,
+      "height": 1280
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        360,
+        640,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "a5esZu+45LA5mBpvttspPD"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Main Camera",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 2
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 4
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        541.2658773652742,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "e1WoFrQ79G7r4ZuQE3HlNb"
+  },
+  {
+    "__type__": "cc.Camera",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 3
+    },
+    "_enabled": true,
+    "_cullingMask": 4294967295,
+    "_clearFlags": 7,
+    "_backgroundColor": {
+      "__type__": "cc.Color",
+      "r": 0,
+      "g": 0,
+      "b": 0,
+      "a": 255
+    },
+    "_depth": -1,
+    "_zoomRatio": 1,
+    "_targetTexture": null,
+    "_fov": 60,
+    "_orthoSize": 10,
+    "_nearClip": 1,
+    "_farClip": 4096,
+    "_ortho": true,
+    "_rect": {
+      "__type__": "cc.Rect",
+      "x": 0,
+      "y": 0,
+      "width": 1,
+      "height": 1
+    },
+    "_renderStages": 1,
+    "_alignWithScreen": true,
+    "_id": "81GN3uXINKVLeW4+iKSlim"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "BG",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 2
+    },
+    "_children": [
+      {
+        "__id__": 6
+      },
+      {
+        "__id__": 9
+      },
+      {
+        "__id__": 13
+      },
+      {
+        "__id__": 15
+      },
+      {
+        "__id__": 19
+      },
+      {
+        "__id__": 21
+      },
+      {
+        "__id__": 35
+      },
+      {
+        "__id__": 57
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 63
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 720,
+      "height": 1600
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_position": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_scale": {
+      "__type__": "cc.Vec3",
+      "x": 1,
+      "y": 1,
+      "z": 1
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "caOfz9f8FBAaH3XzZEF7pl"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "PaopaoAnimation",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [],
+    "_active": false,
+    "_components": [
+      {
+        "__id__": 7
+      },
+      {
+        "__id__": 8
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 473,
+      "height": 474
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_position": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": -48,
+      "z": 0
+    },
+    "_scale": {
+      "__type__": "cc.Vec3",
+      "x": 1,
+      "y": 1,
+      "z": 1
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        6.182,
+        -66.216,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1.5,
+        1.5,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "bbD3WQBLBB46XvSeCwivHk"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 6
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "5f435daf-b2e7-40a0-9f9c-2b301f1eb57c"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "1aEh3Xym5N/71xfE5RuT+B"
+  },
+  {
+    "__type__": "cc.Animation",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 6
+    },
+    "_enabled": true,
+    "_defaultClip": {
+      "__uuid__": "a4dc8dd1-0db5-441d-bf17-3dedf5c84a43"
+    },
+    "_clips": [
+      {
+        "__uuid__": "a4dc8dd1-0db5-441d-bf17-3dedf5c84a43"
+      }
+    ],
+    "playOnLoad": true,
+    "_id": "53lHYwRCZBF5MVMU9ZKUeC"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "TitleTxt",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [
+      {
+        "__id__": 10
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 12
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 0,
+      "g": 0,
+      "b": 0,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 380,
+      "height": 126
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        12.391,
+        396.846,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "0aT5sUvixJCJvMO+Dlroel"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "BlueLine",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 9
+    },
+    "_children": [],
+    "_active": false,
+    "_components": [
+      {
+        "__id__": 11
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 733,
+      "height": 157
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        -12.391,
+        -3.173,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "ecZgNC28ZDGLbaTJBTHs5w"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 10
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "2bf8f3ec-d847-4121-853f-bf25b4f09f34"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "05xdG6Ol5JTKGfbIwpc1sJ"
+  },
+  {
+    "__type__": "cc.Label",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 9
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_useOriginalSize": false,
+    "_string": "正在匹配",
+    "_N$string": "正在匹配",
+    "_fontSize": 95,
+    "_lineHeight": 100,
+    "_enableWrapText": true,
+    "_N$file": null,
+    "_isSystemFontUsed": true,
+    "_spacingX": 0,
+    "_batchAsBitmap": false,
+    "_styleFlags": 0,
+    "_underlineHeight": 0,
+    "_N$horizontalAlign": 1,
+    "_N$verticalAlign": 1,
+    "_N$fontFamily": "Arial",
+    "_N$overflow": 0,
+    "_N$cacheMode": 0,
+    "_id": "12A3aq9mNAM6UdEukYzzCL"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "TimeTxt",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 14
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 0,
+      "g": 0,
+      "b": 0,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 200.2,
+      "height": 100.8
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        5.519,
+        216.163,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "83rZXdzXRKqpJs31zCe+wR"
+  },
+  {
+    "__type__": "cc.Label",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 13
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_useOriginalSize": false,
+    "_string": "00:00",
+    "_N$string": "00:00",
+    "_fontSize": 80,
+    "_lineHeight": 80,
+    "_enableWrapText": true,
+    "_N$file": null,
+    "_isSystemFontUsed": true,
+    "_spacingX": 0,
+    "_batchAsBitmap": false,
+    "_styleFlags": 0,
+    "_underlineHeight": 0,
+    "_N$horizontalAlign": 1,
+    "_N$verticalAlign": 1,
+    "_N$fontFamily": "Arial",
+    "_N$overflow": 0,
+    "_N$cacheMode": 0,
+    "_id": "6eEwKim5FDHLDLupYQHf5E"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "WaitTxt",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [
+      {
+        "__id__": 16
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 18
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 0,
+      "g": 0,
+      "b": 0,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 148,
+      "height": 50.4
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        10.91,
+        97.004,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "0eZMaMpB1MMJ1BZobOzZuz"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "GrayTitleLine",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 15
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 17
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 417,
+      "height": 3
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "57x8YR4hdI/b+KsMrT5gM5"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 16
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "5d0b6ca0-933e-450a-ad97-64cfa808fad0"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "31QbA2YRVFFqJvH7STxenR"
+  },
+  {
+    "__type__": "cc.Label",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 15
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_useOriginalSize": false,
+    "_string": "等待时间",
+    "_N$string": "等待时间",
+    "_fontSize": 37,
+    "_lineHeight": 40,
+    "_enableWrapText": true,
+    "_N$file": null,
+    "_isSystemFontUsed": true,
+    "_spacingX": 0,
+    "_batchAsBitmap": false,
+    "_styleFlags": 0,
+    "_underlineHeight": 0,
+    "_N$horizontalAlign": 1,
+    "_N$verticalAlign": 1,
+    "_N$fontFamily": "Arial",
+    "_N$overflow": 0,
+    "_N$cacheMode": 0,
+    "_id": "3dwDXadaNMMaUp1IlCar+I"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "VS",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 20
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 71,
+      "height": 119
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        10,
+        -66,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "fetR6c/UdAep/So9IhFKMQ"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 19
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "b7b500dd-52bf-43d7-bc35-bc1771ac563f"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "d2tw4kNShBQ44y1OIAIxLa"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Player1",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [
+      {
+        "__id__": 22
+      },
+      {
+        "__id__": 24
+      },
+      {
+        "__id__": 28
+      },
+      {
+        "__id__": 30
+      }
+    ],
+    "_active": true,
+    "_components": [],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        -190,
+        -66.216,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "8c26e269FEtIzgmjuPczLL"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Name",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 21
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 23
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 0,
+      "g": 0,
+      "b": 0,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 200,
+      "height": 100
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        -4.689,
+        -143,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "a3poK+l7pMpJ5H6piRHZWw"
+  },
+  {
+    "__type__": "cc.Label",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 22
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_useOriginalSize": false,
+    "_string": "Jack",
+    "_N$string": "Jack",
+    "_fontSize": 30,
+    "_lineHeight": 30,
+    "_enableWrapText": true,
+    "_N$file": null,
+    "_isSystemFontUsed": true,
+    "_spacingX": 0,
+    "_batchAsBitmap": false,
+    "_styleFlags": 0,
+    "_underlineHeight": 0,
+    "_N$horizontalAlign": 1,
+    "_N$verticalAlign": 1,
+    "_N$fontFamily": "Arial",
+    "_N$overflow": 1,
+    "_N$cacheMode": 0,
+    "_id": "2c3k2bH5dDqLMbMs3AzRkZ"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Mask",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 21
+    },
+    "_children": [
+      {
+        "__id__": 25
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 27
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 170,
+      "height": 170
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "e0XNBeNMJO4bFCsCg1ZmrU"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "AvatarSp",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 24
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 26
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 200,
+      "height": 200
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "88WtddLVFHI6vqZ+0lOjhS"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "HeadImg<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 25
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "b1d7f839-2cf1-4084-bbd5-c62ec513e7bc"
+    },
+    "_type": 0,
+    "_sizeMode": 0,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "93IOI1ktFHIZznD/NUzSra"
+  },
+  {
+    "__type__": "cc.Mask",
+    "_name": "Mask<Mask>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 24
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_spriteFrame": null,
+    "_type": 1,
+    "_segments": 64,
+    "_N$alphaThreshold": 0,
+    "_N$inverted": false,
+    "_id": "c6ic9RM3JJ6qrI81SNzym5"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Stroke",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 21
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 29
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 180,
+      "height": 180
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "31dtSINH1Icay4og+e/pn3"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "FrameMy<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 28
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "9660088c-2cc0-400e-aa40-27ed197ea1f2"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "3dNKxSW1JMv5BzZofAa03e"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Gender",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 21
+    },
+    "_children": [
+      {
+        "__id__": 31
+      },
+      {
+        "__id__": 33
+      }
+    ],
+    "_active": true,
+    "_components": [],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        56.808,
+        -74.864,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "19iS+2D3dA9pUkJSDJ7gII"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "IconBoy",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 30
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 32
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 37,
+      "height": 37
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "b6rKgRcClLkrckJo+XM03Y"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "Icon<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 31
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "d152c886-39e5-400c-84b4-c285f24ef41c"
+    },
+    "_type": 0,
+    "_sizeMode": 0,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "cc/8DjUkxEH55T+JP4WdbV"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "IconGirl",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 30
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 34
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 37,
+      "height": 37
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "62nW3oA/9HvbEaCbkRRWI1"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "Icon<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 33
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "bd899779-6d48-480f-afee-9749958511fe"
+    },
+    "_type": 0,
+    "_sizeMode": 0,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "18PKZJOr5Ffopx3bJq8gTV"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Player2",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [
+      {
+        "__id__": 36
+      },
+      {
+        "__id__": 38
+      },
+      {
+        "__id__": 42
+      },
+      {
+        "__id__": 44
+      },
+      {
+        "__id__": 52
+      }
+    ],
+    "_active": true,
+    "_components": [],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        190,
+        -66.216,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "8ec1IU3EZAG6562cOjSVua"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Name",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 35
+    },
+    "_children": [],
+    "_active": false,
+    "_components": [
+      {
+        "__id__": 37
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 0,
+      "g": 0,
+      "b": 0,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 200,
+      "height": 100
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        -1.3200000000000003,
+        -136,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "5arx7HZ+lHZpQDCxZPRx41"
+  },
+  {
+    "__type__": "cc.Label",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 36
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_useOriginalSize": false,
+    "_string": "Yichael",
+    "_N$string": "Yichael",
+    "_fontSize": 30,
+    "_lineHeight": 30,
+    "_enableWrapText": true,
+    "_N$file": null,
+    "_isSystemFontUsed": true,
+    "_spacingX": 0,
+    "_batchAsBitmap": false,
+    "_styleFlags": 0,
+    "_underlineHeight": 0,
+    "_N$horizontalAlign": 1,
+    "_N$verticalAlign": 1,
+    "_N$fontFamily": "Arial",
+    "_N$overflow": 1,
+    "_N$cacheMode": 0,
+    "_id": "3cSUNua4NG+ZqLs3Kl42aR"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Mask",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 35
+    },
+    "_children": [
+      {
+        "__id__": 39
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 41
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 170,
+      "height": 170
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "fbEPv2EJFCMqzdDEUxng7b"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "AvatarSp",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 38
+    },
+    "_children": [],
+    "_active": false,
+    "_components": [
+      {
+        "__id__": 40
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 200,
+      "height": 200
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "58FO9gG1hBYKa/ahOwQpmR"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "HeadImg<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 39
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "a5b19591-8257-4fe1-a5de-b30caea0a5a0"
+    },
+    "_type": 0,
+    "_sizeMode": 0,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "e90X+upfpIQpxvSVpEYLyH"
+  },
+  {
+    "__type__": "cc.Mask",
+    "_name": "Mask<Mask>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 38
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_spriteFrame": null,
+    "_type": 1,
+    "_segments": 64,
+    "_N$alphaThreshold": 0,
+    "_N$inverted": false,
+    "_id": "5atHmOOHNFHKL4VBP+dwDP"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Stroke",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 35
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 43
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 180,
+      "height": 180
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "72Gk/5m/ZIlagIkFUYhkdf"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "FrameMy<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 42
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "5f2e6a63-c568-462c-859f-61ea0527789c"
+    },
+    "_type": 0,
+    "_sizeMode": 0,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "a17QhA9dxHcIOgc156Bxdk"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "DotAnimation",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 35
+    },
+    "_children": [
+      {
+        "__id__": 45
+      },
+      {
+        "__id__": 47
+      },
+      {
+        "__id__": 49
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 51
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "50xwxqNfNMCZsuqTO7hEG1"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "LoadingLeftDot",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 44
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 46
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 19,
+      "height": 19
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        30,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "bf81eF+2RCp5MlNHqyxM4B"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 45
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "d57e9fdf-2fbf-4d31-8170-06e8ec564c79"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "63U/kdPF5JnbMhkdTZ+Fxj"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "LoadingMiddleDot",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 44
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 48
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 19,
+      "height": 19
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "eamH/P2plN2o6vplcnqbhp"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 47
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "6afe5901-8c94-41f1-b2a1-4d7329f77c32"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "21H6xf+ZRHW7j5I5mEUfcB"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "LoadingRightDot",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 44
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 50
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 19,
+      "height": 19
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        -30,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "f1yq0bhPJKbKh/AWSXtt+x"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 49
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "0b9e2cd7-8c98-4c4a-bce6-98ee4e4389b5"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "6eIeMDlT1Dqa2OG/bx6HMz"
+  },
+  {
+    "__type__": "cc.Animation",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 44
+    },
+    "_enabled": true,
+    "_defaultClip": {
+      "__uuid__": "e6eaf390-c69a-4c3b-9b04-a9a1edcb79da"
+    },
+    "_clips": [
+      {
+        "__uuid__": "e6eaf390-c69a-4c3b-9b04-a9a1edcb79da"
+      }
+    ],
+    "playOnLoad": true,
+    "_id": "7fhPbY05ZIWLwz83DUW9y2"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Gender",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 35
+    },
+    "_children": [
+      {
+        "__id__": 53
+      },
+      {
+        "__id__": 55
+      }
+    ],
+    "_active": false,
+    "_components": [],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        56.808,
+        -74.864,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "a6koJDd2ROD7F5JW3eNZfv"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "IconBoy",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 52
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 54
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 37,
+      "height": 37
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "c22IxfVnBEcJ4huKYwpuug"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "Icon<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 53
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "d152c886-39e5-400c-84b4-c285f24ef41c"
+    },
+    "_type": 0,
+    "_sizeMode": 0,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "e3csY0e9lLZqaEd0abTI3D"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "IconGirl",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 52
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 56
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 37,
+      "height": 37
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "addaB+kG1EgIh1fT32pvFu"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "Icon<Sprite>",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 55
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "bd899779-6d48-480f-afee-9749958511fe"
+    },
+    "_type": 0,
+    "_sizeMode": 0,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "06tCYhPPJN0ooymxOL9C3Z"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "MeteorLine",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 5
+    },
+    "_children": [
+      {
+        "__id__": 58
+      },
+      {
+        "__id__": 60
+      }
+    ],
+    "_active": false,
+    "_components": [
+      {
+        "__id__": 62
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 0,
+      "height": 0
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        0,
+        389.133,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "f0f5uEHJJK66uKSIehZKMh"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "DownMeteor",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 57
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 59
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 404,
+      "height": 7
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        -577,
+        -69,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "7cyvW+cDJFnITJ705tHVaa"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 58
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "d252255c-f832-4e24-82bd-04e34085de70"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "eaCFebwapB7osxYe4iwFEA"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "UpMeteor",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 57
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 61
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 392,
+      "height": 7
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        567,
+        80,
+        0,
+        0,
+        0,
+        0,
+        1,
+        1,
+        1,
+        1
+      ]
+    },
+    "_eulerAngles": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_skewX": 0,
+    "_skewY": 0,
+    "_is3DNode": false,
+    "_groupIndex": 0,
+    "groupIndex": 0,
+    "_id": "afPaS5fI9Iy6uEfucDVBMd"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 60
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "36ae842b-93f9-4db1-998d-301a3b696e7a"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "daXHLP1xhOW5hdafcp35xx"
+  },
+  {
+    "__type__": "cc.Animation",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 57
+    },
+    "_enabled": true,
+    "_defaultClip": {
+      "__uuid__": "febfffa0-2a4b-4e78-9658-28b91e50c997"
+    },
+    "_clips": [
+      {
+        "__uuid__": "febfffa0-2a4b-4e78-9658-28b91e50c997"
+      }
+    ],
+    "playOnLoad": true,
+    "_id": "6fSEbXjzhGIKfi7qZ5Nfag"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 5
+    },
+    "_enabled": true,
+    "_materials": [
+      {
+        "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
+      }
+    ],
+    "_srcBlendFactor": 770,
+    "_dstBlendFactor": 771,
+    "_spriteFrame": {
+      "__uuid__": "df80771b-456b-47df-95e3-1176906dd83c"
+    },
+    "_type": 0,
+    "_sizeMode": 1,
+    "_fillType": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_atlas": null,
+    "_id": "efpjIbZyNB8aH7TV0Xi7GJ"
+  },
+  {
+    "__type__": "cc.Canvas",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "_designResolution": {
+      "__type__": "cc.Size",
+      "width": 720,
+      "height": 1280
+    },
+    "_fitWidth": true,
+    "_fitHeight": false,
+    "_id": "59Cd0ovbdF4byw5sbjJDx7"
+  },
+  {
+    "__type__": "cc.Widget",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "alignMode": 1,
+    "_target": null,
+    "_alignFlags": 45,
+    "_left": 0,
+    "_right": 0,
+    "_top": 0,
+    "_bottom": 0,
+    "_verticalCenter": 0,
+    "_horizontalCenter": 0,
+    "_isAbsLeft": true,
+    "_isAbsRight": true,
+    "_isAbsTop": true,
+    "_isAbsBottom": true,
+    "_isAbsHorizontalCenter": true,
+    "_isAbsVerticalCenter": true,
+    "_originalWidth": 0,
+    "_originalHeight": 0,
+    "_id": "29zXboiXFBKoIV4PQ2liTe"
+  },
+  {
+    "__type__": "9066afLeE9IgoTgJNnVeW4v",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "nextSceneName": "",
+    "bOpenMgobeServer": true,
+    "player1": {
+      "__id__": 21
+    },
+    "player2": {
+      "__id__": 35
+    },
+    "titleTxt": {
+      "__id__": 9
+    },
+    "timeTxt": {
+      "__id__": 13
+    },
+    "waitTxt": {
+      "__id__": 15
+    },
+    "successAudio": {
+      "__uuid__": "cb39bc91-cbde-46ee-9597-b1d25a611d48"
+    },
+    "meteorLine": {
+      "__id__": 57
+    },
+    "_id": "d2hnBpxkZDCptraaSnPRNe"
+  }
+]

+ 7 - 0
assets/Scenes/Pairing.fire.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.2.7",
+  "uuid": "a0c19945-fbba-43ae-98d2-535782ba3441",
+  "asyncLoadAssets": false,
+  "autoReleaseAssets": false,
+  "subMetas": {}
+}

+ 7 - 0
assets/Scripts.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "f9d436d1-8050-497f-8544-f4f23961ad70",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 180 - 0
assets/Scripts/Library.js

@@ -0,0 +1,180 @@
+let library = {
+    //数组元素位置替换
+    swapArray: function(arr, index1, index2) {
+        arr[index1] = arr.splice(index2, 1, arr[index1])[0];
+        return arr;
+    },
+    swapLeft : function(arr) {
+        let element = arr.shift();
+        arr.push(element);
+    },
+    //生成指定范围随机整数
+    randomFromIntRange: function(min, max) {
+        return Math.floor(Math.random() * (max - min)) + min;
+    },
+    happenRate: function(rate) {
+        let result = this.randomFromIntRange(0,100);
+        if(result<rate)
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+        return;
+    },
+    openInWebview () {
+        let ua = navigator.userAgent.toLowerCase()
+        if (ua.match(/MicroMessenger/i) == 'micromessenger') { // 微信浏览器判断
+            return false
+        } else if (ua.match(/QQ/i) == 'qq') { // QQ浏览器判断
+            return false
+        } else if (ua.match(/WeiBo/i) == "weibo") {
+            return false
+        } else {
+            if (ua.match(/Android/i) != null) {
+                return ua.match(/browser/i) == null
+            } else if (ua.match(/iPhone/i) != null) {
+                return ua.match(/safari/i) == null
+            } else {
+                return (ua.match(/macintosh/i) == null && ua.match(/windows/i) == null)
+            }
+        }
+    },
+    indexOf (arr,item) {
+        for (let i = 0; i < arr.length; i++) {
+            if (arr[i] == item) return i;
+        }
+        return -1;
+    },
+    remove(arr, item) {
+        let index = arr.indexOf(item);
+        if (index > -1) {
+            arr.splice(index, 1);
+        }
+    },
+    setImageBase64(base64Url,callback){
+        let img = new Image();
+        img.src = base64Url;
+        img.onload = function(){
+            let texture = new cc.Texture2D();
+            texture.initWithElement(img);
+            texture.handleLoadedTexture();
+            if (callback)
+                callback(texture);
+        }
+    },
+    /**
+     * 压缩
+     */
+    compress(strNormalString) {
+        alert("压缩前长度:" + strNormalString.length);
+        var strCompressedString = "";
+
+        var ht = new Array();
+        for(i = 0; i < 128; i++) {
+            ht[i] = i;
+        }
+
+        var used = 128;
+        var intLeftOver = 0;
+        var intOutputCode = 0;
+        var pcode = 0;
+        var ccode = 0;
+        var k = 0;
+
+        for(var i=0; i<strNormalString.length; i++) {
+            ccode = strNormalString.charCodeAt(i);
+            k = (pcode << 8) | ccode;
+            if(ht[k] != null) {
+                pcode = ht[k];
+            } else {
+                intLeftOver += 12;
+                intOutputCode <<= 12;
+                intOutputCode |= pcode;
+                pcode = ccode;
+                if(intLeftOver >= 16) {
+                    strCompressedString += String.fromCharCode( intOutputCode >> ( intLeftOver - 16 ) );
+                    intOutputCode &= (Math.pow(2, (intLeftOver - 16)) - 1);
+                    intLeftOver -= 16;
+                }
+                if(used < 4096) {
+                    used ++;
+                    ht[k] = used - 1;
+                }
+            }
+        }
+
+        if(pcode != 0) {
+            intLeftOver += 12;
+            intOutputCode <<= 12;
+            intOutputCode |= pcode;
+        }
+
+        if(intLeftOver >= 16) {
+            strCompressedString += String.fromCharCode( intOutputCode >> ( intLeftOver - 16 ) );
+            intOutputCode &= (Math.pow(2,(intLeftOver - 16)) - 1);
+            intLeftOver -= 16;
+        }
+
+        if( intLeftOver > 0) {
+            intOutputCode <<= (16 - intLeftOver);
+            strCompressedString += String.fromCharCode( intOutputCode );
+        }
+
+        alert("压缩后长度:" + strCompressedString.length);
+        return strCompressedString;
+    },
+    /**
+     * 解压缩
+     */
+    decompress(strCompressedString) {
+
+        var strNormalString = "";
+        var ht = new Array();
+
+        for (i = 0; i < 128; i++) {
+            ht[i] = String.fromCharCode(i);
+        }
+
+        var used = 128;
+        var intLeftOver = 0;
+        var intOutputCode = 0;
+        var ccode = 0;
+        var pcode = 0;
+        var key = 0;
+
+        for (var i = 0; i < strCompressedString.length; i++) {
+            intLeftOver += 16;
+            intOutputCode <<= 16;
+            intOutputCode |= strCompressedString.charCodeAt(i);
+
+            while (1) {
+                if (intLeftOver >= 12) {
+                    ccode = intOutputCode >> (intLeftOver - 12);
+                    if (typeof (key = ht[ccode]) != "undefined") {
+                        strNormalString += key;
+                        if (used > 128) {
+                            ht[ht.length] = ht[pcode] + key.substr(0, 1);
+                        }
+                        pcode = ccode;
+                    } else {
+                        key = ht[pcode] + ht[pcode].substr(0, 1);
+                        strNormalString += key;
+                        ht[ht.length] = ht[pcode] + key.substr(0, 1);
+                        pcode = ht.length - 1;
+                    }
+
+                    used++;
+                    intLeftOver -= 12;
+                    intOutputCode &= (Math.pow(2, intLeftOver) - 1);
+                } else {
+                    break;
+                }
+            }
+        }
+        return strNormalString;
+    }
+};
+module.exports = library;

+ 9 - 0
assets/Scripts/Library.js.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "fa3cf441-b375-4b55-95ee-31201ec0bae2",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 7 - 0
assets/Scripts/Matching.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "43dc5dd6-23c1-4fc2-bb30-c2806a32652b",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 176 - 0
assets/Scripts/Matching/MutipleMatchingMode.js

@@ -0,0 +1,176 @@
+var mogobe = require("../Mgobe")
+cc.Class({
+    extends: cc.Component,
+
+    properties: {
+        
+        animationBg: {
+            default: null,
+            type:cc.Node,
+        },
+        player1: {
+            default: null,
+            type:cc.Node,
+        },
+        player2: {
+            default: null,
+            type:cc.Node,
+        },
+        player3: {
+            default: null,
+            type:cc.Node,
+        },
+        player4: {
+            default: null,
+            type:cc.Node,
+        },
+        titleTxt: {
+            default: null,
+            type:cc.Node,
+        },
+        timeTxt: {
+            default: null,
+            type:cc.Node,
+        },
+        waitTxt: {
+            default: null,
+            type:cc.Node,
+        },
+    },
+
+    // LIFE-CYCLE CALLBACKS:
+
+    onLoad() {
+        this.init();
+
+        return cc.loader.loadRes("/cacert", cc.Asset, (err, asset) =>
+        {
+            console.log("加载证书结束 " + (!err));
+
+            if (err) {
+                return;
+            }
+
+            mogobe.cacertNativeUrl = asset.nativeUrl;
+
+            mogobe.initSDK(function () {
+                mogobe.matchPlayers();
+            }.bind(this));
+        });
+        // mogobe.initSDK();
+        // mogobe.matchPlayers(1);
+        
+        // webView.init(function () {
+        //     this.initPlayer1();
+        // }.bind(this));
+
+        let interval = 1;  // 以秒为单位的时间间隔let
+        let repeat = cc.macro.REPEAT_FOREVER;  // 重复次数
+        let delay = 0;  // 开始延时
+
+        this.countTime = this.schedule(function()
+        {
+            this.timeTxt.getComponent(cc.Label).string = this.updateTime(this.matchTime);
+            this.matchTime++;
+
+            if (this.matchTime>15)
+            {
+                this.unschedule(this.countTime);
+                this.titleTxt.getComponent(cc.Label).string = "匹配成功";
+                this.timeTxt.active = false;
+                this.waitTxt.active = false;
+
+                if (this.nowPlayerNum<4){
+                    //Test//
+                    // webView.getAiInfo(function () {
+                    //     this.resetUIByData({ webView.rivalAvatarUrl,
+                    //         webView.rivalUserName,
+                    //         webView.rivalGender,});
+                    // }.bind(this));
+                }
+            }
+
+        }.bind(this), interval, repeat, delay);
+    },
+    init () {
+        this.matchTime = 0;
+        this.nowPlayerNum = 1;
+
+        this.name1 = this.player1.getChildByName('Name');
+        this.gender1 = this.player1.getChildByName('Gender');
+        this.avatarSp1 = this.player1.getChildByName('Mask').getChildByName('AvatarSp');
+    },
+    setGender(gender,bBoy)
+    {
+        this.iconBoy = gender.getChildByName('IconBoy');
+        this.iconGirl = gender.getChildByName('IconGirl');
+        if(bBoy)
+        {
+            this.iconBoy.active = true;
+            this.iconGirl.active = false;
+        }
+        else
+        {
+            this.iconBoy.active = false;
+            this.iconGirl.active = true;
+        }
+    },
+    initPlayer1() {
+        this.name1.getComponent(cc.Label).string = webView.userName;
+        this.setGender(this.gender1,webView.gender);
+        cc.loader.load(webView.avatarUrl, function (err, texture)
+        {
+            let frame = new cc.SpriteFrame(texture);
+            if (err) {
+                console.log('头像:', err);
+            }
+            this.avatarSp1.getComponent(cc.Sprite).spriteFrame = frame;
+        }.bind(this));
+    },
+    updateTime(t) {
+        let theTime = Math.floor(t);
+        let theTime1 = 0;// 分
+
+        if (theTime > 60)
+        {
+            theTime1 = parseInt(theTime / 60);
+            theTime = parseInt(theTime % 60);
+        }
+        let result = '';
+        
+        result = (theTime1 < 10 ? "0" + theTime1 : theTime1) + ":" + (theTime < 10 ? "0" + theTime : theTime);
+        return result;
+    },
+    initOtherPlayer(data)
+    {
+        if(!data) return;
+
+        this.nowPlayerNum++;
+        
+        let player = this["player"+this.nowPlayerNum];
+        let name = player.getChildByName('Name');
+        let gender = player.getChildByName('Gender');
+        let avatarSp = player.getChildByName('Mask').getChildByName('AvatarSp');
+
+        player.getChildByName("DotAnimation").active = false;
+        name.getComponent(cc.Label).string = data.userName;
+        this.setGender(gender,data.gender);
+
+        cc.loader.load(data.avatarUrl, function (err, texture)
+        {
+            let frame = new cc.SpriteFrame(texture);
+            if (err) {
+                console.log('头像:', err);
+            }
+            avatarSp.getComponent(cc.Sprite).spriteFrame = frame;
+
+            if (this.nowPlayerNum==4){
+                this.scheduleOnce(()=>
+                {
+                    cc.director.loadScene("Game");
+                }, 4)
+            }
+        
+        }.bind(this));
+    },
+});

+ 9 - 0
assets/Scripts/Matching/MutipleMatchingMode.js.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "b7751cc4-f199-400a-abfc-2c27a9fd43d8",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 260 - 0
assets/Scripts/Matching/PairingMode.js

@@ -0,0 +1,260 @@
+var webView = require("../WebView");
+var lib = require("../Library");
+var mgobe = require("../Mgobe");
+cc.Class({
+    extends: cc.Component,
+
+    properties: {
+        nextSceneName: {
+            default: '',
+        },
+        bOpenMgobeServer: {
+            default: false,
+        },
+        player1: {
+            default: null,
+            type: cc.Node,
+        },
+        player2: {
+            default: null,
+            type: cc.Node,
+        },
+        titleTxt: {
+            default: null,
+            type: cc.Node,
+        },
+        timeTxt: {
+            default: null,
+            type: cc.Node,
+        },
+        waitTxt: {
+            default: null,
+            type: cc.Node,
+        },
+        successAudio: {
+            default: null,
+            type: cc.AudioClip,
+        },
+        meteorLine: {
+            default: null,
+            type: cc.Node,
+        },
+    },
+    onLoad() {
+        this.init();
+
+        //init web sdk
+        if (lib.openInWebview())
+        {
+            // 在app内Webview打开
+            webView.init(this.node);
+        }
+
+        //register event from webView
+        this.node.on('onGameInit',this.onGameInit,this);
+        this.node.on('onAiRandomInfo',this.onAiRandomInfo,this);
+        this.node.on('onUrlToBase64',this.onUrlToBase64,this);
+
+        this.starMatching();
+
+        //count down time to match ui
+        let interval = 1;  // 以秒为单位的时间间隔let
+        let repeat = cc.macro.REPEAT_FOREVER;  // 重复次数
+        let delay = 0;  // 开始延时
+        this.schedule(this.countTime, interval, repeat, delay);
+
+        // 因为在手机端加载场景要5-8秒钟 所以提早加载
+        // because loading scene not a immediately stuff,A smart phone will cost 5-8 second for loading
+        if(this.nextSceneName!='')
+        {
+            cc.director.preloadScene(this.nextSceneName);
+        }
+    },
+    init() {
+        this.matchTime = 0;
+
+        this.name1 = this.player1.getChildByName('Name');
+        this.name2 = this.player2.getChildByName('Name');
+
+        this.gender1 = this.player1.getChildByName('Gender');
+        this.gender2 = this.player2.getChildByName('Gender');
+
+        this.avatarSp1 = this.player1.getChildByName('Mask').getChildByName('AvatarSp');
+        this.avatarSp2 = this.player2.getChildByName('Mask').getChildByName('AvatarSp');
+    },
+    countTime() {
+        //update countdown time on UI
+        this.timeTxt.getComponent(cc.Label).string = this.updateTime(this.matchTime);
+        this.matchTime++;
+
+        if (this.matchTime > 10)
+        {
+            this.unschedule(this.countTime);
+            if(this.bOpenMgobeServer)//if using Mgobe
+            {
+                // 在app内Webview打开
+                if(lib.openInWebview())
+                {
+                    mgobe.cancelPlayerMatch(function () {
+                        this.generateAI();
+                    }.bind(this));
+                }
+                else {
+                    this.generateAI();
+                }
+            }
+            else
+            {
+                this.generateAI();
+            }
+        }
+    },
+    setGender(gender, bBoy) {
+        this.iconBoy = gender.getChildByName('IconBoy');
+        this.iconGirl = gender.getChildByName('IconGirl');
+        if (!bBoy) {
+            this.iconBoy.active = true;
+            this.iconGirl.active = false;
+        } else {
+            this.iconBoy.active = false;
+            this.iconGirl.active = true;
+        }
+    },
+    initPlayer1() {
+        this.name1.getComponent(cc.Label).string = webView.userName;
+        this.setGender(this.gender1, webView.gender);
+        this.loadAvatar(webView.avatarBase64,function (frame) {
+            this.avatarSp1.getComponent(cc.Sprite).spriteFrame = frame;
+        }.bind(this));
+    },
+    loadAvatar(avatarBase64,callback)
+    {
+        lib.setImageBase64(avatarBase64,function (texture2D) {
+            let frame = new cc.SpriteFrame(texture2D);
+            callback && callback(frame);
+        });
+    },
+    starMatching() {
+        if(!this.bOpenMgobeServer) return;
+        //before matching we need to load a cert file in resource folder
+        return cc.loader.loadRes("/cacert", cc.Asset, (err, asset) => {
+            console.log("加载证书结束 " + (!err));
+            if (err)return;
+
+            mgobe.cacertNativeUrl = asset.nativeUrl;
+
+            mgobe.initSDK(function ()
+            {
+                // bind the init success event
+                mgobe.room.onRecvFromClient = this.onRecvFromClient.bind(this);
+
+                mgobe.matchPlayers(function ()
+                {
+                    //send my information to others so that they can generate rival
+                    mgobe.sendMessage(JSON.stringify({
+                        'avatarUrl': webView.avatarUrl,
+                        'userName': webView.userName,
+                        'gender': webView.gender
+                    }));
+                }.bind(this,lib));
+            }.bind(this));
+        });
+    },
+    updateTime(t) {
+        let theTime = Math.floor(t);
+        let theTime1 = 0;// 分
+
+        if (theTime > 60)
+        {
+            theTime1 = parseInt(theTime / 60);
+            theTime = parseInt(theTime % 60);
+        }
+        let result = '';
+
+        result = (theTime1 < 10 ? "0" + theTime1 : theTime1) + ":" + (theTime < 10 ? "0" + theTime : theTime);
+        return result;
+    },
+    resetRivalUIByData(userName, gender, avatarBase64) {
+        this.name2.getComponent(cc.Label).string = userName;
+        this.setGender(this.gender2, gender);
+        // loading avatar
+        if (!avatarBase64)
+        {
+            //TODO
+            //browser can start game immediately
+            cc.audioEngine.playEffect(this.successAudio, false);
+            this.scheduleOnce(() =>
+            {
+                this.matched();
+            }, 2);
+        }
+        else {
+            //for mobile device we need to download avatar whatever AI or others
+            this.loadAvatar(avatarBase64,function (frame)
+            {
+                this.avatarSp2.getComponent(cc.Sprite).spriteFrame = frame;
+                cc.audioEngine.playEffect(this.successAudio, false);
+                this.scheduleOnce(() =>
+                {
+                    this.matched();
+                }, 2);
+            }.bind(this));
+        }
+    },
+    matched() {
+        //change top UI
+        this.meteorLine.active = true;
+        this.titleTxt.getComponent(cc.Label).string = "匹配成功";
+        this.timeTxt.active = false;
+        this.waitTxt.active = false;
+        //show rival information
+        this.player2.getChildByName("DotAnimation").active = false;
+        this.player2.active = true;
+        this.name2.active = true;
+        this.gender2.active = true;
+        this.avatarSp2.active = true;
+
+        this.scheduleOnce(() => {
+            if(this.nextSceneName!='')
+            {
+                cc.director.loadScene(this.nextSceneName);
+            }
+        }, 1);
+    },
+    generateAI() {
+        if (lib.openInWebview())// 在app内Webview打开
+        {
+            // match failed so we need to get a Ai information to start game
+            webView.getAiInfo();
+        } else {
+            //TODO
+            //In browser we just use default information to generate AI
+            this.resetRivalUIByData(webView.userName, webView.gender, webView.avatarBase64);
+        }
+    },
+    onRecvFromClient(event) {
+        console.log("收到新消息" + event.data.msg);
+        this.unschedule(this.countTime);
+        let data = JSON.parse(event.data.msg);
+
+        webView.rivalavatarUrl = data.avatarUrl;
+        webView.rivalUserName=data.userName;
+        webView.rivalGender = data.gender;
+        webView.getBase64(webView.rivalavatarUrl);
+    },
+    onUrlToBase64(data)
+    {
+        webView.rivalavatarBase64 = data.base64;
+        console.log('rivalavatarBase64=',webView.rivalavatarBase64);
+        this.resetRivalUIByData(webView.rivalUserName,  webView.rivalGender, webView.rivalavatarBase64);
+    },
+    onGameInit(date) {
+        this.initPlayer1();
+    },
+    onAiRandomInfo(date) {
+        let rivalavatarBase64 = webView.rivalavatarBase64;
+        let rivalUserName = webView.rivalUserName;
+        let rivalGender = webView.rivalGender;
+        this.resetRivalUIByData(rivalUserName, rivalGender, rivalavatarBase64);
+    },
+});

+ 9 - 0
assets/Scripts/Matching/PairingMode.js.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "9066a7cb-784f-4882-84e0-24d9d5796e2f",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 256 - 0
assets/Scripts/Mgobe.js

@@ -0,0 +1,256 @@
+// var MGOBE = require("./ThirdParty/MGOBE/MGOBE");
+
+// 使用 MGOBE 接口前导入 SDK
+// import "./MGOBE/MGOBE.js";
+
+// const Listener = MGOBE.Listener;
+// const Room = MGOBE.Room;
+let mogobe = {
+    // MGOBE 游戏信息
+    gameId: "obg-ojj4ptiw",
+    secretKey: "bf030e95ebde217416f13efc5a0c73532544f783",
+    url: "ojj4ptiw.wxlagame.com",
+    cacertNativeUrl: '',
+    // 默认匹配 Code
+    matchCode: "match-i2iytgmb",
+    openId: 'openid_test' + Math.random(), //自定义的用户唯一ID
+    roomId:'',
+    /**
+     * 判断 MGOBE SDK 是否初始化完成
+     */
+    isInited() {
+        // 初始化成功后才有玩家ID
+        return !!MGOBE.Player && !!MGOBE.Player.id;
+    },
+    /**
+     * 初始化 MGOBE SDK
+     * @param gameInfo
+     * @param config
+     * @param callback
+     */
+    // initSDK(gameId, secretKey, url, cacertNativeUrl, callback) {
+    initSDK(callback,listener) {
+        // 如果已经初始化,直接回调成功
+        if (this.isInited()) {
+            return callback && callback({code: MGOBE.ErrCode.EC_OK});
+        }
+
+        const defaultGameInfo = {
+            gameId: this.gameId,
+            openId: this.openId,
+            secretKey: this.secretKey,
+        };
+
+        const defaultConfig = {
+            url: this.url,
+            isAutoRequestFrame: true,
+            cacertNativeUrl: this.cacertNativeUrl,
+        };
+
+        // MGOBE.DebuggerLog.enable = true;
+
+        // if (cc.sys.isNative) {
+        //     MGOBE.DebuggerLog.enable = false;
+        // }
+        //是否开启调试
+        MGOBE.DebuggerLog.enable = false;
+        // 初始化
+        let _self = this;
+        MGOBE.Listener.init(defaultGameInfo, defaultConfig, event => {
+            if (event.code === MGOBE.ErrCode.EC_OK) {
+                console.log("初始化 SDK 成功");
+                _self.room = new MGOBE.Room();
+
+                MGOBE.Listener.add(_self.room);
+                // 设置默认广播
+                _self.room.onJoinRoom = _self.onJoinRoom.bind(_self);
+                _self.room.onLeaveRoom = _self.onLeaveRoom.bind(_self);
+                _self.room.onRecvFromClient = _self.onRecvFromClient.bind(_self);
+                _self.room.onRecvFrame = _self.onRecvFrame.bind(_self);
+                _self.room.onStartFrameSync = _self.onStartFrameSync.bind(_self);
+                _self.room.onStopFrameSync = _self.onStopFrameSync.bind(_self);
+                _self.room.onRecvFromGameSvr = _self.onRecvFromGameSvr.bind(_self);
+            } else {
+                console.log(`初始化 SDK 失败,错误码:${event.code}`);
+            }
+            callback && callback(event.code);
+        });
+    },
+    // SDK 发送房间消息
+    sendMessage(msg) {
+        console.log(`正在发送房间消息`);
+
+        const sendToClientPara = {
+            recvPlayerList: [],
+            recvType: MGOBE.types.RecvType.ROOM_OTHERS,
+            msg,
+        };
+
+        this.room.sendToClient(sendToClientPara, event => {
+            if (event.code === MGOBE.ErrCode.EC_OK) {
+                console.log(`发送房间消息成功`);
+            } else {
+                console.log(`发送房间消息失败,错误码:${event.code}`);
+            }
+        });
+    },
+    // SDK 发送实时服务器消息
+    sendToGameSvr(cmd) {
+        console.log(`正在发送房间消息`);
+
+        const sendToGameSvrPara = {
+            data: {
+                cmd,
+            },
+        };
+
+        this.room.sendToGameSvr(sendToGameSvrPara, event => {
+            if (event.code === MGOBE.ErrCode.EC_OK) {
+                console.log(`发送实时服务器消息成功`);
+            } else {
+                console.log(`发送实时服务器消息失败,错误码:${event.code}`);
+            }
+        });
+    },
+    // SDK 发送帧消息
+    sendFrame(cmd) {
+        console.log(`正在发送帧消息`);
+
+        const sendFramePara = {
+            data: {
+                cmd,
+            },
+        };
+
+        this.room.sendFrame(sendFramePara, event => {
+            if (event.code === MGOBE.ErrCode.EC_OK) {
+                console.log(`发送帧消息成功`);
+            } else {
+                console.log(`发送帧消息失败,错误码:${event.code}`);
+            }
+        });
+    },
+    // SDK 开始帧同步
+    startFrameSync(callback) {
+        console.log(`正在开始帧同步`);
+
+        this.room.startFrameSync({}, event => {
+            if (event.code === MGOBE.ErrCode.EC_OK) {
+                console.log(`开始帧同步成功`);
+                callback && callback();
+            } else {
+                console.log(`开始帧同步失败,错误码:${event.code}`);
+            }
+        });
+    },
+    // SDK 停止帧同步
+    stopFrameSync(success) {
+
+        console.log(`正在停止帧同步`);
+
+        this.room.stopFrameSync({}, event => {
+            if (event.code === MGOBE.ErrCode.EC_OK) {
+                console.log(`停止帧同步成功`);
+                success && success();
+            } else {
+                console.log(`停止帧同步失败,错误码:${event.code}`);
+            }
+        });
+    },
+    onJoinRoom: function (event) {
+        console.log("新玩家加入" + event.data.joinPlayerId);
+    },
+    onLeaveRoom: function (event) {
+        console.log("玩家退出" + event.data.leavePlayerId);
+    },
+    onRecvFromClient: function (event) {
+        // console.log("新消息" + event.data.msg);
+    },
+    onRecvFrame: function (event) {
+        this.sendFrame();
+        console.log("帧广播", event.data.frame);
+        if (event.data.frame.items && event.data.frame.items.length > 0) {
+            //console.log("帧广播" + JSON.stringify(event.data.frame.items));
+            console.log("帧广播", event.data.frame);
+        }
+    },
+    onStartFrameSync: function (event) {
+        this.synced = true;
+        console.log("开始帧同步\n");
+    },
+    onStopFrameSync: function (event) {
+        this.synced = false;
+        console.log("停止帧同步\n");
+    },
+    onRecvFromGameSvr: function (event) {
+        console.log("新自定义服务消息", event);
+        //console.log("新自定义服务消息" + JSON.stringify(event));
+    },
+    // SDK 随机匹配
+    matchPlayers(callback) {
+        let matchCode = this.matchCode;
+
+        if (!matchCode) {
+            return console.log(`请输入正确的匹配 Code`);
+        }
+
+        this.lockSubmit = true;
+        this.timerStartMatching = setInterval(() => console.log(`正在随机匹配,请稍等。`), 1000);
+        console.log(`正在随机匹配,匹配Code:${matchCode}。请稍等,默认超时时间为 10 秒。`);
+
+        // 注意:这里没有使用匹配属性,如果匹配规则中有设置匹配属性,这里需要做调整
+        const matchAttributes = [];
+
+        const playerInfo = {
+            name: "测试玩家",
+            customPlayerStatus: 0,
+            customProfile: "",
+            matchAttributes,
+        };
+
+        const matchPlayersPara = {
+            matchCode,
+            playerInfo,
+        };
+
+        this.room.initRoom();
+        this.room.matchPlayers(matchPlayersPara, event =>
+        {
+            this.lockSubmit = false;
+            clearInterval(this.timerStartMatching);
+
+            if (event.code === MGOBE.ErrCode.EC_OK)
+            {
+                console.log(`随机匹配成功,房间ID:${event.data.roomInfo.id}`);
+                this.roomId = event.data.roomInfo.id;
+                callback && callback();
+            } else {
+                console.log(`随机匹配失败,错误码:${event.code}`);
+            }
+        });
+    },
+    //取消随机匹配
+    cancelPlayerMatch(callback)
+    {
+        this.timerEndMatching = setInterval(() => console.log(`正在取消匹配,请稍等。`), 1000);
+
+        const cancelMatchPara = {
+            matchType: MGOBE.ENUM.MatchType.PLAYER_COMPLEX,
+        };
+
+        this.room.cancelPlayerMatch(cancelMatchPara,event =>
+        {
+            clearInterval(this.timerStartMatching);
+            clearInterval(this.timerEndMatching);
+
+            if (event.code === MGOBE.ErrCode.EC_OK)
+            {
+                console.log('取消匹配成功');
+                callback && callback();
+            } else {
+                console.log(`取消匹配失败,错误码:${event.code}`);
+            }
+        });
+    }
+};
+module.exports = mogobe;

+ 9 - 0
assets/Scripts/Mgobe.js.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "435215cc-d6a1-4f5b-9402-1eaee0e231b6",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 7 - 0
assets/Scripts/ThirdParty.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "7d465b5c-1a7e-4db2-ae20-759d7288baa0",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 7 - 0
assets/Scripts/ThirdParty/MGOBE.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "db379983-eb7b-4352-b46f-3c9312d2febe",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 1439 - 0
assets/Scripts/ThirdParty/MGOBE/MGOBE.d.ts

@@ -0,0 +1,1439 @@
+declare namespace MGOBE {
+    /********************************* 玩家信息 ************************************/
+    /**
+     * @name 玩家信息
+     * @description 该对象记录了玩家的基本信息,默认全部为空。成功初始化Listener之后,id、openId 属性将生效。
+     * @description 玩家进入房间后,该对象的属性与 roomInfo.playerList 中当前玩家信息保持一致。
+     * @description 玩家 ID 是 MGOBE 后台生成的 ID,openId 是开发者初始化时候使用的 ID。openId 只有初始化 Listener 的时候使用,其它接口的“玩家 ID”均指后台生成的 ID。
+     * @field {string}  id  玩家ID
+     * @field {string}  openId  玩家openId
+     * @field {string}  name  玩家昵称
+     * @field {string}  teamId  队伍ID
+     * @field {number}  customPlayerStatus  自定义玩家状态
+     * @field {string}  customProfile  自定义玩家属性
+     * @field {MGOBE.types.NetworkState}  commonNetworkState  房间网络状态
+     * @field {MGOBE.types.NetworkState}  relayNetworkState  帧同步网络状态
+     */
+    export const Player: {
+        readonly id: string;
+        readonly openId: string;
+        readonly name: string;
+        readonly teamId: string;
+        readonly customPlayerStatus: number;
+        readonly customProfile: string;
+        readonly commonNetworkState: MGOBE.types.NetworkState;
+        readonly relayNetworkState: MGOBE.types.NetworkState;
+    };
+
+    /********************************* SDK 枚举 *********************************/
+    /**
+     * @name 操作类型枚举
+     * @enum {MGOBE.types.CreateRoomType}  CreateRoomType  创建房间方式
+     * @enum {MGOBE.types.MatchType}  MatchType  匹配类型
+     * @enum {MGOBE.types.NetworkState}  NetworkState  网络状态
+     * @enum {MGOBE.types.FrameSyncState}  FrameSyncState  房间帧同步状态
+     * @enum {MGOBE.types.RecvType}  RecvType  消息接收者范围
+     */
+    export const ENUM: {
+        readonly CreateRoomType: typeof MGOBE.types.CreateRoomType;
+        readonly MatchType: typeof MGOBE.types.MatchType;
+        readonly NetworkState: typeof MGOBE.types.NetworkState;
+        readonly FrameSyncState: typeof MGOBE.types.FrameSyncState;
+        readonly RecvType: typeof MGOBE.types.RecvType;
+    };
+
+    /********************************* SDK 随机数工具 *********************************/
+    export const RandomUtil: {
+        /**
+         * @name 初始化随机数
+         * @description init 方法接受一个 seed 为参数,RandomUtil 在后续生成随机数的过程中将以 seed 为种子。使用相同的 seed 初始化,调用 random 方法生成的随机数序列相同。
+         * @param {number} seed 随机数种子
+         * @returns {void}
+         */
+        init(seed: number): void;
+        /**
+         * @name 生成随机数
+         * @description 如果种子相同、初始化后调用次数相同,生成的随机数将相同。
+         * @returns {number} 随机数
+         */
+        random(): number;
+    };
+
+    /********************************* SDK 日志打印 ************************************/
+    export class DebuggerLog {
+        static enable: boolean;
+        static callback: (...logs: any[]) => any;
+    }
+
+    export const StatCallbacks: {
+        onPingTime(time: number): any;
+        onFitFrameTime(deltaTime: number): any;
+        onBstFrameRate(deltaTime: number): any;
+        onRenderFrameRate(deltaTime: number): any;
+    };
+
+    /********************************* Room 广播回调 *********************************/
+    class RoomBroadcastHandler {
+        /**
+         * @name 匹配结束广播
+         * @description onMatch 广播表示组队匹配结束。匹配成功或者匹配超时后,全部小组成员都会收到该广播。
+         * @description 使用 event.data.errCode 判断是否匹配成功。
+         * @description 注意该方法为 Room 类的静态方法。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.MatchBst>} event 回调参数
+         * @returns {void}
+         */
+        static onMatch: (event: MGOBE.types.BroadcastEvent<MGOBE.types.MatchBst>) => any;
+        /**
+         * @name 组队匹配超时广播
+         * @description onCancelMatch 广播表示取消组队匹配。全部小组成员都会收到该广播。
+         * @description 注意该方法为 Room 类的静态方法。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.CancelMatchBst>} event 回调参数
+         * @returns {void}
+         */
+        static onCancelMatch: (event: MGOBE.types.BroadcastEvent<MGOBE.types.CancelMatchBst>) => any;
+        /**
+         * @name 新玩家加入房间广播回调接口
+         * @description onJoinRoom 广播表示该房间有新玩家加入。房间内全部成员都会收到该广播。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.JoinRoomBst>} event 回调参数
+         * @returns {void}
+         */
+        onJoinRoom: (event: MGOBE.types.BroadcastEvent<MGOBE.types.JoinRoomBst>) => any;
+        /**
+         * @name 玩家退出房间广播回调接口
+         * @description onLeaveRoom 广播表示该房间有玩家退出。房间内全部成员都会收到该广播。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.LeaveRoomBst>} event 回调参数
+         * @returns {void}
+         */
+        onLeaveRoom: (event: MGOBE.types.BroadcastEvent<MGOBE.types.LeaveRoomBst>) => any;
+        /**
+         * @name 房间被解散广播回调接口
+         * @description onDismissRoom 广播表示房主解散了该房间。房间内全部成员都会收到该广播。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.DismissRoomBst>} event 回调参数
+         * @returns {void}
+         */
+        onDismissRoom: (event: MGOBE.types.BroadcastEvent<MGOBE.types.DismissRoomBst>) => any;
+        /**
+         * @name 房主修改房间信息广播回调接口
+         * @description onChangeRoom 广播表示房主修改了该房间属性。房间内全部成员都会收到该广播。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.ChangeRoomBst>} event 回调参数
+         * @returns {void}
+         */
+        onChangeRoom: (event: MGOBE.types.BroadcastEvent<MGOBE.types.ChangeRoomBst>) => any;
+        /**
+         * @name 房间内玩家被移除广播回调接口
+         * @description onRemovePlayer 广播表示有玩家被房主移除。房间内全部成员都会收到该广播。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.RemovePlayerBst>} event 回调参数
+         * @returns {void}
+         */
+        onRemovePlayer: (event: MGOBE.types.BroadcastEvent<MGOBE.types.RemovePlayerBst>) => any;
+        /**
+         * @name 收到房间内其他玩家消息广播回调接口
+         * @description onRecvFromClient 广播表示收到来自 ID 为 sendPlayerId 的玩家消息。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.RecvFromClientBst>} event 回调参数
+         * @returns {void}
+         */
+        onRecvFromClient: (event: MGOBE.types.BroadcastEvent<MGOBE.types.RecvFromClientBst>) => any;
+        /**
+         * @name 收到自定义服务消息广播回调接口
+         * @description onRecvFromGameSvr 广播表示收到来自自定义服务的消息。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.RecvFromGameSvrBst>} event 回调参数
+         * @returns {void}
+         */
+        onRecvFromGameSvr: (event: MGOBE.types.BroadcastEvent<MGOBE.types.RecvFromGameSvrBst>) => any;
+        /**
+         * @name 房间内玩家网络状态变化广播回调接口
+         * @description onChangePlayerNetworkState 广播表示 ID 为 changePlayerId 的玩家网络状态发生变化。
+         * @description 玩家在房间中、帧同步中的网络变化都会触发该广播,因此 networkState 将有四中情况,分别表示房间中上下线、帧同步中上下线。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.ChangePlayerNetworkStateBst>} event 回调参数
+         * @returns {void}
+         */
+        onChangePlayerNetworkState: (event: MGOBE.types.BroadcastEvent<MGOBE.types.ChangePlayerNetworkStateBst>) => any;
+        /**
+         * @name 玩家自定义状态变化广播回调接口
+         * @description onChangeCustomPlayerStatus 广播表示房间内 ID 为 changePlayerId 的玩家状态发生变化。玩家状态由开发者自定义。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.ChangeCustomPlayerStatusBst>} event 回调参数
+         * @returns {void}
+         */
+        onChangeCustomPlayerStatus: (event: MGOBE.types.BroadcastEvent<MGOBE.types.ChangeCustomPlayerStatusBst>) => any;
+        /**
+         * @name 开始帧同步广播回调接口
+         * @description onStartFrameSync 广播表示房间开始帧同步。收到该广播后将持续收到 onRecvFrame 广播。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.StartFrameSyncBst>} event 回调参数
+         * @returns {void}
+         */
+        onStartFrameSync: (event: MGOBE.types.BroadcastEvent<MGOBE.types.StartFrameSyncBst>) => any;
+        /**
+         * @name 停止帧同步广播回调接口
+         * @description onStopFrameSync 广播表示房间停止帧同步。收到该广播后将不再收到 onRecvFrame 广播。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.StopFrameSyncBst>} event 回调参数
+         * @returns {void}
+         */
+        onStopFrameSync: (event: MGOBE.types.BroadcastEvent<MGOBE.types.StopFrameSyncBst>) => any;
+        /**
+         * @name 房间帧消息广播回调接口
+         * @description onRecvFrame 广播表示收到一个帧 frame,frame 的内容由多个 MGOBE.types.FrameItem 组成,即一帧时间内房间内所有玩家向服务器发送帧消息的集合。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.RecvFrameBst>} event 回调参数
+         * @returns {void}
+         */
+        onRecvFrame: (event: MGOBE.types.BroadcastEvent<MGOBE.types.RecvFrameBst>) => any;
+        /**
+         * @name 自动补帧失败回调接口
+         * @description onAutoRequestFrameError 表示自动补帧失败,在初始化 Listener 时开启自动补帧后才能触发。
+         * @description 发生补帧失败后,将不能收到帧广播,开发者可以使用 retryAutoRequestFrame 方法重试自动补帧。
+         * @param {MGOBE.types.BroadcastEvent<MGOBE.types.ResponseEvent<MGOBE.types.RequestFrameRsp>>} event 回调参数
+         * @returns {void}
+         */
+        onAutoRequestFrameError: (event: MGOBE.types.BroadcastEvent<MGOBE.types.ResponseEvent<MGOBE.types.RequestFrameRsp>>) => any;
+    }
+    /********************************* SDK Room对象 *********************************/
+    export class Room extends RoomBroadcastHandler {
+
+        /**
+         * @name 构造器
+         * @description 实例化 Room 对象时可以传入一个 MGOBE.types.RoomInfo 对象 roomInfo,后续接口调用都将基于该 roomInfo,例如修改该房间的属性、接收该房间的广播。
+         * @description 如果不传 roomInfo 参数,开发者可以通过直接调用 initRoom、createRoom、joinRoom 等方法获取 roomInfo。
+         * @description Room 对象会自动维护内部的 roomInfo 属性保持最新,开发者可以直接通过访问该属性获得最新的房间信息。
+         * @param {MGOBE.types.RoomInfo} roomInfo 房间信息(可选)
+         * @returns {void}
+         */
+        constructor(roomInfo?: MGOBE.types.RoomInfo);
+        /**
+         * @name 房间信息
+         * @description roomInfo 为 Room 实例的属性,类型为 MGOBE.types.RoomInfo,调用 Room 相关的接口会导致该属性发生变化。
+         */
+        roomInfo: MGOBE.types.RoomInfo;
+        /**
+         * @name 获取房间列表
+         * @description 调用结果将在 callback 中异步返回。
+         * @description 该接口为 Room 的静态方法,只能通过 Room.getRoomList 方式调用,Room 实例无法直接访问该方法。
+         * @param {MGOBE.types.GetRoomListPara} getRoomListPara  获取房间列表参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.GetRoomListRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        static getRoomList(getRoomListPara: MGOBE.types.GetRoomListPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.GetRoomListRsp>): void;
+        /**
+         * @name 根据房间 ID 获取房间
+         * @description 调用结果将在 callback 中异步返回。
+         * @description 该接口为 Room 的静态方法,只能通过 Room.getRoomByRoomId 方式调用,Room 实例无法直接访问该方法。
+         * @description 如果参数中的 roomId 为空字符串,将查询玩家所在的房间。
+         * @param {MGOBE.types.GetRoomByRoomIdPara} getRoomByRoomIdPara  获取房间参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.GetRoomByRoomIdRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        static getRoomByRoomId(getRoomByRoomIdPara: MGOBE.types.GetRoomByRoomIdPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.GetRoomByRoomIdRsp>): void;
+        /**
+         * @name 查询玩家所在的房间信息
+         * @description 调用结果将在 callback 中异步返回。
+         * @description 该接口为 Room 的静态方法,只能通过 Room.getMyRoom 方式调用,Room 实例无法直接访问该方法。
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.GetRoomByRoomIdRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        static getMyRoom(callback?: MGOBE.types.ReqCallback<MGOBE.types.GetRoomByRoomIdRsp>): void;
+        /**
+         * @name 初始化 Room 实例的房间信息,即更新 roomInfo 属性
+         * @description initRoom 会更新 Room 实例的 roomInfo,接受 MGOBE.types.RoomInfo 或 { id: string; } 类型的参数。
+         * @description 如果参数为 MGOBE.types.RoomInfo 类型,SDK将自动更新 WebSocket 连接。如果参数为 { id: string; } 类型,需要调用 getRoomDetail 或 joinRoom 方法才能更新 WebSocket 连接,否则可能不能及时收到房间广播。
+         * @description 如果不传参数,该方法将清空 Room 实例的 roomInfo 属性,此时调用 getRoomDetail 方法将查询玩家所在的房间。
+         * @description 当玩家需要加入指定 id 房间时,需要使用该接口初始化 Room 实例的 roomInfo 属性,然后才能通过调用 joinRoom 方法加入该 Room 实例所代表的房间。
+         * @param {MGOBE.types.RoomInfo 或 { id: string }} roomInfo  初始化参数,id表示房间id
+         * @returns {void}
+         */
+        initRoom(roomInfo?: MGOBE.types.RoomInfo | {
+            id: string;
+        }): void;
+        /**
+         * @name 房间信息更新回调接口
+         * @description onUpdate 表明 Room 实例的 roomInfo 信息发生变化,这种变化原因包括各种房间操作、房间广播、本地网络状态变化等。
+         * @description 开发者可以在该接口中更新游戏画面,或者使用 networkState 属性判断网络状态。
+         * @param {Room} room 更新的Room实例(可选)
+         * @returns {void}
+         */
+        onUpdate(room?: Room): void;
+        /**
+         * @name 该属性为只读属性,用于获取客户端本地 SDK 网络状态
+         * @description 该属性类型为 ```{ COMMON: boolean, RELAY: boolean }``` 。COMMON 表示房间网络状态;RELAY 表示帧同步网络状态。为 true 时表示网络已连接,为 false 时表示网络未连接。
+         * @description 该网络状态与玩家信息中的网络状态(Player.commonNetworkState/Player.relayNetworkState)概念不同,前者表示本地 socket 状态,后者表示玩家在 MGOBE 后台中的状态。
+         * @description 本地 socket 网络状态变化时,onUpdate 将被触发。
+         */
+        readonly networkState: {
+            COMMON: boolean;
+            RELAY: boolean;
+        };
+        /**
+         * @name 创建房间
+         * @description createRoom 调用结果将在 callback 中异步返回。操作成功后,roomInfo 属性将更新。
+         * @description 创建房间成功后,玩家自动进入该房间,因此无法继续调用 joinRoom、matchPlayers 等方法,可以利用房间ID邀请其他玩家进入该房间。
+         * @param {MGOBE.types.CreateRoomPara} createRoomPara  创建房间参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.CreateRoomRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        createRoom(createRoomPara: MGOBE.types.CreateRoomPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.CreateRoomRsp>): void;
+        /**
+         * @name 创建团队房间
+         * @description createTeamRoom 调用结果将在 callback 中异步返回。操作成功后,roomInfo 属性将更新。
+         * @description 创建房间成功后,玩家自动进入该房间,因此无法继续调用 joinRoom、matchPlayers 等方法。
+         * @description 参数中的“房间最大玩家数量”要求能被“队伍数量”整除,创建成功后每个队伍的“队伍最小人数”为1,“队伍最大人数”为整除结果。
+         * @param {MGOBE.types.CreateTeamRoomPara} createTeamRoomPara  创建团队房间参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.CreateRoomRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        createTeamRoom(createTeamRoomPara: MGOBE.types.CreateTeamRoomPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.CreateRoomRsp>): void;
+        /**
+         * @name 加入房间
+         * @description joinRoom 调用结果将在 callback 中异步返回。
+         * @description 该接口加入的房间是 Room 实例所代表的房间,如果该 Room 实例的 roomInfo 不存在 roomId,则需要使用 roomId 通过 init 方法初始化 Room 实例。
+         * @description 加房成功后,房间内全部成员都会收到一条玩家加入房间广播 onJoinRoom,roomInfo 属性将更新。
+         * @param {MGOBE.types.JoinRoomPara} joinRoomPara  加入房间参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.JoinRoomRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        joinRoom(joinRoomPara: MGOBE.types.JoinRoomPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.JoinRoomRsp>): void;
+        /**
+         * @name 加入团队房间
+         * @description joinTeamRoom 调用结果将在 callback 中异步返回。
+         * @description 与 joinRoom 类似,该接口加入的房间是 Room 实例所代表的房间。teamId 为 roomInfo.teamList 中定义的队伍 ID。
+         * @param {MGOBE.types.JoinTeamRoomPara} joinTeamRoomPara  加入团队房间参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.JoinRoomRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        joinTeamRoom(joinTeamRoomPara: MGOBE.types.JoinTeamRoomPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.JoinRoomRsp>): void;
+        /**
+         * @name 退出房间
+         * @description leaveRoom 调用结果将在 callback 中异步返回。退出成功后,房间内剩余成员都会收到一条玩家退出房间广播 onLeaveRoom,roomInfo 属性将更新,roomInfo.playerList 中将没有该玩家信息。
+         * @description 退房后,如果房间内还剩下其他玩家,则该 room 实例仍然代表退房前的房间,可以继续调用 room.initRoom() 清除房间信息。
+         * @param {object} para  预留参数,传{}即可
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.LeaveRoomRsp>} callback 响应回调函数
+         * @returns {void}
+         */
+        leaveRoom(para: {}, callback?: MGOBE.types.ReqCallback<MGOBE.types.LeaveRoomRsp>): void;
+        /**
+         * @name 解散房间
+         * @description dismissRoom 调用结果将在 callback 中异步返回。解散成功后,房间内全部成员都会收到一条解散房间广播 onDismissRoom,roomInfo 属性将更新。
+         * @description 只有房主有权限解散房间
+         * @param {object} para  预留参数,传{}即可
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.DismissRoomRsp>} callback 响应回调函数
+         * @returns {void}
+         */
+        dismissRoom(para: {}, callback?: MGOBE.types.ReqCallback<MGOBE.types.DismissRoomRsp>): void;
+        /**
+         * @name 修改房间信息
+         * @description changeRoom 调用结果将在 callback 中异步返回。修改成功后,房间内全部成员都会收到一条修改房间广播 onChangeRoom,roomInfo 属性将更新。
+         * @description 只有房主有权限修改房间
+         * @param {MGOBE.types.ChangeRoomPara} changeRoomPara  修改房间参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.ChangeRoomRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        changeRoom(changeRoomPara: MGOBE.types.ChangeRoomPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.ChangeRoomRsp>): void;
+        /**
+         * @name 修改玩家自定义状态
+         * @description 修改玩家状态是修改 PlayerInfo 中的 customPlayerStatus 字段,玩家的状态由开发者自定义。
+         * @description 修改成功后,房间内全部成员都会收到一条修改玩家状态广播 onChangeCustomPlayerStatus,roomInfo 属性将更新。
+         * @description 每个玩家只能修改自己的状态,调用结果将在 callback 中异步返回。
+         * @param {MGOBE.types.ChangeCustomPlayerStatusPara} changeCustomPlayerStatusPara  修改玩家状态参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.ChangeCustomPlayerStatusRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        changeCustomPlayerStatus(changeCustomPlayerStatusPara: MGOBE.types.ChangeCustomPlayerStatusPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.ChangeCustomPlayerStatusRsp>): void;
+        /**
+         * @name 移除房间内玩家
+         * @description 调用结果将在 callback 中异步返回。移除玩家成功后,房间内全部成员都会收到一条移除玩家广播 onRemovePlayer,roomInfo 属性将更新。
+         * @description 只有房主有权限移除其他玩家
+         * @param {MGOBE.types.RemovePlayerPara} removePlayerPara 移除房间内玩家参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.RemovePlayerRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        removePlayer(removePlayerPara: MGOBE.types.RemovePlayerPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.RemovePlayerRsp>): void;
+        /**
+         * @name 获取Room实例的房间信息
+         * @description 该接口获取的是 Room 实例的房间信息,调用结果将在 callback 中异步返回。
+         * @description 如果该 Room 实例中的 roomInfo 属性没有 ID,该接口将查询玩家所在的房间。
+         * @description 如果 roomInfo 属性含有 ID,则查询该 ID 对应的房间信息。
+         * @description 操作成功后,roomInfo 属性将更新。
+         * @description 如果需要获取指定 ID 的房间信息,可以使用 getRoomByRoomId 方法。
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.GetRoomByRoomIdRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        getRoomDetail(callback?: MGOBE.types.ReqCallback<MGOBE.types.GetRoomByRoomIdRsp>): void;
+        /**
+         * @name 多人在线匹配
+         * @description 调用该接口后将发起多人在线匹配,callback 将异步返回调用结果。返回码为0表示调用成功。
+         * @description 调用成功后,Room.onMatch、Room.onCancelMatch 将回调匹配结果。
+         * @description 该接口需要与匹配规则配合使用,因此,匹配超时时间由开发者在匹配规则中定义。开发者需要在控制台上创建匹配,得到匹配 Code 作为该方法的参数 matchCode。
+         * @description matchPlayersPara.playerInfo 中的 matchAttributes 数组对应匹配规则中定义的 playerAttributes,playerAttributes 的每一种属性都要填入 matchAttributes 中,name 表示属性名,value 表示玩家该属性的值。
+         * @param {MGOBE.types.MatchPlayersPara} matchPlayersPara  多人匹配参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.MatchPlayersRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        matchPlayers(matchPlayersPara: MGOBE.types.MatchPlayersPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.MatchPlayersRsp>): void;
+        /**
+         * @name 组队匹配
+         * @description 调用该接口后将以 playerInfoList 为小组一起进行匹配,callback 将异步返回调用结果。
+         * @description 调用成功后,Room.onMatch、Room.onCancelMatch 将回调匹配结果。小组成员都可以通过 cancelPlayerMatch 取消匹配。
+         * @description 匹配成功后,小组成员都会进入同一个房间,同一个队伍。
+         * @description 该接口需要与匹配规则配合使用,匹配超时时间由开发者在匹配规则中定义。开发者需要在控制台上创建匹配,得到匹配 Code 作为该方法的参数 matchCode。
+         * @description 根据匹配规则的不同,房间内的队伍可能包含多个小组。比如4V4的匹配(两个队伍),如果小组成员数为2,那么同一个队伍将由两个小组组成。
+         * @param {MGOBE.types.MatchGroupPara} matchGroupPara  多人匹配参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.MatchGroupRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        matchGroup(matchGroupPara: MGOBE.types.MatchGroupPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.MatchGroupRsp>): void;
+        /**
+         * @name 房间匹配
+         * @description 调用该接口后将发起房间匹配,匹配结果将在 callback 中异步返回。操作成功后,Room 对象内部 roomInfo 属性将更新。
+         * @description 房间匹配是指按照传入的参数搜索现存的房间,如果存在,则将玩家加入该房间;如果不存在,则为玩家创建并加入一个新房间。
+         * @param {MGOBE.types.MatchRoomPara} matchRoomPara  房间匹配参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.MatchRoomSimpleRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        matchRoom(matchRoomPara: MGOBE.types.MatchRoomPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.MatchRoomSimpleRsp>): void;
+        /**
+         * @name 取消玩家匹配
+         * @description 该接口作用是取消匹配请求,即 matchPlayers、matchGroup 请求。调用结果将在 callback 中异步返回。如果玩家已经在房间中,回调函数将返回 roomInfo。
+         * @description cancelMatchPara.matchType 需要设置为 MGOBE.ENUM.MatchType.PLAYER_COMPLEX。
+         * @param {MGOBE.types.CancelMatchPara} cancelMatchPara  取消匹配参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.CancelMatchRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        cancelPlayerMatch(cancelMatchPara: MGOBE.types.CancelPlayerMatchPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.CancelPlayerMatchRsp>): void;
+        /**
+         * @name 开始帧同步
+         * @description 调用结果将在 callback 中异步返回。调用成功后房间内全部成员将收到 onStartFrameSync 广播。该接口会修改房间帧同步状态为“已开始帧同步”。
+         * @description 房间内任意一个玩家成功调用该接口将导致全部玩家开始接收帧广播。
+         * @param {object} para  预留参数,传{}即可
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.StartFrameSyncRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        startFrameSync(para: {}, callback?: MGOBE.types.ReqCallback<MGOBE.types.StartFrameSyncRsp>): void;
+        /**
+         * @name 停止帧同步
+         * @description 调用结果将在 callback 中异步返回。调用成功后房间内全部成员将收到 onStopFrameSync 广播。该接口会修改房间帧同步状态为“已停止帧同步”。
+         * @description 房间内任意一个玩家成功调用该接口将导致全部玩家停止接收帧广播。
+         * @param {object} para  预留参数,传{}即可
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.StoptFrameSyncRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        stopFrameSync(para: {}, callback?: MGOBE.types.ReqCallback<MGOBE.types.StopFrameSyncRsp>): void;
+        /**
+         * @name 发送帧同步数据
+         * @description 帧数据内容 data 类型为普通 object,由开发者自定义,目前支持最大长度不超过1k。
+         * @description 后台将集合全部玩家的帧数据,并以一定时间间隔(由房间帧率定义)通过 onRecvFrame 广播给各客户端。调用结果将在 callback 中异步返回。
+         * @description 只有房间处于“已开始帧同步”状态才能调用该接口。
+         * @param {MGOBE.types.SendFramePara} sendFramePara  发送帧同步数据参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.SendFrameRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        sendFrame(sendFramePara: MGOBE.types.SendFramePara, callback?: MGOBE.types.ReqCallback<MGOBE.types.SendFrameRsp>): void;
+        /**
+         * @name 请求补帧
+         * @description 调用结果将在 callback 中异步返回。
+         * @param {MGOBE.types.RequestFramePara} requestFramePara  请求补帧参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.RequestFrameRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        requestFrame(requestFramePara: MGOBE.types.RequestFramePara, callback?: MGOBE.types.ReqCallback<MGOBE.types.RequestFrameRsp>): void;
+        /**
+         * @name 重试自动补帧
+         * @description 当收到 onAutoRequestFrameError 回调时,表示自动补帧失败,可以使用该方法重新触发自动补帧。
+         * @returns {void}
+         */
+        retryAutoRequestFrame(): void;
+        /**
+         * @name 发送消息给房间内玩家
+         * @description 调用结果将在 callback 中异步返回。调用成功后所指定的接收消息的玩家将收到 onRecvFromClient 广播。
+         * @description 当 recvType 值为 1 (即 ROOM_ALL ) 时,房间内全部玩家将收到消息;
+         * @description 当 recvType 值为 2 (即 ROOM_OTHERS ) 时,房间内除消息发送者外的其他玩家将收到消息;
+         * @description 当 recvType 值为 3 (即 ROOM_SOME ) 时,接收消息玩家才由 recvPlayerList 决定。
+         * @param {MGOBE.types.SendToClientPara} sendToClientPara  发送消息参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.SendToClientRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        sendToClient(sendToClientPara: MGOBE.types.SendToClientPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.SendToClientRsp>): void;
+        /**
+         * @name 发送消息给实时服务器
+         * @description 该接口只能在玩家进入房间后调用,调用结果将在 callback 中异步返回。
+         * @param {MGOBE.types.SendToGameSvrPara} sendToGameSvrPara  发送消息参数
+         * @param {MGOBE.types.ReqCallback<MGOBE.types.SendToGameSvrRsp>} callback  响应回调函数
+         * @returns {void}
+         */
+        sendToGameSvr(sendToGameSvrPara: MGOBE.types.SendToGameSvrPara, callback?: MGOBE.types.ReqCallback<MGOBE.types.SendToGameSvrRsp>): void;
+    }
+    /********************************* SDK Listener对象 *********************************/
+    export class Listener {
+
+        /**
+         * @name 初始化监听器
+         * @description 该方法为静态方法。初始化 Listener 时需要传入 gameInfo 和 config 两个参数。
+         * @description 初始化结果在 callback 中异步返回,错误码为 0 表示初始化成功。
+         * @param {MGOBE.types.GameInfoPara} gameInfo  游戏信息
+         * @param {MGOBE.types.ConfigPara} config  游戏配置
+         * @param {MGOBE.types.ReqCallback<null>} callback  初始化回调函数
+         * @returns {void}
+         */
+        static init(gameInfo: MGOBE.types.GameInfoPara, config: MGOBE.types.ConfigPara, callback: MGOBE.types.ReqCallback<MGOBE.types.InitRsp>): void;
+        /**
+         * @name 为Room实例添加广播监听
+         * @description 该方法为静态方法。实例化 Room 对象之后,需要通过该方法给 Room 注册广播事件监听。
+         * @description Listener 完成初始化之后才能添加监听。
+         * @param {Room} room  需要监听的房间对象
+         * @returns {void}
+         */
+        static add(room: Room): void;
+        /**
+         * @name 为Room实例移除广播监听
+         * @description 该方法为静态方法。如果不再需要监听某个 Room 对象的广播事件,可以通过该方法进行移除。
+         * @param {Room} room  需要移除监听的房间对象
+         * @returns {void}
+         */
+        static remove(room: Room): void;
+        /**
+         * @name 移除全部Room对象的广播监听
+         * @description 该方法为静态方法。
+         * @returns {void}
+         */
+        static clear(): void;
+    }
+
+    /********************************* SDK 错误码 *********************************/
+    export enum ErrCode {
+        EC_OK = 0,
+        EC_REQ_BAD_PKG = 1,
+        EC_CMD_INVALID = 2,
+        EC_PARAMS_INVALID = 3,
+        EC_INNER_ERROR = 4,
+        EC_TIME_OUT = 5,
+        EC_SERVER_BUSY = 6,
+        EC_NO_RIGHT = 7,
+        EC_ACCESS_CMD_INVALID_ERR = 200,
+        EC_ACCESS_CMD_GET_TOKEN_ERR = 201,
+        EC_ACCESS_CMD_TOKEN_PRE_EXPIRE = 202,
+        EC_ACCESS_CMD_INVALID_TOKEN = 203,
+        EC_ACCESS_PUSH_SERIALIZE_ERR = 204,
+        EC_ACCESS_LOGIN_BODY_PARSE_ERR = 205,
+        EC_ACCESS_CONN_ERR = 206,
+        EC_ACCESS_GET_RS_IP_ERR = 207,
+        EC_ACCESS_ADD_COMM_CONN_ERR = 208,
+        EC_ACCESS_ADD_HEART_CONN_ERR = 209,
+        EC_ACCESS_ADD_RELAY_CONN_ERR = 210,
+        EC_ACCESS_HEART_BODY_PARSE_ERR = 211,
+        EC_ACCESS_GET_COMM_CONNECT_ERR = 212,
+        EC_ACCESS_GET_RELAY_CONNECT_ERR = 213,
+        EC_ACCESS_ACCESS_INFO_EMPTY = 214,
+        EC_ACCESS_PLAYER_DUPLICATE_LOGIN = 215,
+        EC_ACCESS_NOE_RELAY_OR_STATE_SVR = 216,
+        EC_PLAYER_GAME_NOT_EXIST = 10000,
+        EC_PLAYER_SECRET_KEY_FAIL = 10001,
+        EC_PLAYER_SIGN_ERR = 10002,
+        EC_PLAYER_DUPLICATE_REQ = 10003,
+        EC_PLAYER_TIMESTAMP_INVALID = 10004,
+        EC_PLAYER_QUERY_PLAYER_FAIL = 10005,
+        EC_PLAYER_ADD_PLAYER_FAIL = 10006,
+        EC_PLAYER_QUERY_GAME_FAIL = 10007,
+        EC_PLAYER_RECORD_NUM_ERR = 10008,
+        EC_PLAYER_GET_TOKEN_FAIL = 10009,
+        EC_PLAYER_TOKEN_NOT_EXIST = 10010,
+        EC_PLAYER_TOKEN_INVALID = 10011,
+        EC_PLAYER_CLEAR_TOKEN_FAIL = 10012,
+        EC_PLAYER_LOCK_FAIL = 10013,
+        EC_PLAYER_UNLOCK_FAIL = 10014,
+        EC_PLAYER_SAVE_TOKEN_FAIL = 10015,
+        EC_PLAYER_GAME_OUT_OF_SERVICE = 10016,
+        EC_ROOM_CREATE_NO_PERMISSION = 20000,
+        EC_ROOM_DESTORY_NO_PERMISSION = 20001,
+        EC_ROOM_JOIN_NO_PERMISSION = 20002,
+        EC_ROOM_REMOVE_PLAYER_NO_PERMISSION = 20003,
+        EC_ROOM_MODIFY_PROPERTIES_NO_PEMISSION = 20004,
+        EC_ROOM_DISSMISS_NO_PERMISSION = 20005,
+        EC_ROOM_REMOVE_SELF_NO_PERMISSION = 20006,
+        EC_ROOM_CHECK_LOGIN_SESSION_ERR = 20007,
+        EC_ROOM_REMOVE_PLAYER_NOT_IN_ROOM = 20008,
+        EC_ROOM_PLAYER_ALREADY_IN_ROOM = 20010,
+        EC_ROOM_PLAYER_NOT_IN_ROOM = 20011,
+        EC_ROOM_PLAYERS_EXCEED_LIMIT = 20012,
+        EC_ROOM_JOIN_NOT_ALLOW = 20013,
+        EC_ROOM_MAX_PLAYERS_INVALID = 20014,
+        EC_ROOM_CREATE_FAIL = 20015,
+        EC_ROOM_PLAYER_OFFLINE = 20016,
+        EC_ROOM_PARAM_PAGE_INVALID = 20017,
+        EC_ROOM_GET_PLAYER_INFO_ERR = 20050,
+        EC_ROOM_GET_ROOM_INFO_ERR = 20051,
+        EC_ROOM_MODIFY_OWNER_ERR = 20052,
+        EC_ROOM_MAX_ROOM_NUMBER_EXCEED_LIMIT = 20053,
+        EC_ROOM_REMOVE_REDIS_PLAYER_ROOM_MATCH_ERR = -20052,
+        EC_ROOM_REMOVE_REDIS_ROOM_INFO_ERR = -20053,
+        EC_ROOM_REDIS_UPDATE_ERR = -20054,
+        EC_ROOM_REDIS_GET_LOCK_ERR = -20055,
+        EC_ROOM_REDIS_CHECK_LOCK_ERR = -20056,
+        EC_ROOM_REDIS_DEL_LOCK_ERR = -20057,
+        EC_ROOM_QUERY_PLAYER_ERR = 20060,
+        EC_ROOM_QUERY_GAME_ERR = 20061,
+        EC_ROOM_PLAYER_INFO_NOT_EXIST = 20062,
+        EC_ROOM_GAME_INFO_NOT_EXIST = 20063,
+        EC_ROOM_HISTORY_INFO_INSERT_ERR = -20064,
+        EC_ROOM_REGION_INFO_NOT_EXIST = 20065,
+        EC_ROOM_QUERY_REGION_ERR = 20066,
+        EC_ROOM_MODIFY_PLAYER_BUSY = 20070,
+        EC_ROOM_INFO_UNEXIST = 20080,
+        EC_ROOM_ALLOCATE_RELAYSVR_IP_PORT_ERR = 20090,
+        EC_ROOM_INVALID_PARAMS_TEAM_ID = 20100,
+        EC_ROOM_TEAM_MEMBER_LIMIT_EXCEED = 20101,
+        EC_ROOM_ALLOCATE_SERVICE_FAIL = -20200,
+        EC_MATCH_NO_ROOM = 30000,
+        EC_MATCH_TIMEOUT = 30001,
+        EC_MATCH_LOGIC_ERR = 30002,
+        EC_MATCH_ERR = 30010,
+        EC_MATCH_PLAYER_IS_IN_MATCH = 30011,
+        EC_MATCH_PLAYER_NOT_IN_MATCH = 30012,
+        EC_MATCH_GET_MATCH_INFO_ERR = 30013,
+        EC_MATCH_UPDATE_MATCH_INFO_ERR = 30014,
+        EC_MATCH_CANCEL_FAILED = 30015,
+        EC_MATCH_GET_PLAYER_LIST_INFO_ERR = 30016,
+        EC_MATCH_CREATE_ROOM_ERR = 30041,
+        EC_MATCH_JOIN_ROOM_ERR = 30042,
+        EC_MATCH_INVALID_PARAMS = 30043,
+        EC_MATCH_GROUP_NUM_EXCEED_LIMIT = 30044,
+        EC_MATCH_PLAYER_ID_IS_REPEATED = 30045,
+        EC_MATCH_CREATE_ROOM_PLAYER_ALREADY_IN_ROOM = 30050,
+        EC_MATCH_QUERY_PLAYER_ERR = 30100,
+        EC_MATCH_PLAYER_INFO_NOT_EXIST = 30101,
+        EC_MATCH_QUERY_GAME_ERR = 30102,
+        EC_MATCH_GAME_INFO_NOT_EXIST = 30103,
+        EC_MATCH_QUERY_REGION_ERR = 30104,
+        EC_MATCH_REGION_INFO_NOT_EXIST = 30105,
+        EC_MATCH_TEAM_FAIL = 30106,
+        EC_MATCH_PLAY_RULE_NOT_RUNNING = 30107,
+        EC_MATCH_PLAY_ATTR_NOT_FOUND = 30108,
+        EC_MATCH_PLAY_RULE_NOT_FOUND = 30109,
+        EC_MATCH_PLAY_RULE_ATTR_SEGMENT_NOT_FOUND = 30110,
+        EC_MATCH_PLAY_RULE_FUNC_ERR = 30111,
+        EC_MATCH_GET_PLAYER_ATTR_FAIL = 30112,
+        EC_MATCH_GET_TEAM_ATTR_FAIL = 30113,
+        EC_MATCH_NONE_TEAM_TYPE_FIT = 30114,
+        EC_MATCH_TEAM_TYPE_INVALID = 30115,
+        EC_MATCH_PLAYER_ATTR_NOT_FOUND = 30116,
+        EC_MATCH_REQUEST_ID_NOT_EXIST = 30117,
+        EC_MATCH_REQUEST_ID_IS_EXIST = 30118,
+        EC_MATCH_TEAM_MATCH_FAIL = 30119,
+        EC_MATCH_INNER_LOGIC_ERR = -30150,
+        EC_MATCH_INNER_PARAMS_ERR = -30160,
+        EC_MATCH_ROOM_INNER_ADD_NODE_ERR = -30170,
+        EC_MATCH_ROOM_INNER_DEL_NODE_ERR = -30171,
+        EC_RELAY_ALREADY_EXISTS = 40000,
+        EC_RELAY_NOT_EXISTS = 40001,
+        EC_RELAY_DATA_EXCEED_LIMITED = 40002,
+        EC_RELAY_MEMBER_ALREADY_EXISTS = 40003,
+        EC_RELAY_MEMBER_NOT_EXISTS = 40004,
+        EC_RELAY_STATE_INVALID = 40005,
+        EC_RELAY_INVALID_FRAME_RATE = 40006,
+        EC_RELAY_SET_FRAME_RATE_FORBIDDEN = 40007,
+        EC_RELAY_NO_MEMBERS = 40008,
+        EC_RELAY_GAMESVR_SERVICE_NOT_OPEN = 40009,
+        EC_RELAY_REQ_POD_FAIL = 40010,
+        EC_RELAY_NO_AVAILABLE_POD = 40011,
+        EC_RELAY_GET_FRAME_CACHE_FAIL = 40012,
+        EC_RELAY_HKV_CACHE_ERROR = 40015,
+        EC_RELAY_REDIS_CACHE_ERROR = 40016,
+        EC_RELAY_NOTIFY_RELAYWORKER_FAIL = 40018,
+        EC_RELAY_RESET_RELAY_ROOM_FAIL = 40019,
+        EC_RELAY_CLEAN_RELAY_ROOM_FAIL = 40020,
+        EC_RELAY_NO_PERMISSION = 40100,
+        EC_RELAY_NOTIFY_GAMESVR_FAIL = 40200,
+        EC_RELAY_FORWARD_TO_GAMESVR_FAIL = 40201,
+        EC_RELAY_FORWARD_TO_CLIENT_FAIL = 40202,
+        EC_INVALID_PARAMS = 60000,
+        EC_INVALID_PARAMS_PLAY_MODE_VERSION = 60001,
+        EC_INVALID_PARAMS_PLAY_MODE_RULETYPE = 60002,
+        EC_INVALID_PARAMS_PLAY_MODE_EXPRESSION = 60003,
+        EC_INVALID_PARAMS_PLAY_MODE_TEAM = 60004,
+        EC_INVALID_PARAMS_MSGQ_ENCODE = 60020,
+        EC_INVALID_PARAMS_MSGQ_DECODE = 60021,
+        EC_INVALID_PARAMS_GAME_ID = 61000,
+        EC_INVALID_PARAMS_PLAYER_INFO = 61001,
+        EC_INVALID_PARAMS_MAX_PLAYERS = 61002,
+        EC_INVALID_PARAMS_ROOM_TYPE = 61003,
+        EC_INVALID_PARAMS_PLAYER_ID = 61004,
+        EC_INVALID_PARAMS_MATCH_TYPE = 61005,
+        EC_INVALID_PARAMS_MATCH_CODE = 61006,
+        EC_INVALID_PARAMS_OPEN_ID = 61007,
+        EC_INVALID_PARAMS_PLATFORM = 61008,
+        EC_INVALID_PARAMS_TIMESTAMP = 61009,
+        EC_INVALID_PARAMS_SIGN = 61010,
+        EC_INVALID_PARAMS_NONCE = 61011,
+        EC_INVALID_PARAMS_TOKEN = 61012,
+        EC_INVALID_PARAMS_NETWORK_STATE = 61013,
+        EC_INVALID_PARAMS_ROOM_NAME = 61014,
+        EC_INVALID_PARAMS_CREATE_ROOM_TYPE = 61015,
+        EC_INVALID_PARAMS_DEVICE_ID = 61016,
+        EC_INVALID_PARAMS_PAGE_NO = 61017,
+        EC_INVALID_PARAMS_PAGE_SIZE = 61018,
+        EC_INVALID_PARAMS_PLAYER_LIST = 61019,
+        EC_INVALID_PARAMS_MESSAGE = 61020,
+        EC_INVALID_CHANGE_ROOM_OPTION = 61021,
+        EC_INVALID_PARAMS_REGION = 61022,
+        EC_INVALID_PARAMS_OWNER = 61023,
+        EC_INVALID_PARAMS_OWNER_OPEN_ID = 61024,
+        EC_INVALID_PARAMS_OPEN_ID_DUPLICATE = 61026,
+        EC_INVALID_PARAMS_ROOM_CREATE_TYPE = 61027,
+        EC_MYSPP_SYSTEM_ERR = -1000,
+        EC_REDIS_KEY_NOT_EXIST = -66000,
+        EC_REDIS_SET_OP_ERR = -66001,
+        EC_REDIS_GET_OP_ERR = -66002,
+        EC_REDIS_DEL_OP_ERR = -66003,
+        EC_REDIS_EXPIRE_OP_ERR = -66004,
+        EC_REDIS_LOCK_OP_ERR = -66005,
+        EC_REDIS_LOCK_ALREADY_EXIST = -66006,
+        EC_REDIS_LIST_OP_ERR = -66020,
+        EC_REDIS_LIST_POP_EMPTY = -66021,
+        EC_REDIS_POOL_GET_INSTANCE_FAIL = -66022,
+        EC_REDIS_SET_IS_EMPTY = -66023,
+        EC_REDIS_OP_INVALID_PARAMS = -66024,
+        EC_MYSQL_NO_ROW_FOUND = -66100,
+        EC_MYSQL_MULTI_ROW_FOUND = -66101,
+        EC_MYSQL_INSERT_FAIL = -66102,
+        EC_MYSQL_DELETE_FAIL = -66103,
+        EC_MYSQL_UPDATE_FAIL = -66104,
+        EC_MYSQL_QUERYS_FAIL = -66105,
+        EC_PB_SERIALIZE_TO_STR_ERR = -66200,
+        EC_PB_PARSE_FROM_STR_ERR = -66201,
+        EC_DATA_FORMAT_ERR = -66210,
+        EC_JSON_FORMAT_ERR = -66211,
+        EC_JSON_PLAY_MODE_FORMAT_ERR = -66212,
+        EC_JSON_PLAY_MODE_PARISE_ERR = -66213,
+        EC_INVALID_PARAMS_RECORE_ID = -66601,
+        EC_HASHID_ERR = -66700,
+        EC_HASHID_ENCODE_ERR = -66701,
+        EC_HASHID_DECODE_ERR = -66702,
+        EC_CONF_ROOM_ID_BUCKET_ERR = -66801,
+        EC_SDK_SEND_FAIL = 90001,
+        EC_SDK_UNINIT = 90002,
+        EC_SDK_RES_TIMEOUT = 90003,
+        EC_SDK_NO_LOGIN = 90004,
+        EC_SDK_NO_CHECK_LOGIN = 90005,
+        EC_SDK_SOCKET_ERROR = 90006,
+        EC_SDK_SOCKET_CLOSE = 90007,
+        EC_SDK_NO_ROOM = 90008
+    }
+    namespace types {
+        /**
+            * @name 初始化回调参数
+            * @field {number} serverTime 服务器时间戳(单位:毫秒)
+            */
+        interface InitRsp {
+            serverTime: number;
+        }
+        /**
+         * @name 玩家信息参数
+         * @field {string} name  玩家昵称
+         * @field {number} customPlayerStatus  自定义玩家状态
+         * @field {string} customProfile  自定义玩家信息
+         */
+        interface PlayerInfoPara {
+            name: string;
+            customPlayerStatus: number;
+            customProfile: string;
+        }
+        /**
+         * @name 玩家信息参数
+         * @field {string} name  玩家昵称
+         * @field {number} customPlayerStatus  自定义玩家状态
+         * @field {string} customProfile  自定义玩家信息
+         * @field {MGOBE.types.MatchAttribute[]} matchAttributes  匹配属性
+         */
+        interface MatchPlayerInfoPara {
+            name: string;
+            customPlayerStatus: number;
+            customProfile: string;
+            matchAttributes: MGOBE.types.MatchAttribute[];
+        }
+        /**
+         * @name  初始化参数:游戏信息
+         * @description 游戏秘钥指控制台上的“游戏key”。在初始化SDK时,secretKey、CreateSignature两个参数传其中一个即可。如果实现了CreateSignature方法,则忽略secretKey参数。
+         * @description CreateSignature用于计算签名signature,优点在于避免客户端泄露游戏密钥。
+         * @field {string} gameId  游戏ID
+         * @field {string} openId  玩家openId
+         * @field {string} secretKey  游戏秘钥
+         * @field {MGOBE.types.CreateSignature} createSignature  签名函数
+         */
+        interface GameInfoPara {
+            gameId: string;
+            openId: string;
+            secretKey?: string;
+            createSignature?: MGOBE.types.CreateSignature;
+        }
+        /**
+         * @name  初始化参数:配置参数
+         * @description 服务地址指控制台上的“域名”
+         * @field {number} reconnectMaxTimes  重连接次数
+         * @field {number} reconnectInterval  重连接时间间隔
+         * @field {number} resendInterval  消息重发时间间隔
+         * @field {number} resendTimeout  消息重发超时时间
+         * @field {string} url  服务地址
+         * @field {boolean} isAutoRequestFrame  是否自动补帧
+         * @field {string} cacertNativeUrl  本地CA根证书路径(CocosNative环境需要该参数)
+         */
+        interface ConfigPara {
+            reconnectMaxTimes?: number;
+            reconnectInterval?: number;
+            resendInterval?: number;
+            resendTimeout?: number;
+            url?: string;
+            isAutoRequestFrame?: boolean;
+            cacertNativeUrl?: string;
+        }
+        /**
+         * @name  初始化签名
+         * @description 可以使用签名的方式初始化SDK,避免客户端泄露游戏密钥。
+         * @field {string} sign  签名
+         * @field {number} nonce  随机正整数(uint64类型)
+         * @field {number} timestamp  时间戳,秒(uint64类型)
+         */
+        interface Signature {
+            sign: string;
+            nonce: number;
+            timestamp: number;
+        }
+        /**
+         * @name 签名函数
+         * @description 开发者如果使用签名方式初始化SDK,需要实现该方法,并在callback中回调Signature对象。
+         * @field {(signature: MGOBE.types.Signature) => any} callback  回调函数,在该函数返回Signature对象
+         */
+        type CreateSignature = (callback: (signature: MGOBE.types.Signature) => any) => any;
+        /**
+         * @name 修改玩家状态参数
+         * @field {number} customPlayerStatus  自定义玩家状态
+         */
+        interface ChangeCustomPlayerStatusPara {
+            customPlayerStatus: number;
+        }
+        /**
+         * @name  创建房间参数
+         * @field {string} roomName  房间名称
+         * @field {string} roomType  房间类型
+         * @field {number} maxPlayers  房间最大玩家数量
+         * @field {boolean} isPrivate  是否私有
+         * @field {string} customProperties  自定义房间属性
+         * @field {MGOBE.types.PlayerInfoPara} playerInfo  玩家信息
+         */
+        interface CreateRoomPara {
+            roomName: string;
+            roomType: string;
+            maxPlayers: number;
+            isPrivate: boolean;
+            customProperties: string;
+            playerInfo: MGOBE.types.PlayerInfoPara;
+        }
+        /**
+         * @name 创建团队房间参数
+         * @field {string} roomName  房间名称
+         * @field {string} roomType  房间类型
+         * @field {number} maxPlayers  房间最大玩家数量
+         * @field {boolean} isPrivate  是否私有
+         * @field {string} customProperties  自定义房间属性
+         * @field {MGOBE.types.PlayerInfoPara} playerInfo  玩家信息
+         * @field {number} teamNumber  队伍数量
+         */
+        interface CreateTeamRoomPara {
+            roomName: string;
+            roomType: string;
+            maxPlayers: number;
+            isPrivate: boolean;
+            customProperties: string;
+            playerInfo: MGOBE.types.PlayerInfoPara;
+            teamNumber: number;
+        }
+        /**
+         * @name 加入房间参数
+         * @field {MGOBE.types.PlayerInfoPara} playerInfo  玩家信息
+         */
+        interface JoinRoomPara {
+            playerInfo: MGOBE.types.PlayerInfoPara;
+        }
+        /**
+         * @name 加入团队房间参数
+         * @field {MGOBE.types.PlayerInfoPara} playerInfo  玩家信息
+         * @field {string} teamId  队伍ID
+         */
+        interface JoinTeamRoomPara {
+            playerInfo: MGOBE.types.PlayerInfoPara;
+            teamId: string;
+        }
+        /**
+         * @name 房间变更参数
+         * @field {string} roomName  房间名称(可选)
+         * @field {string} owner  房主ID(可选)
+         * @field {boolean} isPrivate  是否私有(可选)
+         * @field {string} customProperties  自定义房间属性(可选)
+         * @field {boolean} isForbidJoin  是否禁止加入房间(可选)
+         */
+        interface ChangeRoomPara {
+            roomName?: string;
+            owner?: string;
+            isPrivate?: boolean;
+            customProperties?: string;
+            isForbidJoin?: boolean;
+        }
+        /**
+         * @name 移除房间内玩家参数
+         * @field {string} removePlayerId  被移除玩家ID
+         */
+        interface RemovePlayerPara {
+            removePlayerId: string;
+        }
+        /**
+         * @name 获取房间列表参数
+         * @field {number} pageNo  页号,从1开始
+         * @field {number} pageSize  每页数量,最大为10
+         * @field {string} roomType  房间类型(可选)
+         * @field {boolean} isDesc  是否按照房间创建时间倒序
+         */
+        interface GetRoomListPara {
+            pageNo: number;
+            pageSize: number;
+            roomType?: string;
+            isDesc?: boolean;
+        }
+        /**
+         * @name 获取房间参数
+         * @field {string} roomId  房间ID
+         */
+        interface GetRoomByRoomIdPara {
+            roomId: string;
+        }
+        /**
+         * @name 多人匹配参数
+         * @description 匹配 code 需要在控制台创建匹配获得。
+         * @field {string} matchCode  匹配Code
+         * @field {MGOBE.types.MatchPlayerInfoPara} playerInfo  玩家信息
+         */
+        interface MatchPlayersPara {
+            matchCode: string;
+            playerInfo: MGOBE.types.MatchPlayerInfoPara;
+        }
+        /**
+         * @name 房间匹配参数
+         * @field {MGOBE.types.PlayerInfoPara} playerInfo  玩家信息
+         * @field {number} maxPlayers  房间最大玩家数量
+         * @field {string} roomType  房间的类型
+         */
+        interface MatchRoomPara {
+            playerInfo: MGOBE.types.PlayerInfoPara;
+            maxPlayers: number;
+            roomType: string;
+        }
+        /**
+         * @name 组队匹配玩家信息参数
+         * @field {string} id  玩家ID
+         * @field {string} name  玩家昵称
+         * @field {number} customPlayerStatus  自定义玩家状态
+         * @field {string} customProfile  自定义玩家信息
+         * @field {MGOBE.types.MatchAttribute[]} matchAttributes  匹配属性
+         */
+        interface MatchGroupPlayerInfoPara {
+            id: string;
+            name: string;
+            customPlayerStatus: number;
+            customProfile: string;
+            matchAttributes: MGOBE.types.MatchAttribute[];
+        }
+        /**
+         * @name 组队匹配参数
+         * @description 匹配 code 需要在控制台创建匹配获得。
+         * @field {string} matchCode  匹配Code
+         * @field {MGOBE.types.MatchGroupPlayerInfoPara[]} playerInfoList[]  队员信息
+         */
+        interface MatchGroupPara {
+            matchCode: string;
+            playerInfoList: MGOBE.types.MatchGroupPlayerInfoPara[];
+        }
+        /**
+         * @name 组队匹配结束广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         * @field {number} errCode  错误码
+         */
+        interface MatchBst {
+            roomInfo: MGOBE.types.RoomInfo;
+            errCode: number;
+        }
+        /**
+         * @name 组队匹配取消广播回调参数
+         * @field {string} matchCode  匹配Code
+         * @field {string} playerId  发起取消匹配的玩家ID
+         */
+        interface CancelMatchBst {
+            matchCode: string;
+            playerId: string;
+        }
+        /**
+         * @name 取消匹配参数
+         * @field {MGOBE.types.MatchType}  matchType 匹配类型
+         */
+        interface CancelPlayerMatchPara {
+            matchType: MGOBE.types.MatchType;
+        }
+        /**
+         * @name 发送帧数据参数
+         * @field {object} data  帧数据
+         */
+        interface SendFramePara {
+            data: object;
+        }
+        /**
+         * @name 请求补帧参数
+         * @description 补帧范围大于等于beginFrameId,小于等于endFrameId
+         * @field {number} beginFrameId  起始帧号
+         * @field {number} endFrameId  结束帧号
+         */
+        interface RequestFramePara {
+            beginFrameId: number;
+            endFrameId: number;
+        }
+        /**
+         * @name 消息接收者类型
+         * @field {1} ROOM_ALL 全部玩家
+         * @field {2} ROOM_OTHERS 除自己外的其他玩家
+         * @field {3} ROOM_SOME 房间中部分玩家
+         */
+        enum RecvType {
+            ROOM_ALL = 1,
+            ROOM_OTHERS = 2,
+            ROOM_SOME = 3
+        }
+        /**
+         * @name 发送房间内消息参数
+         * @field {string[]} recvPlayerList  接收消息玩家ID列表
+         * @field {string} msg  消息内容
+         * @field {MGOBE.types.RecvType} recvType  消息接收者类型
+         */
+        interface SendToClientPara {
+            recvPlayerList: string[];
+            msg: string;
+            recvType: MGOBE.types.RecvType;
+        }
+        /**
+         * @name 发自定义服务消息参数
+         * @field {object} data  消息内容
+         */
+        interface SendToGameSvrPara {
+            data: object;
+        }
+        /**
+         * @name 自定义服务消息广播回调参数
+         * @field {number} roomId  房间ID
+         * @field {string[]} playerIdList  接收消息玩家ID列表
+         * @field {object} data  消息内容
+         */
+        interface RecvFromGameSvrBst {
+            roomId: string;
+            recvPlayerIdList: string[];
+            data: object;
+        }
+        /**
+         * @name 帧内容
+         * @field {string} playerId  玩家ID
+         * @field {object} data  玩家帧内容
+         * @field {number} timestamp  时间戳,各玩家本地发送帧的时间
+         */
+        interface FrameItem {
+            playerId: string;
+            data: object;
+            timestamp: number;
+        }
+        /**
+         * @name 帧数据
+         * @description 附加信息包含一个 number 类型随机种子,开发者可以使用帧 ID 与随机种子组合成一个值来初始化 RandomUtil 工具。
+         * @description time 为 SDK 拟合出来的时间,目的是使每一帧到达客户端的时间尽量均匀分布,并且时间间隔尽量接近帧率的倒数。
+         * @description isReplay 表示该帧是否为自动补帧产生的帧,自动补帧需要在初始化 Listener 时设置。
+         * @description items 数组表示各个客户端发送的帧消息,按照到达服务器时间先后进行排序(数组中第0个为最先到服务器)。
+         * @field {number} frameId  帧ID
+         * @field {MGOBE.types.FrameItem[]} items  帧内容
+         * @field {MGOBE.types.FrameExtInfo} ext  附加信息
+         * @field {number} roomId  房间ID
+         * @field {number} time  该帧到达客户端时间
+         * @field {boolean} isReplay  是否为补帧
+         */
+        interface Frame {
+            id: number;
+            items: MGOBE.types.FrameItem[];
+            ext: MGOBE.types.FrameExtInfo;
+            roomId: string;
+            time?: number;
+            isReplay?: boolean;
+        }
+        /**
+         * @name 帧广播回调参数
+         * @field {MGOBE.types.Frame} frame  帧数据
+         */
+        interface RecvFrameBst {
+            frame: MGOBE.types.Frame;
+        }
+        /**
+         * @name 请求补帧回调参数
+         * @field {MGOBE.types.Frame[]} frames  帧数据数组
+         */
+        interface RequestFrameRsp {
+            frames: MGOBE.types.Frame[];
+        }
+        /**
+         * @name 玩家加入房间广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         * @field {string} joinPlayerId  加房玩家ID
+         */
+        interface JoinRoomBst {
+            roomInfo: MGOBE.types.RoomInfo;
+            joinPlayerId: string;
+        }
+        /**
+         * @name 玩家退出房间广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         * @field {string} leavePlayerId  退房玩家ID
+         */
+        interface LeaveRoomBst {
+            roomInfo: MGOBE.types.RoomInfo;
+            leavePlayerId: string;
+        }
+        /**
+         * @name 房间被解散广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间解散前的信息
+         */
+        interface DismissRoomBst {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 房间属性变更广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface ChangeRoomBst {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 房间内玩家被移除广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         * @field {string} removePlayerId  被移除玩家ID
+         */
+        interface RemovePlayerBst {
+            roomInfo: MGOBE.types.RoomInfo;
+            removePlayerId: string;
+        }
+        /**
+         * @name 房间消息广播回调参数
+         * @field {number} roomId  房间ID
+         * @field {string} sendPlayerId  发送者ID
+         * @field {string} msg  消息内容
+         */
+        interface RecvFromClientBst {
+            roomId: string;
+            sendPlayerId: string;
+            msg: string;
+        }
+        /**
+         * @name 房间内玩家网络状态变化广播回调参数
+         * @field {string} changePlayerId  玩家ID
+         * @field {MGOBE.types.NetworkState} networkState  网络状态
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface ChangePlayerNetworkStateBst {
+            changePlayerId: string;
+            networkState: MGOBE.types.NetworkState;
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 玩家自定义状态变化广播回调参数
+         * @field {string} changePlayerId  玩家ID
+         * @field {number} customPlayerStatus  自定义玩家信息
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface ChangeCustomPlayerStatusBst {
+            changePlayerId: string;
+            customPlayerStatus: number;
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 开始帧同步广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface StartFrameSyncBst {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 停止帧同步广播回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface StopFrameSyncBst {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 房间属性
+         * @description isPrivate 属性为 true 表示该房间为私有房间,不能被 matchRoom 接口匹配到。
+         * @field {string} id  房间ID
+         * @field {string} name  房间名称
+         * @field {string} type  房间类型
+         * @field {MGOBE.types.CreateRoomType} createType  创建房间方式
+         * @field {number} maxPlayers  房间最大玩家数量
+         * @field {string} owner  房主ID
+         * @field {boolean} isPrivate  是否私有
+         * @field {string} customProperties  房间自定义属性
+         * @field {MGOBE.types.PlayerInfo[]} playerList  玩家列表
+         * @field {MGOBE.types.TeamInfo[]} teamList  团队属性
+         * @field {MGOBE.types.FrameSyncState} frameSyncState  房间帧同步状态
+         * @field {number} frameRate  帧率
+         * @field {string} routeId  路由ID
+         * @field {number} createTime  房间创建时的时间戳(单位:秒)
+         * @field {number} startGameTime  开始帧同步时的时间戳(单位:秒)
+         * @field {boolean} isForbidJoin  是否禁止加入房间
+         */
+        interface RoomInfo {
+            id: string;
+            name: string;
+            type: string;
+            createType: MGOBE.types.CreateRoomType;
+            maxPlayers: number;
+            owner: string;
+            isPrivate: boolean;
+            customProperties: string;
+            playerList: MGOBE.types.PlayerInfo[];
+            teamList: MGOBE.types.TeamInfo[];
+            frameSyncState: MGOBE.types.FrameSyncState;
+            frameRate: number;
+            routeId: string;
+            createTime: number;
+            startGameTime: number;
+            isForbidJoin: boolean;
+        }
+        /**
+         * @name 修改玩家状态回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface ChangeCustomPlayerStatusRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 创建房间回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface CreateRoomRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 加入房间回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface JoinRoomRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 退出房间回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface LeaveRoomRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 解散房间回调参数
+         */
+        interface DismissRoomRsp {
+        }
+        /**
+         * @name 修改房间回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface ChangeRoomRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 移除房间内玩家回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface RemovePlayerRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 获取房间信息回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface GetRoomByRoomIdRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 获取房间列表回调参数
+         * @field {MGOBE.types.RoomInfo[]} roomList  房间列表
+         * @field {number} total  房间总数
+         */
+        interface GetRoomListRsp {
+            gameId: string;
+            roomList: MGOBE.types.RoomInfo[];
+            total: number;
+        }
+        /**
+         * @name 多人匹配回调参数
+         * @field {MGOBE.types.MatchType} matchType  匹配类型
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface MatchPlayersRsp {
+            matchType?: MGOBE.types.MatchType;
+            roomInfo?: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 房间匹配回调参数
+         * @field {MGOBE.types.RoomInfo} roomInfo  房间信息
+         */
+        interface MatchRoomSimpleRsp {
+            roomInfo: MGOBE.types.RoomInfo;
+        }
+        /**
+         * @name 组队匹配回调参数
+         * @field {string} matchCode  匹配Code
+         */
+        interface MatchGroupRsp {
+            matchCode: string;
+        }
+        /**
+         * @name 取消匹配回调参数
+         */
+        interface CancelPlayerMatchRsp {
+        }
+        /**
+         * @name  开始帧同步回调参数
+         */
+        interface StartFrameSyncRsp {
+        }
+        /**
+         * @name 停止帧同步回调参数
+         */
+        interface StopFrameSyncRsp {
+        }
+        /**
+         * @name 发送帧同步数据回调参数
+         */
+        interface SendFrameRsp {
+        }
+        /**
+         * @name 房间内发送消息回调参数
+         */
+        interface SendToClientRsp {
+        }
+        /**
+         * @name 发送自定义服务消息回调参数
+         */
+        interface SendToGameSvrRsp {
+        }
+        /**
+         * @name 匹配属性
+         * @field {string} name  属性名称
+         * @field {number} value  属性值
+         */
+        interface MatchAttribute {
+            name: string;
+            value: number;
+        }
+        /**
+         * @name 匹配类型
+         * @field {1} ROOM_SIMPLE 房间匹配
+         * @field {2} PLAYER_COMPLEX 玩家匹配
+         */
+        enum MatchType {
+            ROOM_SIMPLE = 1,
+            PLAYER_COMPLEX = 2
+        }
+        /**
+         * @name 帧数据附加信息
+         * @field {number} seed  随机数种子
+         */
+        interface FrameExtInfo {
+            seed: number;
+        }
+        /**
+         * @name 创建房间方式
+         * @field {0} COMMON_CREATE  普通创建
+         * @field {1} MATCH_CREATE  匹配创建
+         */
+        enum CreateRoomType {
+            COMMON_CREATE = 0,
+            MATCH_CREATE = 1,
+            THIRD_PARTY_CREATE = 2
+        }
+        /**
+         * @name 网络状态
+         * @field {0} COMMON_OFFLINE  房间中玩家掉线
+         * @field {1} COMMON_ONLINE  房间中玩家在线
+         * @field {2} RELAY_OFFLINE  帧同步中玩家掉线
+         * @field {3} RELAY_ONLINE  帧同步中玩家在线
+         */
+        enum NetworkState {
+            COMMON_OFFLINE = 0,
+            COMMON_ONLINE = 1,
+            RELAY_OFFLINE = 2,
+            RELAY_ONLINE = 3
+        }
+        /**
+         * @name 房间帧同步状态
+         * @field {0} STOP 未开始帧同步
+         * @field {1} START 已开始帧同步
+         */
+        enum FrameSyncState {
+            STOP = 0,
+            START = 1
+        }
+        /**
+         * @name 玩家信息
+         * @field {string} id  玩家ID
+         * @field {string} name  玩家昵称
+         * @field {string} teamId  队伍ID
+         * @field {number} customPlayerStatus  自定义玩家状态
+         * @field {string} customProfile  自定义玩家信息
+         * @field {MGOBE.types.NetworkState} commonNetworkState  玩家在房间的网络状态
+         * @field {MGOBE.types.NetworkState} relayNetworkState  玩家在游戏中的网络状态
+         * @field {boolean} isRobot  玩家是否为机器人
+         * @field {MGOBE.types.MatchAttribute[]} matchAttributes  玩家匹配属性列表(isRobot为true时生效)
+         */
+        interface PlayerInfo {
+            id: string;
+            name: string;
+            teamId: string;
+            customPlayerStatus: number;
+            customProfile: string;
+            commonNetworkState: MGOBE.types.NetworkState;
+            relayNetworkState: MGOBE.types.NetworkState;
+            isRobot: boolean;
+            matchAttributes: MGOBE.types.MatchAttribute[];
+        }
+        /**
+         * @name 队伍信息
+         * @field {string} id  队伍ID
+         * @field {string} name  队伍名称
+         * @field {number} minPlayers  队伍最小人数
+         * @field {number} maxPlayers  队伍最大人数
+         */
+        interface TeamInfo {
+            id: string;
+            name: string;
+            minPlayers: number;
+            maxPlayers: number;
+        }
+        /**
+         * 响应回调参数
+         * @field {number} code  错误码
+         * @field {string} msg  错误信息
+         * @field {string} seq  响应序列号
+         * @field {any} data  响应数据
+         */
+        interface ResponseEvent<T> {
+            code: number;
+            msg: string;
+            seq: string;
+            data?: T;
+        }
+        /**
+         * 广播回调参数
+         * @field {any} data  广播数据
+         * @field {string} seq  广播序列号
+         */
+        interface BroadcastEvent<T> {
+            data: T;
+            seq: string;
+        }
+        /**
+         * 响应回调函数
+         */
+        type ReqCallback<T> = (event: MGOBE.types.ResponseEvent<T>) => any;
+
+    }
+}

+ 5 - 0
assets/Scripts/ThirdParty/MGOBE/MGOBE.d.ts.meta

@@ -0,0 +1,5 @@
+{
+  "ver": "2.0.0",
+  "uuid": "a2adc25f-0f78-4c86-bfad-63b8f18e8d2e",
+  "subMetas": {}
+}

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
assets/Scripts/ThirdParty/MGOBE/MGOBE.js


+ 9 - 0
assets/Scripts/ThirdParty/MGOBE/MGOBE.js.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "87cf83ae-b4ab-4712-b90b-c8c397f07987",
+  "isPlugin": true,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": true,
+  "subMetas": {}
+}

+ 48 - 0
assets/Scripts/ThirdParty/WebSocket.js

@@ -0,0 +1,48 @@
+var websocket = {
+    sock: null,
+    on_open: function () {
+        this.send_data(JSON.stringify({
+            stype: "auth",
+            ctype: "login",
+            data: {
+                name: "TestUser",
+                pwd: 123456
+            }
+        }));
+    },
+
+    on_message: function (event) {
+        // console.log("client rcv data=" + event.data);
+        this.host.updateMsg(event.data);
+    },
+
+    on_close: function () {
+        this.close();
+    },
+
+    on_error: function () {
+        this.close();
+    },
+
+    close: function () {
+        if(this.sock){
+            this.sock.close();
+            this.sock = null;
+        }
+    },
+    connect: function (url,host) {
+        this.host = host;
+        this.sock = new WebSocket(url);
+        this.sock.binaryType = "arraybuffer";
+        this.sock.onopen = this.on_open.bind(this);
+        this.sock.onmessage = this.on_message.bind(this);
+        this.sock.onclose = this.on_close.bind(this);
+        this.sock.onerror = this.on_error.bind(this);
+    },
+
+    send_data: function (data) {
+        this.sock.send(data);
+    }
+};
+
+module.exports = websocket;

+ 9 - 0
assets/Scripts/ThirdParty/WebSocket.js.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "02aff491-0b06-453a-91f9-005ace39b21a",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 270 - 0
assets/Scripts/WebView.js

@@ -0,0 +1,270 @@
+//<!-- uni 的 SDK,必须引用。 -->
+//<script type="text/javascript" src="//js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
+
+// uni.postMessage 里面字段:
+// functionName 目前提供的函数名字:
+// "gameInit" ,获取对应的游戏初始化信息,比如头像,性别,等
+// "uploadInfo" , 上传游戏完结数据
+// ***2020/3/25******新增 *******/
+// "aiRandomInfo", 返回一个随机的ai的信息
+// "fruitInfo" , 参数{calorie:(int)},返回一个imageurl 和 对应的水果下标数组
+
+// 设备回调
+// "onDeviceUpdateData" ,设备回调后面用这个,
+// "onDeviceState", 暂时只返回数据连接错误信息,
+// "onDeviceClose", 和设备断开连接时候回调,
+
+// gameData 里面按照下面示例给的参考
+
+// 请求数据时候,给app post 数据时候的格式,
+// uni.postMessage({
+//     data:{
+//         funName:functionName,
+//         gameData:{}
+//     }
+// });
+
+//统一在onMessage 中接收数据
+
+window.onWebViewMessage = function(data){
+    let name= data.funName;
+    //比如下面请求了gameInit ,这里接收app 处理返回的数据
+    if(name == "onGameInit")
+    {
+        /**
+         * onGameInit
+         * 初始化游戏数据
+         * gameData :
+         * avatarUrl:"",//头像url
+         * avatarBase64Url:"",//base64字符串头像,后面以base64为主
+         * userName:"", //名字
+         * gender: 0,//"0:男,1:女"
+         * calorieParams:{runUnit:10,jumpUnit:20}, //每次跑/跳动消耗的卡路里
+         * device:null 或 {cname:'中文名',ename:'英文名',name:'设备原有名字'}//'当前选择的设备信息,没选择就为空'
+         */
+        console.log("onGameInit ==",data.gameData);
+        webView.onGameInit(data.gameData);
+    }
+    else if(name == "onUploadInfo")
+    {
+        /**
+         * 上传分数后的返回,
+         * gameData:
+         * {}
+         */
+        console.log("onUploadInfo ==",data.gameData);
+        webView.onUploadInfo(data.gameData);
+    }
+    else if(name == "onAiRandomInfo")//获取随机AI 头像 姓名等信息
+    {
+        /**
+         * 获取ai信息的数据回调
+         * aiId: 0, //ai的id
+         * aiName: "",//ai 的名字
+         * aiGender: 0,//"0:男,1:女"
+         * aiType: "",//网名类型
+         * aiAvatarBase64: ""//base64字符串,头像
+         */
+        console.log("onAiRandomInfo ==",data.gameData);
+        webView.onAiRandomInfo(data.gameData);
+    }
+    else if(name == "onFruitInfo")//获取水果列表
+    {
+        /**
+         * 获取水果图片信息
+         * fruitBase64: "",// 水果雪碧图 base64
+         * unitWidth: 100,// 雪碧图 单张图片宽
+         * unitHeight: 100,// 雪碧图 单张图片高
+         * unit: "px",// 雪碧图 单位
+         * imageStartPosY: 0,// 雪碧图 起始图 Y方向位置
+         * imageEndPosY: -1200,// 雪碧图 结束图 Y方向位置
+         * fruitIndexArray: [0,0,0] // 输入卡路里后计算的返回结果,当前的数组
+         */
+        console.log("onFruitInfo ==",data.gameData);
+        webView.onFruitInfo(data.gameData);
+    }
+    else if(name == "onDeviceUpdateData")//蹦床每次操作后传回来的指令
+    {
+        /**
+         * 设备连接成功后的返回值
+         * 蹦床的返回数值,有可能两种格式
+         * gameData:{F:2} , {H:-1,T:0}; //F:0:左 1:右  2:起跳  3:降落  -1: 无状态   T 0--无时间   -1:超时   H 0:左手 1:右手
+         */
+        console.log("onDeviceUpdateData ==",data.gameData);
+        webView.onDeviceUpdateData(data.gameData);
+    }
+    else if(name == "onDeviceState"){
+        /**
+         * 暂时只返回设备数据连接错误信息
+         * gamedata = {state: -1, 	msg: "设备数据错误"}
+         */
+        console.log("onDeviceState ==",data.gameData);
+        webView.onDeviceUpdateData(data.gameData);
+    }
+    else if(name == "onDeviceClose"){
+
+        /**
+         * 和设备断开连接时候回调
+         * gamedata = {msg: '设备断开连接。'}
+         */
+        console.log("onDeviceClose ==",data.gameData);
+        webView.onDeviceUpdateData(data.gameData);
+    }else if(name == "onUrlToBase64"){
+        console.log("onUrlToBase64 ==",data.gameData);
+        webView.onUrlToBase64(data.gameData);
+    }
+};
+
+let webView = {
+    avatarBase64: null,
+    avatarUrl:'',
+    userName: '',
+    gender: 0,
+    rivalavatarBase64: null,
+    rivalavatarUrl:'',
+    rivalUserName: '',
+    rivalGender: 1,
+    listenerArr: [],
+    register(listener)//注册后实现对应的回调函数 可以监听到回调
+    {
+        //TODO
+        // 要判断对象是否已经注册过,如果存在不注册
+        this.listenerArr.push(listener);
+    },
+    unRegister(listener) {
+        //TODO
+        // 要判断对象是否已经注册过,如果存在才可以删除
+        this.remove(this.listenerArr, listener);
+    },
+    dispatchEvent(eventName, data)//把所有的监听事件分发给所有接收到回调的节点
+    {
+        for (let i = 0; i < this.listenerArr.length; i++) {
+            this.listenerArr[i].emit(eventName, data);
+        }
+    },
+    init(listener) {
+        this.register(listener);//初始化的时候默认直接注册对象,不需要重复注册.
+        this.gameInitEvent();
+    },
+    gameInitEvent() {
+        // 向服务器自己获取初始化信息
+        uni.postMessage({
+            data: {
+                funName: "gameInit",
+                gameData: {}
+            }
+        });
+    },
+    InitLocal(gameData)//初始化自己的头像,姓名等信息
+    {
+        this.avatarUrl = gameData.avatarUrl;
+        this.avatarBase64 = gameData.avatarBase64Url;
+        this.userName = gameData.userName;
+        this.gender = gameData.gender;
+    },
+    postMessage(score, gameTime, calorie) {//最后胜利把信息发给服务器记录和统计
+        uni.postMessage({
+            data: {
+                funName: "uploadInfo",
+                gameData: {
+                    gameScore: score == "" ? 100 : score,//游戏得分
+                    gameTime: gameTime == "" ? 100 : gameTime,//单位秒
+                    calorieBurned: calorie == "" ? 1000 : calorie,//消耗的卡路里
+                }
+            }
+        });
+    },
+    getAiInfo(callback) {//获取随机AI信息
+        this.callback = callback;
+        uni.postMessage({
+            data: {
+                funName: "aiRandomInfo",
+                gameData: {}
+            }
+        })
+    },
+    getFruitInfo(calorie) {//获取水果
+        uni.postMessage({
+            data: {
+                funName: "fruitInfo",
+                gameData: {
+                    calorie: 1000
+                }
+            }
+        })
+    },
+    getBase64(url){
+        uni.postMessage({
+            data:{
+                funName:"urlToBase64",
+                gameData:{
+                    url:url
+                }
+            }
+        })
+    },
+    indexOf(arr, item) {//判断元素在数组第几位
+        for (let i = 0; i < arr.length; i++) {
+            if (arr[i] == item) return i;
+        }
+        return -1;
+    },
+    remove(arr, item) {//移除数组中制定元素
+        let index = arr.indexOf(item);
+        if (index > -1) {
+            arr.splice(index, 1);
+        }
+    },
+    // callBack
+    onGameInit(data) {
+        webView.InitLocal(data);
+        webView.dispatchEvent('onGameInit',data);
+    },
+    onUploadInfo(data) {
+        webView.dispatchEvent('onUploadInfo',data);
+    },
+    onAiRandomInfo(data) {
+        this.rivalavatarBase64 = data.aiAvatarBase64Url;
+        this.rivalUserName = data.aiName;
+        this.rivalGender = data.aiGender;
+
+        webView.dispatchEvent('onAiRandomInfo',data);
+    },
+    onFruitInfo(data) {
+        // this.setImageBase64(data.fruitBase64,function (texture) {
+        //
+        // });
+        webView.dispatchEvent('onFruitInfo',data);
+    },
+    onDeviceUpdateData(data) {
+        // if(!window.gameMode) return;
+        //
+        // if(data.F == 0)
+        // {
+        //     console.log("F == 0");
+        //     window.gameMode.pConSt1.speedUp();
+        //
+        // }else  if(data.F == 1)
+        // {
+        //     console.log("F == 1");
+        //     window.gameMode.pConSt1.speedUp();
+        // }
+        // else  if(data.F == 2)
+        // {
+        //     console.log("F == 2");
+        //     window.gameMode.pConSt1.jump();
+        // }
+        webView.dispatchEvent('onDeviceUpdateData',data);
+    },
+    onDeviceState(data) {
+        webView.dispatchEvent('onDeviceState',data);
+    },
+    onDeviceClose(data) {
+        webView.dispatchEvent('onDeviceClose',data);
+    },
+    onUrlToBase64(data)
+    {
+        webView.dispatchEvent('onUrlToBase64',data);
+    },
+};
+module.exports = webView;

+ 9 - 0
assets/Scripts/WebView.js.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "fbb39442-ce81-426f-a965-bebb56583468",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 7 - 0
assets/Textures.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "9daf3181-29be-4a24-921f-9bcfea5c306c",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

+ 7 - 0
assets/Textures/Matching.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "cd413418-87b6-4c9d-a683-36675dd24420",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

BIN
assets/Textures/Matching/BG1600.png


+ 36 - 0
assets/Textures/Matching/BG1600.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "6cfd59c3-b89b-4220-8f38-6ea169b77d85",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 720,
+  "height": 1600,
+  "platformSettings": {},
+  "subMetas": {
+    "BG1600": {
+      "ver": "1.0.4",
+      "uuid": "df80771b-456b-47df-95e3-1176906dd83c",
+      "rawTextureUuid": "6cfd59c3-b89b-4220-8f38-6ea169b77d85",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 720,
+      "height": 1600,
+      "rawWidth": 720,
+      "rawHeight": 1600,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/BlueLine.png


+ 36 - 0
assets/Textures/Matching/BlueLine.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "26a9605b-664b-4dd0-a95e-6f0a70ef8e9f",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 733,
+  "height": 165,
+  "platformSettings": {},
+  "subMetas": {
+    "BlueLine": {
+      "ver": "1.0.4",
+      "uuid": "2bf8f3ec-d847-4121-853f-bf25b4f09f34",
+      "rawTextureUuid": "26a9605b-664b-4dd0-a95e-6f0a70ef8e9f",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 1,
+      "trimX": 0,
+      "trimY": 3,
+      "width": 733,
+      "height": 157,
+      "rawWidth": 733,
+      "rawHeight": 165,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/Boy.png


+ 36 - 0
assets/Textures/Matching/Boy.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "1abfe94b-8ef5-449d-9ce3-3c60375f4ab4",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 37,
+  "height": 37,
+  "platformSettings": {},
+  "subMetas": {
+    "Boy": {
+      "ver": "1.0.4",
+      "uuid": "d152c886-39e5-400c-84b4-c285f24ef41c",
+      "rawTextureUuid": "1abfe94b-8ef5-449d-9ce3-3c60375f4ab4",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 1,
+      "offsetY": -2.5,
+      "trimX": 5,
+      "trimY": 5,
+      "width": 29,
+      "height": 32,
+      "rawWidth": 37,
+      "rawHeight": 37,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/BoyAvatarStroke.png


+ 36 - 0
assets/Textures/Matching/BoyAvatarStroke.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "a20a420e-db39-4cf6-954a-293be3714d7d",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 180,
+  "height": 180,
+  "platformSettings": {},
+  "subMetas": {
+    "BoyAvatarStroke": {
+      "ver": "1.0.4",
+      "uuid": "9660088c-2cc0-400e-aa40-27ed197ea1f2",
+      "rawTextureUuid": "a20a420e-db39-4cf6-954a-293be3714d7d",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 180,
+      "height": 180,
+      "rawWidth": 180,
+      "rawHeight": 180,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/DefaultBoyAvatar.jpg


+ 36 - 0
assets/Textures/Matching/DefaultBoyAvatar.jpg.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "c58acfe2-244f-45e1-94fd-b84a9158e912",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 200,
+  "height": 200,
+  "platformSettings": {},
+  "subMetas": {
+    "DefaultBoyAvatar": {
+      "ver": "1.0.4",
+      "uuid": "b1d7f839-2cf1-4084-bbd5-c62ec513e7bc",
+      "rawTextureUuid": "c58acfe2-244f-45e1-94fd-b84a9158e912",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 200,
+      "height": 200,
+      "rawWidth": 200,
+      "rawHeight": 200,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/DefaultGirlAvatar.jpg


+ 36 - 0
assets/Textures/Matching/DefaultGirlAvatar.jpg.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "b4fb0d14-c70d-4742-8d0a-a05c9ab3e8e0",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 200,
+  "height": 200,
+  "platformSettings": {},
+  "subMetas": {
+    "DefaultGirlAvatar": {
+      "ver": "1.0.4",
+      "uuid": "a5b19591-8257-4fe1-a5de-b30caea0a5a0",
+      "rawTextureUuid": "b4fb0d14-c70d-4742-8d0a-a05c9ab3e8e0",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 200,
+      "height": 200,
+      "rawWidth": 200,
+      "rawHeight": 200,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/DownMeteor.png


+ 36 - 0
assets/Textures/Matching/DownMeteor.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "1565bdf1-8814-46fc-81f5-c70c2c9e70eb",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 404,
+  "height": 7,
+  "platformSettings": {},
+  "subMetas": {
+    "DownMeteor": {
+      "ver": "1.0.4",
+      "uuid": "d252255c-f832-4e24-82bd-04e34085de70",
+      "rawTextureUuid": "1565bdf1-8814-46fc-81f5-c70c2c9e70eb",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 404,
+      "height": 7,
+      "rawWidth": 404,
+      "rawHeight": 7,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/Girl.png


+ 36 - 0
assets/Textures/Matching/Girl.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "58c0205c-57da-4b77-a951-8e1b7890871e",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 28,
+  "height": 31,
+  "platformSettings": {},
+  "subMetas": {
+    "Girl": {
+      "ver": "1.0.4",
+      "uuid": "bd899779-6d48-480f-afee-9749958511fe",
+      "rawTextureUuid": "58c0205c-57da-4b77-a951-8e1b7890871e",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 28,
+      "height": 31,
+      "rawWidth": 28,
+      "rawHeight": 31,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/GirlAvatarStroke.png


+ 36 - 0
assets/Textures/Matching/GirlAvatarStroke.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "91b74928-1f37-4769-851e-a89b841dd01b",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 180,
+  "height": 180,
+  "platformSettings": {},
+  "subMetas": {
+    "GirlAvatarStroke": {
+      "ver": "1.0.4",
+      "uuid": "5f2e6a63-c568-462c-859f-61ea0527789c",
+      "rawTextureUuid": "91b74928-1f37-4769-851e-a89b841dd01b",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 180,
+      "height": 180,
+      "rawWidth": 180,
+      "rawHeight": 180,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/GrayTitleLine.png


+ 36 - 0
assets/Textures/Matching/GrayTitleLine.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "7c90e43e-1a05-4765-b088-a9710edc0043",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 440,
+  "height": 38,
+  "platformSettings": {},
+  "subMetas": {
+    "GrayTitleLine": {
+      "ver": "1.0.4",
+      "uuid": "5d0b6ca0-933e-450a-ad97-64cfa808fad0",
+      "rawTextureUuid": "7c90e43e-1a05-4765-b088-a9710edc0043",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -0.5,
+      "offsetY": -1.5,
+      "trimX": 11,
+      "trimY": 19,
+      "width": 417,
+      "height": 3,
+      "rawWidth": 440,
+      "rawHeight": 38,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 7 - 0
assets/Textures/Matching/LoadingDotAnimation.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "1f6875a9-46b0-4d10-9c62-d7b2800dbcf3",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

BIN
assets/Textures/Matching/LoadingDotAnimation/LoadingLeftDot.png


+ 36 - 0
assets/Textures/Matching/LoadingDotAnimation/LoadingLeftDot.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "23096e39-916d-4553-af60-75d685bf111c",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 19,
+  "height": 19,
+  "platformSettings": {},
+  "subMetas": {
+    "LoadingLeftDot": {
+      "ver": "1.0.4",
+      "uuid": "d57e9fdf-2fbf-4d31-8170-06e8ec564c79",
+      "rawTextureUuid": "23096e39-916d-4553-af60-75d685bf111c",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 19,
+      "height": 19,
+      "rawWidth": 19,
+      "rawHeight": 19,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/LoadingDotAnimation/LoadingMiddleDot.png


+ 36 - 0
assets/Textures/Matching/LoadingDotAnimation/LoadingMiddleDot.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "d2454d2e-aaba-445c-9cd0-6bdde39fad96",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 19,
+  "height": 19,
+  "platformSettings": {},
+  "subMetas": {
+    "LoadingMiddleDot": {
+      "ver": "1.0.4",
+      "uuid": "6afe5901-8c94-41f1-b2a1-4d7329f77c32",
+      "rawTextureUuid": "d2454d2e-aaba-445c-9cd0-6bdde39fad96",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 19,
+      "height": 19,
+      "rawWidth": 19,
+      "rawHeight": 19,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/LoadingDotAnimation/LoadingRightDot.png


+ 36 - 0
assets/Textures/Matching/LoadingDotAnimation/LoadingRightDot.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "a2a77f35-c327-4795-a1e5-b261ed4687e2",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 19,
+  "height": 19,
+  "platformSettings": {},
+  "subMetas": {
+    "LoadingRightDot": {
+      "ver": "1.0.4",
+      "uuid": "0b9e2cd7-8c98-4c4a-bce6-98ee4e4389b5",
+      "rawTextureUuid": "a2a77f35-c327-4795-a1e5-b261ed4687e2",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 19,
+      "height": 19,
+      "rawWidth": 19,
+      "rawHeight": 19,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 7 - 0
assets/Textures/Matching/MatchingAnimation.meta

@@ -0,0 +1,7 @@
+{
+  "ver": "1.0.1",
+  "uuid": "ee8f5c84-db85-4f39-be6f-bdda499a23ad",
+  "isSubpackage": false,
+  "subpackageName": "",
+  "subMetas": {}
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_00.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_00.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "ed8d7da7-cb13-4548-96cc-d92d776f056f",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_00": {
+      "ver": "1.0.4",
+      "uuid": "aa8342b8-1f07-497b-8983-78cd428c6268",
+      "rawTextureUuid": "ed8d7da7-cb13-4548-96cc-d92d776f056f",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -0.5,
+      "offsetY": 0,
+      "trimX": 101,
+      "trimY": 102,
+      "width": 314,
+      "height": 312,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_01.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_01.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "49438681-0137-4050-a7d8-c14a706b7caa",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_01": {
+      "ver": "1.0.4",
+      "uuid": "12fb674b-2ff1-48a1-84b0-23a7002d00ce",
+      "rawTextureUuid": "49438681-0137-4050-a7d8-c14a706b7caa",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 99,
+      "trimY": 98,
+      "width": 320,
+      "height": 320,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_02.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_02.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "238ae69e-0241-4c02-8449-97c262c55fb4",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_02": {
+      "ver": "1.0.4",
+      "uuid": "bbab860c-8f33-4a4d-b4b5-172c5bbf22a9",
+      "rawTextureUuid": "238ae69e-0241-4c02-8449-97c262c55fb4",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 96,
+      "trimY": 95,
+      "width": 326,
+      "height": 326,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_03.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_03.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "adc3a427-13db-4a63-9e7e-3f141b1f622e",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_03": {
+      "ver": "1.0.4",
+      "uuid": "ea419db9-f672-4f43-bf59-170ee671736c",
+      "rawTextureUuid": "adc3a427-13db-4a63-9e7e-3f141b1f622e",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 93,
+      "trimY": 92,
+      "width": 332,
+      "height": 332,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_04.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_04.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "a00197b6-2b2e-4ad6-9d91-8537d723c9a5",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_04": {
+      "ver": "1.0.4",
+      "uuid": "7d330fc7-1e78-4c30-9f1e-2ef73baa8c0d",
+      "rawTextureUuid": "a00197b6-2b2e-4ad6-9d91-8537d723c9a5",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 90,
+      "trimY": 89,
+      "width": 338,
+      "height": 338,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_05.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_05.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "3c0c9988-e203-47f6-8772-dccfb7298ebf",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_05": {
+      "ver": "1.0.4",
+      "uuid": "afe18ddf-c6fd-473c-b8d0-bb05babe0025",
+      "rawTextureUuid": "3c0c9988-e203-47f6-8772-dccfb7298ebf",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 87,
+      "trimY": 86,
+      "width": 344,
+      "height": 344,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_06.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_06.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "919747e7-6977-49dd-9321-2493ba794fb4",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_06": {
+      "ver": "1.0.4",
+      "uuid": "5a8e82c2-073a-4ad7-bd42-3634f76650a1",
+      "rawTextureUuid": "919747e7-6977-49dd-9321-2493ba794fb4",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 84,
+      "trimY": 83,
+      "width": 350,
+      "height": 350,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_07.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_07.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "c0f063f1-31e7-492c-a1c4-ac95de6d3de1",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_07": {
+      "ver": "1.0.4",
+      "uuid": "29294db3-0005-41a7-9371-2bd826ed9742",
+      "rawTextureUuid": "c0f063f1-31e7-492c-a1c4-ac95de6d3de1",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 81,
+      "trimY": 80,
+      "width": 356,
+      "height": 356,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_08.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_08.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "410252cb-601c-4953-b7b9-b95c5c061a9c",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_08": {
+      "ver": "1.0.4",
+      "uuid": "fffbc2cd-31a0-4813-bf88-30ab2fa9ed90",
+      "rawTextureUuid": "410252cb-601c-4953-b7b9-b95c5c061a9c",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 78,
+      "trimY": 77,
+      "width": 362,
+      "height": 362,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_09.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_09.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "75e9a4e3-babc-4138-9686-7d63cf9eed36",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_09": {
+      "ver": "1.0.4",
+      "uuid": "f107d392-5ed6-4d18-821a-cbba64ffc55d",
+      "rawTextureUuid": "75e9a4e3-babc-4138-9686-7d63cf9eed36",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 75,
+      "trimY": 74,
+      "width": 368,
+      "height": 368,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_10.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_10.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "1b3408e7-c7df-4fc9-abb5-dfafb31ba0fc",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_10": {
+      "ver": "1.0.4",
+      "uuid": "19e4fcf7-2d8a-401c-b3fc-bbdf2e152bb5",
+      "rawTextureUuid": "1b3408e7-c7df-4fc9-abb5-dfafb31ba0fc",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 72,
+      "trimY": 71,
+      "width": 374,
+      "height": 374,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_11.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_11.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "819f97ea-eae1-4bdb-b845-a8e7b4b7cec8",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_11": {
+      "ver": "1.0.4",
+      "uuid": "27a87ed5-b244-4d9a-a669-cfbe03519d03",
+      "rawTextureUuid": "819f97ea-eae1-4bdb-b845-a8e7b4b7cec8",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 69,
+      "trimY": 68,
+      "width": 380,
+      "height": 380,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_12.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_12.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "0e266a5e-a89f-45ba-a2b5-f3b554b48148",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_12": {
+      "ver": "1.0.4",
+      "uuid": "458b964e-439a-43be-9077-31cfcfa7a62e",
+      "rawTextureUuid": "0e266a5e-a89f-45ba-a2b5-f3b554b48148",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 66,
+      "trimY": 65,
+      "width": 386,
+      "height": 386,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_13.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_13.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "97688c4e-b13c-4688-8da1-392a24831cb2",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_13": {
+      "ver": "1.0.4",
+      "uuid": "99787e05-ad2b-447f-b1fe-afb4b7b85b70",
+      "rawTextureUuid": "97688c4e-b13c-4688-8da1-392a24831cb2",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 63,
+      "trimY": 62,
+      "width": 392,
+      "height": 392,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_14.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_14.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "a7b51525-4433-4ad5-b1b4-927fabe2c00f",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_14": {
+      "ver": "1.0.4",
+      "uuid": "16d5bb07-f8ce-46b9-ade8-1f1dfc5af53c",
+      "rawTextureUuid": "a7b51525-4433-4ad5-b1b4-927fabe2c00f",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 59,
+      "trimY": 58,
+      "width": 400,
+      "height": 400,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Textures/Matching/MatchingAnimation/paopao-animation_15.png


+ 36 - 0
assets/Textures/Matching/MatchingAnimation/paopao-animation_15.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.4",
+  "uuid": "bc70c57d-78f2-47ec-9bb8-abe231c8ddd2",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 517,
+  "height": 516,
+  "platformSettings": {},
+  "subMetas": {
+    "paopao-animation_15": {
+      "ver": "1.0.4",
+      "uuid": "fcbf7bc1-1f9b-443d-822c-76a73611aa3e",
+      "rawTextureUuid": "bc70c57d-78f2-47ec-9bb8-abe231c8ddd2",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0.5,
+      "offsetY": 0,
+      "trimX": 56,
+      "trimY": 55,
+      "width": 406,
+      "height": 406,
+      "rawWidth": 517,
+      "rawHeight": 516,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

Неке датотеке нису приказане због велике количине промена