Ver Fonte

feat: NotaWalk

chenjixiang há 1 ano atrás
pai
commit
d4619970c3
100 ficheiros alterados com 4166 adições e 4 exclusões
  1. 54 0
      .gitignore
  2. 4 0
      .prettierignore
  3. 29 0
      .prettierrc
  4. 21 4
      README.md
  5. 13 0
      assets/Scene.meta
  6. 1045 0
      assets/Scene/Loading.fire
  7. 8 0
      assets/Scene/Loading.fire.meta
  8. 379 0
      assets/Scene/Main.fire
  9. 8 0
      assets/Scene/Main.fire.meta
  10. 13 0
      assets/Script.meta
  11. 13 0
      assets/Script/BaseComponent.meta
  12. 22 0
      assets/Script/BaseComponent/BaseUI.ts
  13. 10 0
      assets/Script/BaseComponent/BaseUI.ts.meta
  14. 21 0
      assets/Script/BaseComponent/BaseUIinterface.ts
  15. 10 0
      assets/Script/BaseComponent/BaseUIinterface.ts.meta
  16. 13 0
      assets/Script/GameMain.meta
  17. 450 0
      assets/Script/GameMain/GameMain.ts
  18. 10 0
      assets/Script/GameMain/GameMain.ts.meta
  19. 40 0
      assets/Script/Loading.ts
  20. 10 0
      assets/Script/Loading.ts.meta
  21. 13 0
      assets/Script/Main.meta
  22. 47 0
      assets/Script/Main.ts
  23. 10 0
      assets/Script/Main.ts.meta
  24. 85 0
      assets/Script/Main/MainHome.ts
  25. 10 0
      assets/Script/Main/MainHome.ts.meta
  26. 399 0
      assets/Script/Main/SongSelector.ts
  27. 10 0
      assets/Script/Main/SongSelector.ts.meta
  28. 13 0
      assets/Script/Manager.meta
  29. 13 0
      assets/Script/Manager/core.meta
  30. 55 0
      assets/Script/Manager/core/EventManager.ts
  31. 10 0
      assets/Script/Manager/core/EventManager.ts.meta
  32. 52 0
      assets/Script/Manager/core/PlaySoundManager.ts
  33. 10 0
      assets/Script/Manager/core/PlaySoundManager.ts.meta
  34. 76 0
      assets/Script/Manager/core/PrefabManager.ts
  35. 10 0
      assets/Script/Manager/core/PrefabManager.ts.meta
  36. 11 0
      assets/Script/Manager/core/UIID.ts
  37. 10 0
      assets/Script/Manager/core/UIID.ts.meta
  38. 13 0
      assets/Script/Utiles.meta
  39. 203 0
      assets/Script/Utiles/CCUtils.ts
  40. 10 0
      assets/Script/Utiles/CCUtils.ts.meta
  41. 51 0
      assets/Script/Utiles/Utiles.ts
  42. 10 0
      assets/Script/Utiles/Utiles.ts.meta
  43. 13 0
      assets/Texture.meta
  44. 13 0
      assets/Texture/Avatar.meta
  45. BIN
      assets/Texture/Avatar/musician.png
  46. 38 0
      assets/Texture/Avatar/musician.png.meta
  47. BIN
      assets/Texture/Avatar/win.png
  48. 38 0
      assets/Texture/Avatar/win.png.meta
  49. 13 0
      assets/Texture/Common.meta
  50. 13 0
      assets/Texture/Common/button.meta
  51. BIN
      assets/Texture/Common/button/btn_next.png
  52. 38 0
      assets/Texture/Common/button/btn_next.png.meta
  53. BIN
      assets/Texture/Common/logo-removebg.png
  54. 38 0
      assets/Texture/Common/logo-removebg.png.meta
  55. BIN
      assets/Texture/Common/logo-removebg2.png
  56. 38 0
      assets/Texture/Common/logo-removebg2.png.meta
  57. BIN
      assets/Texture/Common/logo.png
  58. 38 0
      assets/Texture/Common/logo.png.meta
  59. 13 0
      assets/Texture/Spine.meta
  60. 13 0
      assets/Texture/Spine/changeBg.meta
  61. 13 0
      assets/Texture/Spine/changeBg/caidian2.atlas
  62. 6 0
      assets/Texture/Spine/changeBg/caidian2.atlas.meta
  63. 1 0
      assets/Texture/Spine/changeBg/caidian2.json
  64. 10 0
      assets/Texture/Spine/changeBg/caidian2.json.meta
  65. BIN
      assets/Texture/Spine/changeBg/caidian2.png
  66. 38 0
      assets/Texture/Spine/changeBg/caidian2.png.meta
  67. 13 0
      assets/Texture/Spine/gameStar.meta
  68. 48 0
      assets/Texture/Spine/gameStar/yxbj01.atlas
  69. 6 0
      assets/Texture/Spine/gameStar/yxbj01.atlas.meta
  70. 1 0
      assets/Texture/Spine/gameStar/yxbj01.json
  71. 10 0
      assets/Texture/Spine/gameStar/yxbj01.json.meta
  72. BIN
      assets/Texture/Spine/gameStar/yxbj01.png
  73. 38 0
      assets/Texture/Spine/gameStar/yxbj01.png.meta
  74. 13 0
      assets/Texture/Spine/gameStar/yxbj02.atlas
  75. 6 0
      assets/Texture/Spine/gameStar/yxbj02.atlas.meta
  76. 1 0
      assets/Texture/Spine/gameStar/yxbj02.json
  77. 10 0
      assets/Texture/Spine/gameStar/yxbj02.json.meta
  78. BIN
      assets/Texture/Spine/gameStar/yxbj02.png
  79. 38 0
      assets/Texture/Spine/gameStar/yxbj02.png.meta
  80. 48 0
      assets/Texture/Spine/gameStar/zjmxx.atlas
  81. 6 0
      assets/Texture/Spine/gameStar/zjmxx.atlas.meta
  82. 1 0
      assets/Texture/Spine/gameStar/zjmxx.json
  83. 10 0
      assets/Texture/Spine/gameStar/zjmxx.json.meta
  84. BIN
      assets/Texture/Spine/gameStar/zjmxx.png
  85. 38 0
      assets/Texture/Spine/gameStar/zjmxx.png.meta
  86. 13 0
      assets/Texture/Spine/jiazai.meta
  87. 48 0
      assets/Texture/Spine/jiazai/jiazai.atlas
  88. 6 0
      assets/Texture/Spine/jiazai/jiazai.atlas.meta
  89. 1 0
      assets/Texture/Spine/jiazai/jiazai.json
  90. 10 0
      assets/Texture/Spine/jiazai/jiazai.json.meta
  91. BIN
      assets/Texture/Spine/jiazai/jiazai.png
  92. 38 0
      assets/Texture/Spine/jiazai/jiazai.png.meta
  93. 13 0
      assets/Texture/Spine/lhz.meta
  94. 27 0
      assets/Texture/Spine/lhz/dayan.atlas
  95. 6 0
      assets/Texture/Spine/lhz/dayan.atlas.meta
  96. 1 0
      assets/Texture/Spine/lhz/dayan.json
  97. 10 0
      assets/Texture/Spine/lhz/dayan.json.meta
  98. BIN
      assets/Texture/Spine/lhz/dayan.png
  99. 38 0
      assets/Texture/Spine/lhz/dayan.png.meta
  100. 0 0
      assets/Texture/Spine/lhz/feiji.atlas

+ 54 - 0
.gitignore

@@ -0,0 +1,54 @@
+#/////////////////////////////////////////////////////////////////////////////
+# 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/
+*.history

+ 4 - 0
.prettierignore

@@ -0,0 +1,4 @@
+lib/
+build/
+
+*.html

+ 29 - 0
.prettierrc

@@ -0,0 +1,29 @@
+{
+	"semi": true,
+	"bracketSpacing": true,
+	"jsxBracketSameLine": true,
+	"tabWidth": 4,
+	"useTabs": false,
+	"singleQuote": true,
+	"printWidth": 1000,
+	"tslintIntegration":true,
+	"eslintIntegration": false,
+	"stylelintIntegration": false,
+	"disableLanguages": ["vue"],
+	"overrides": [
+		{
+			"files": ["*.json", ".eslintrc", ".tslintrc", ".prettierrc", ".tern-project"],
+			"options": {
+				"parser": "json"
+			}
+		},
+		{
+			"files": ["*.ts", "*.tsx"],
+			"options": {
+				"parser": "typescript",
+				"quoteProps":"as-needed"
+				
+			}
+		}
+	]
+}

+ 21 - 4
README.md

@@ -1,5 +1,22 @@
-# NoteWalk
+### 作者 JackChen
+# Note-Walk
+### 游戏名 音符漫步
 
-NoteWalk-音符漫步
-为Slot养号做准备
-cocos版本2.4.8
+
+```bash
+$ npm i
+$ npm run lint
+```
+
+# cocos creator 2.4.8
+
+# 一款音乐类游戏
+```
+当你进入 "音符漫步" 游戏时,你将会踏上一段充满探险和音乐的旅程。你将会发现一个神奇的世界,那里有着美妙的音乐和各种各样的音符等着你去探索。
+
+这个游戏的背景是基于古典音乐中音符的重要性和音乐的旅程。在古典音乐中,音符是构成美妙旋律的基本单元。而 "漫步" 这个词则传达了一种轻松、愉悦、探索和发现的感觉,这与探索音乐中的旅程是相符的。因此,"音符漫步" 这个名称意味着玩家将探索音乐的世界,发现不同的旋律和音符,同时享受探险的过程。
+
+在游戏中,你将会进行各种各样的任务和挑战,每个任务都将带你进入一个新的场景,让你体验不同的音乐风格和旋律。你需要通过完成不同的关卡和任务,收集音符和解锁新的关卡,最终成为一个真正的音乐大师。
+
+"音符漫步" 是一个带有音乐元素的探险游戏,它的名字寓意着玩家将探索音乐世界,享受探险的过程,并成为一个真正的音乐大师。希望你能在游戏中享受探险和音乐的乐趣!
+```

+ 13 - 0
assets/Scene.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "52db13c4-3ad6-460a-bda3-8c15f5ee6626",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1045 - 0
assets/Scene/Loading.fire


+ 8 - 0
assets/Scene/Loading.fire.meta

@@ -0,0 +1,8 @@
+{
+  "ver": "1.3.2",
+  "uuid": "c2ba25e1-f77c-4da9-b438-eebef14e38dd",
+  "importer": "scene",
+  "asyncLoadAssets": false,
+  "autoReleaseAssets": false,
+  "subMetas": {}
+}

+ 379 - 0
assets/Scene/Main.fire

@@ -0,0 +1,379 @@
+[
+  {
+    "__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": "a6c2c220-d723-48dd-9dc9-44f533660ee9"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Canvas",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 1
+    },
+    "_children": [
+      {
+        "__id__": 3
+      },
+      {
+        "__id__": 5
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 7
+      },
+      {
+        "__id__": 8
+      },
+      {
+        "__id__": 9
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 750,
+      "height": 1624
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_trs": {
+      "__type__": "TypedArray",
+      "ctor": "Float64Array",
+      "array": [
+        375,
+        812,
+        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": "c8KShI0FNGHaKSK7YB2wRR"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "Main Camera",
+    "_objFlags": 512,
+    "_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": 750,
+      "height": 1624
+    },
+    "_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": "48yFSGfztHyIs4ZSs7bPTV"
+  },
+  {
+    "__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": "d8l+Wl3ANKsJHHvK2Nn78b"
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "windowsLayer",
+    "_objFlags": 0,
+    "_parent": {
+      "__id__": 2
+    },
+    "_children": [],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 6
+      }
+    ],
+    "_prefab": null,
+    "_opacity": 255,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 750,
+      "height": 1624
+    },
+    "_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": "a03Bpt4x1J3Z6/zPYyJVYP"
+  },
+  {
+    "__type__": "cc.Widget",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 5
+    },
+    "_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": 750,
+    "_originalHeight": 1624,
+    "_id": "0cB1WXfWhPk6myF3nLBxqS"
+  },
+  {
+    "__type__": "cc.Canvas",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "_designResolution": {
+      "__type__": "cc.Size",
+      "width": 750,
+      "height": 1624
+    },
+    "_fitWidth": true,
+    "_fitHeight": false,
+    "_id": "52iKLYZxVJIK5mTD+Syqk0"
+  },
+  {
+    "__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": "03+SC1B5xF1qARGq+OPH2Z"
+  },
+  {
+    "__type__": "ca16e0T4KBOk5Tk2Gah3y5j",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "_id": "b05roSDYBDa4xcTBUCmOGR"
+  }
+]

+ 8 - 0
assets/Scene/Main.fire.meta

@@ -0,0 +1,8 @@
+{
+  "ver": "1.3.2",
+  "uuid": "a6c2c220-d723-48dd-9dc9-44f533660ee9",
+  "importer": "scene",
+  "asyncLoadAssets": false,
+  "autoReleaseAssets": false,
+  "subMetas": {}
+}

+ 13 - 0
assets/Script.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "006ae8f2-fcbf-4acd-98d9-b1b7d0b3f15a",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/Script/BaseComponent.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "9fd5fb19-c449-4eee-870d-91a11913d0d4",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 22 - 0
assets/Script/BaseComponent/BaseUI.ts

@@ -0,0 +1,22 @@
+import BaseUIinterface from "./BaseUIinterface";
+
+/**
+ * 基础UI类
+ *
+ * @class BaseUI
+ * @implements {BaseUIinterface}
+ */
+
+
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+class  BaseUI implements BaseUIinterface {
+    public onLoad(): void {
+        console.log('==================onLoad==================');
+    }
+
+    public start(): void {
+        console.log('==================start==================');
+    }
+}

+ 10 - 0
assets/Script/BaseComponent/BaseUI.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "6780abe6-048e-4af1-b1f2-f7e7f1d95494",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 21 - 0
assets/Script/BaseComponent/BaseUIinterface.ts

@@ -0,0 +1,21 @@
+
+export default class BaseUIinterface {
+
+    // LIFE-CYCLE CALLBACKS:
+
+    onLoad () {
+        console.log('==================onLoad==================');
+    }
+
+    start () {
+        console.log('==================start==================');
+    }
+
+    // 入口
+
+    // 出口
+
+    // 重新再来
+
+    // update (dt) {}  
+}

+ 10 - 0
assets/Script/BaseComponent/BaseUIinterface.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "58093afb-d4ea-43d3-9a95-6f629354265b",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 13 - 0
assets/Script/GameMain.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "50f87ea8-ad36-4ff6-91ef-72b334dd0fe5",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 450 - 0
assets/Script/GameMain/GameMain.ts

@@ -0,0 +1,450 @@
+import PlaySoundManager from '../Manager/core/PlaySoundManager';
+import CCUtils from '../Utiles/CCUtils';
+import Utiles from '../Utiles/Utiles';
+
+/** @type {*} */
+const { ccclass, property } = cc._decorator;
+
+/**
+ *  游戏类型
+ */
+export enum GameType {
+    /** 节奏练习 */
+    Rhythmexercises = 1,
+    /** 节奏大师 */
+    RhythmMaster = 2,
+}
+
+/**
+ * 游戏状态
+ *
+ * @export
+ * @enum {number}
+ */
+export enum GameStatus {
+    /** 游戏未开始 */
+    GameNotStart = 1,
+    /** 游戏开始 */
+    GameStart = 2,
+    /** 游戏结束 */
+    GameOver = 3,
+}
+
+/**
+ * 游戏核心逻辑
+ *
+ * @export
+ * @class GameMain
+ * @extends {cc.Component}
+ */
+@ccclass
+export default class GameMain extends cc.Component {
+    @property(cc.Node)
+    private ball: cc.Node = null;
+    /** 移动速度 */
+    private speed: number = 800;
+    /** 当前背景 */
+    private curBg: cc.Node = null;
+    /** 监听触摸层 */
+    private touchLayer: cc.Node = null;
+
+    private noteNodes: cc.Node[] = [];
+
+    private noteIndex: number = 0;
+
+    private createIndex: number = 0;
+
+    /** 音符持续时间 */
+    private songTimes: Array<number> = [];
+
+    private sunTime: number = 0;
+
+    private curClip: cc.AudioClip = null;
+
+    private errorScope: number = 400;
+
+    public notePool: any = null;
+
+    public recycelIndex: number = 0;
+
+    public mapLayer: cc.Node = null;
+
+    public gameIsOver: boolean = false;
+    // LIFE-CYCLE CALLBACKS:
+    /** 飘分 */
+    public scoreLabel: cc.Node = null;
+    public sumScoreLabel: cc.Node = null;
+
+    public addScoreNum: number = 20;
+    public sumScoreNum: number = 0;
+
+    public failNode: cc.Node = null;
+
+    public gameStartBtn: cc.Node= null;
+
+    onLoad() {
+        this.createNotes();
+        this.node.opacity = 50;
+        this.touchLayer = CCUtils.findChild(this.node, 'touchLayer');
+        this.scoreLabel = CCUtils.findChild(this.node, 'Camera/scoreLabel');
+        this.scoreLabel.getComponent(cc.Label).string = `+${this.addScoreNum}`;
+        this.sumScoreLabel = CCUtils.findChild(this.node, 'Camera/sumScoreLabel');
+        this.sumScoreLabel.getComponent(cc.Label).string = this.sumScoreNum + '';
+        this.failNode = CCUtils.findChild(this.node, 'failNode');
+        this.failNode.active = false;
+        this.touchLayer.on(cc.Node.EventType.TOUCH_START, this.onTouchBegan.bind(this), this);
+        this.touchLayer.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMoved.bind(this), this);
+        this.touchLayer.on(cc.Node.EventType.TOUCH_END, this.onTouchEnded.bind(this), this);
+        this.touchLayer.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchEnded.bind(this), this);
+        this.gameStartBtn = CCUtils.findChild(this.node, 'lockGame/gameStart');
+
+        cc.tween(this.node).to(0.8, { opacity: 255 }).start();
+        this.gameStartBtn.y = 1200;
+        this.gameStartBtn.scale = 0.8;
+        cc.tween(this.gameStartBtn).to(0.4, { y: -70, scale: 1 }).to(0.1, { y: 10, scale: 0.9 }).to(0.12, { y: 0 , scale: 1}).start();
+    }
+
+    protected onEnable(): void {
+        this.curBg = CCUtils.findChild(this.node, 'Camera/bgNode/bg1');
+        this.mapLayer = CCUtils.findChild(this.node, 'mapLayer');
+        this.songTimes = Utiles.getSongTimes();
+        PlaySoundManager.getInstance().loadSound('sound/gameSong/0', (clip: any): void => {
+            this.curClip = clip;
+            console.log('this.curClip: ', this.curClip);
+            this.gameStartBtn.on('click', this.gameStart, this);
+        });
+        this.resetGameData();
+        this.addOnEvent();
+        this.resetBallState();
+        this.initNotePos();
+    }
+
+    protected onDisable(): void {
+        this.gameStartBtn.off('click', this.gameStart, this);
+        this.clearNotes();
+    }
+
+    public updateScore(): void {
+        this.sumScoreNum += this.addScoreNum;
+        this.sumScoreLabel.getComponent(cc.Label).string = this.sumScoreNum + '';
+    }
+
+    public resetGameData(): void {
+        this.mapLayer.y = -186.621;
+        this.sunTime = 0;
+        this.noteIndex = 0;
+        this.createIndex = 0;
+        this.recycelIndex = 0;
+        this.gameIsOver = false;
+        this.addScoreNum = 20;
+        this.sumScoreNum = 0;
+    }
+
+    public clearNotes(): void {
+        for (let i = 0; i < this.noteNodes.length; i++) {
+            this.removeNote(this.noteNodes[i]);
+        }
+        this.noteNodes = [];
+    }
+
+    public addOnEvent(): void {}
+
+    /**
+     * 开始游戏
+     *
+     * @memberof GameMain
+     */
+    public gameStart(): void {
+        console.log('this.songTimes.length: ', this.songTimes.length);
+        this.musicPlay();
+        this.schedule(this.updateGame);
+        CCUtils.findChild(this.node, 'lockGame').active = false;
+    }
+
+    public musicPlay(): void {
+        PlaySoundManager.getInstance().playSound(this.curClip, false);
+    }
+
+    public updateGame(dt): void {
+        const offY: number = this.speed * dt;
+        this.ball.parent.y += offY;
+        if (this.noteIndex <= this.songTimes.length - 1) {
+            if (this.noteNodes[this.noteIndex] != null) {
+                // console.log('====this.noteIndex===: ', this.noteIndex);
+                const worldPos1: cc.Vec2 = this.ball.parent.convertToWorldSpaceAR(cc.Vec2.ZERO);
+                const worldPos2: cc.Vec2 = this.noteNodes[this.noteIndex].convertToWorldSpaceAR(cc.Vec2.ZERO);
+                // console.log('worldPos2: ', worldPos2.y);
+                if (worldPos1.y >= worldPos2.y + this.errorScope) {
+                    // console.log('===updateGame: ', this.noteIndex);
+                    // this.noteNodes[this.noteIndex]['flag'] = false;
+                    this.noteIndex++;
+                    console.log('=============+++++');
+                    // alert('游戏结束');
+                    this.updateNotePos();
+                }
+            } else {
+                this.gameOver();
+            }
+        }
+    }
+
+    public createNotes(): void {
+        // 创建对象池
+        const initNumber: number = 20;
+        this.notePool = new cc.NodePool();
+        for (let i: number = 0; i < initNumber; ++i) {
+            const enemy: any = cc.instantiate(CCUtils.findChild(this.node, 'note'));
+            this.notePool.put(enemy);
+        }
+    }
+
+    /**
+     * 初始化音符坐标
+     *
+     * @memberof GameMain
+     */
+    public initNotePos(): void {
+        for (let i: number = 0; i < 20; i++) {
+            this.addNote();
+        }
+    }
+
+    public addNote(): void {
+        if (!this.songTimes) return;
+        const node: cc.Node = this.getNote();
+        node.active = true;
+        node.parent = this.mapLayer;
+        this.sunTime += this.songTimes[this.createIndex];
+        // 转弯
+        if (this.noteNodes.length == 0 || (this.noteNodes[this.noteNodes.length - 1].x = 10)) {
+            node.x = -10;
+        } else {
+            node.x = 10;
+        }
+        CCUtils.findChild(node, 'noteSp').getComponent(sp.Skeleton).setAnimation(0, '01', false);
+        const num: number = Number(this.sunTime.toFixed(2));
+        node.y = this.speed * num;
+        this.noteNodes.push(node);
+        this.createIndex++;
+    }
+
+    /**
+     * 移除音符节点
+     *
+     * @memberof RhythmexercisesDriver
+     */
+    private removeNote(node: cc.Node): void {
+        // console.log('node;', node);
+        if (node == null) return;
+        CCUtils.findChild(node, 'noteSp').getComponent(sp.Skeleton).setAnimation(0, '02', false);
+        node.active = false;
+        this.notePool.put(node);
+    }
+
+    public updateNotePos(): void {
+        if (this.noteIndex > 10) {
+            if (this.createIndex >= this.songTimes.length) {
+                console.warn('音符生成完毕', this.createIndex, ' this.songTimes.length: ', this.songTimes.length);
+                return;
+            }
+            this.removeNote(this.noteNodes[this.recycelIndex++]);
+            this.addNote();
+        }
+
+        // this.noteIndex
+        // for (let i: number = 0; i < this.noteNodes.length; i++) {
+        //     // 找到已经过去的音符
+        //     // console.log('flag', this.noteNodes[i]['flag']);
+        //     const node: cc.Node = this.getNote();
+        //     if (!node['flag']) {
+        //         node['flag'] = true;
+        //         CCUtils.findChild(node, 'noteSp').getComponent(sp.Skeleton).setAnimation(0, '01', false);
+        //         this.sunTime += this.songTimes[this.createIndex];
+        //         const num: number = Number(this.sunTime.toFixed(2));
+        //         node.y = this.speed * num;
+        //         // ++this.createIndex;
+        //         return;
+        //     }
+        // }
+    }
+
+    /**
+     * 初始化球
+     *
+     * @memberof GameMain
+     */
+    public resetBallState(): void {
+        this.ball.x = -150;
+        this.ball.angle = 0;
+    }
+
+    /**
+     * 背景管理
+     *
+     * @private
+     * @memberof GameMain
+     */
+    private bgManager(): void {}
+
+    private changeBgColor(): void {
+        this.curBg.stopAllActions();
+        const c: cc.Color = cc.color(Utiles.random(50, 255), Utiles.random(50, 255), Utiles.random(50, 255));
+        cc.tween(this.curBg).delay(0.3).to(0.5, { color: c }).start();
+        CCUtils.findChild(this.ball.parent, 'changeBg').getComponent(sp.Skeleton).setAnimation(0, '01', false);
+    }
+    private changeBallDir(): void {
+        this.ball.stopAllActions();
+        this.ball.angle = 0;
+        const time: number = 0.05;
+        if (this.ball.x > 0) {
+            this.ball;
+            cc.tween(this.ball).to(time, { angle: -30, x: -150 }).to(time, { angle: 0 }).start();
+            // this.ball.x = -150;
+        } else {
+            cc.tween(this.ball).to(time, { angle: 30, x: 150 }).to(time, { angle: 0 }).start();
+            // this.ball.x = 150;
+        }
+        console.log('changeBallDir: ', this.ball.x);
+    }
+
+    private playNoteAnim(): void {
+        // this.noteNodes[this.noteIndex]['flag'] = false;
+        CCUtils.findChild(this.noteNodes[this.noteIndex], 'noteSp').getComponent(sp.Skeleton).setAnimation(0, '02', false);
+        this.scoreLabelAction();
+        this.noteIndex++;
+    }
+
+    /**
+     *  节奏判定
+     * @returns 
+     */
+    private onTouchBegan(): void {
+        if (this.gameIsOver) {
+            return;
+        } else {
+            // 判断是否碰到音符
+            if (this.noteNodes[this.noteIndex] != null) {
+                const worldPos1: cc.Vec2 = this.ball.parent.convertToWorldSpaceAR(cc.Vec2.ZERO);
+                const worldPos2: cc.Vec2 = this.noteNodes[this.noteIndex].convertToWorldSpaceAR(cc.Vec2.ZERO);
+                this.changeBallDir();
+                console.log('this.noteIndex: ', this.noteIndex);
+                // 判断是否在音符范围内,在的话,再播放动画
+                if (worldPos1.y >= worldPos2.y - 120 && worldPos1.y <= worldPos2.y + this.errorScope) {
+                    this.changeBgColor();
+                    this.playNoteAnim();
+
+                    this.updateNotePos();
+                    this.updateScore();
+                } else {
+                    this.gameOver();
+                }
+            } else {
+                this.gameOver();
+            }
+        }
+    }
+
+    private onTouchMoved(): void {}
+
+    private onTouchEnded(): void {}
+
+    /**
+     * 游戏结束
+     *
+     * @private
+     * @memberof GameMain
+     */
+    private gameOver(): void {
+        console.log('======debug===gameOver');
+        CCUtils.findChild(this.node, 'Camera').setPosition(cc.v2(0, 0));
+        this.gameFail();
+        cc.audioEngine.stopAllEffects();
+        CCUtils.findChild(this.node, 'lockGame').active = true;
+        this.unschedule(this.updateGame);
+        this.resetGameData();
+        this.resetBallState();
+        this.clearNotes();
+        this.initNotePos();
+    }
+
+    private gameFail(): void {
+        this.failNode.active = true;
+        this.playLoadingTextEffect(CCUtils.findChild(this.failNode, 'failLabel'), 0.08, ' FAIL \n 游戏结束');
+    }
+
+    private playLoadingTextEffect(node: cc.Node, t: number, str: string): void {
+        let strTemp: string = '';
+
+        for (let i: number = 0; i < str.length; i++) {
+            cc.tween(node)
+                .delay(t * i)
+                .call((): void => {
+                    strTemp += str[i];
+                    node.getComponent(cc.Label).string = strTemp;
+                })
+                .start();
+        }
+    }
+
+    /**
+     * 再来一次
+     *
+     * @private
+     * @memberof GameMain
+     */
+    private againGame(): void {
+        this.resetsGame();
+    }
+
+    /**
+     * 重置游戏数据
+     *
+     * @private
+     * @memberof GameMain
+     */
+    private resetsGame(): void {}
+
+    /**
+     * 从对象池获取音符
+     *
+     * @memberof RhythmexercisesNote
+     */
+    public getNote(): cc.Node {
+        let note: cc.Node = null;
+        if (this.notePool.size() > 0) {
+            note = this.notePool.get();
+        } else {
+            note = cc.instantiate(CCUtils.findChild(this.node, 'note'));
+        }
+
+        return note;
+    }
+
+    /**
+     * 回收到对象池
+     *
+     * @memberof RhythmexercisesNote
+     */
+    public recycleNote(node: cc.Node): void {
+        if (node == null) return;
+        this.notePool.put(node);
+    }
+
+    /**
+     * 清空对象池
+     *
+     * @memberof RhythmexercisesNote
+     */
+    public clearPool(): void {
+        this.notePool.clear();
+    }
+
+    public scoreLabelAction(): void {
+        this.scoreLabel.stopAllActions();
+        this.scoreLabel.active = true;
+        this.scoreLabel.opacity = 255;
+        this.scoreLabel.setPosition(cc.v2(0, -200));
+        this.scoreLabel.scale = 1;
+        cc.tween(this.scoreLabel).to(0.3, { scale: 1.5, x: 135, y: -140 }).to(0.2, { opacity: 0 }).start();
+    }
+}

+ 10 - 0
assets/Script/GameMain/GameMain.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "b7e4d49c-86bc-4c2e-96ed-8f069b55a3fd",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 40 - 0
assets/Script/Loading.ts

@@ -0,0 +1,40 @@
+// import playSoundManager from "./Utiles/playSoundManager";
+// import Utiles from "./Utiles/Utiles";
+
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class Loading extends cc.Component {
+    start() {
+        const str: string = 'Loading...';
+        const node: cc.Node = cc.find('label', this.node);
+        const node2: cc.Node = cc.find('label/label', this.node);
+
+        const t: number = 0.08;
+
+        this.playLoadingTextEffect(node, t, str);
+        this.playLoadingTextEffect(node2, t, str);
+        this.scheduleOnce((): void => {
+          const sceneName: string = "Main";
+          cc.director.loadScene(sceneName);
+        }, t * str.length + 0.3);
+
+        // 加载配置数据
+
+        // 加载音乐
+    }
+
+    private playLoadingTextEffect(node: cc.Node, t: number, str: string): void {
+        let strTemp: string = '';
+
+        for (let i: number = 0; i < str.length; i++) {
+            cc.tween(node)
+                .delay(t * i)
+                .call((): void => {
+                    strTemp += str[i];
+                    node.getComponent(cc.Label).string = strTemp;
+                })
+                .start();
+        }
+    }
+}

+ 10 - 0
assets/Script/Loading.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "97d062a0-f088-4eb7-a490-91ddf6818d62",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 13 - 0
assets/Script/Main.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "43862e20-40d4-4ab2-803c-70b0dfcabe48",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 47 - 0
assets/Script/Main.ts

@@ -0,0 +1,47 @@
+import { EventType, ObserverManager } from './Manager/core/EventManager';
+import PrefabManager from './Manager/core/PrefabManager';
+import { UIID } from './Manager/core/UIID';
+import CCUtils from './Utiles/CCUtils';
+
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class Main extends cc.Component {
+    public windowsLayer: cc.Node = null;
+
+    start() {}
+    protected onLoad(): void {}
+
+    /**
+     * 初始化
+     *
+     * @protected
+     * @memberof Main
+     */
+    protected onEnable(): void {
+        this.windowsLayer = CCUtils.findChild(this.node, 'windowsLayer');
+        // 打开主界面
+        PrefabManager.open(UIID.MainHome, this.windowsLayer);
+
+        PrefabManager.open(UIID.GameMainPrefab, this.windowsLayer, (node: cc.Node) => {
+            PrefabManager.close(node);
+        });
+        // 加载BGM
+
+        // 监听管理类
+        this.eventManager();
+    }
+
+    private eventManager(): void {
+        // 打开游戏界面
+        ObserverManager.addObserver(EventType.OpenGame, (data): void => {
+            this.openGame(data);
+        });
+    }
+
+    private openGame(data?: any): any {
+        // 打开游戏界面 data.index 表示第几首歌      
+        PrefabManager.close(UIID.MainHome);  
+        PrefabManager.open(UIID.GameMainPrefab, this.windowsLayer);
+    }
+}

+ 10 - 0
assets/Script/Main.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "ca16ed13-e0a0-4e93-94e4-d866a1df2e63",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 85 - 0
assets/Script/Main/MainHome.ts

@@ -0,0 +1,85 @@
+import { EventType, ObserverManager } from '../Manager/core/EventManager';
+import PrefabManager from '../Manager/core/PrefabManager';
+import { UIID } from '../Manager/core/UIID';
+import CCUtils from '../Utiles/CCUtils';
+
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class MainHome extends cc.Component {
+    /** 头部导航栏 */
+    private headNode: cc.Node = null;
+    /** 底部栏 */
+    private bottomNode: cc.Node = null;
+
+    /** selectPrefab */
+    private selectPrefab: cc.Node = null;
+
+    private storeBtn: cc.Node = null;
+
+    start() {}
+    protected onLoad(): void {}
+
+    /**
+     * 初始化
+     *
+     * @protected
+     * @memberof Main
+     */
+    protected onEnable(): void {
+        this.initComponent();
+        // 加载选择歌曲界面
+        PrefabManager.open(UIID.SongSelector, this.node, (node: cc.Node) => {
+            this.selectPrefab = node;
+            this.setZindex();
+        });
+        this.setAdaptation();
+
+
+    }
+
+    protected onDisable(): void {
+        ObserverManager.removeObserver(EventType.OpenGame);
+    }
+
+    /**
+     * 初始化组件
+     *
+     * @private
+     * @memberof MainHome
+     */
+    private initComponent(): void {
+        this.headNode = CCUtils.findChild(this.node, 'headLayer');
+        this.bottomNode = CCUtils.findChild(this.node, 'bottomLayer');
+        this.storeBtn = CCUtils.findChild(this.bottomNode, 'storeBtn');
+        var seq = cc.repeatForever(
+            cc.sequence(
+                cc.scaleTo(1, 0.9), 
+                cc.scaleTo(1, 1.0),
+                cc.jumpBy(1.0, cc.v2(0, 0), 20, 1)
+            )
+        );
+        this.storeBtn.runAction(seq);
+    }
+
+
+
+    private setZindex(): void {
+        this.headNode.zIndex = 1;
+        this.bottomNode.zIndex = 1;
+        this.selectPrefab.zIndex = 0;
+    }
+
+    /**
+     * 适配
+     *
+     * @private
+     * @memberof SongSelector
+     */
+    private setAdaptation(): void {
+        // 设置适配
+        const height: number = this.node.parent.height;
+        console.log('===height===', height);
+        this.headNode.y = height / 2;
+    }
+}

+ 10 - 0
assets/Script/Main/MainHome.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "4df251f7-2855-4a35-8d24-88ee698ce91a",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 399 - 0
assets/Script/Main/SongSelector.ts

@@ -0,0 +1,399 @@
+// import PrefabManager from '../Manager/core/PrefabManager';
+import { EventType, ObserverManager } from '../Manager/core/EventManager';
+import PrefabManager from '../Manager/core/PrefabManager';
+import { UIID } from '../Manager/core/UIID';
+import CCUtils from '../Utiles/CCUtils';
+import Utiles from '../Utiles/Utiles';
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class SongSelector extends cc.Component {
+    @property(cc.Prefab)
+    itemPrefab: cc.Prefab = null;
+
+    @property(cc.Node)
+    content: cc.Node = null;
+
+    /** 歌曲个数 可自定义 */
+    private _itemCount: number = 25;
+    /** 角度  */
+    private commonAngle: number = 0;
+    // 存储所有滚动元素的数组
+    private items: cc.Node[] = [];
+    /** 平均每首歌曲的弧度 */
+    private _rAngle: number = 45;
+    /** 圆的半径 */
+    private r: number = 0;
+    /** 圆的中心点在哪里 */
+    private _circle: cc.Vec2 = cc.v2(0, 0);
+    /** 当前显示在中心区域的元素下标 */
+    private tempIndex: number = 0;
+    /** 触摸层 */
+    private touchLayer: cc.Node = null;
+    /** 记录开始滑动坐标 */
+    private _BeganPos: cc.Vec2 = cc.v2(0, 0);
+    /** 最后滑动坐标 */
+    private _lastpos: cc.Vec2 = cc.v2(0, 0);
+    /** 是否在滑动 */
+    private _cartouch: boolean = false;
+    private _down: boolean = false;
+    /** 避免滑动过程中,点击进入游戏 */
+    private _clickTouch: boolean = true;
+
+    private _recentcardi: number = 0;
+
+    /** 选中时,容错范围 */
+    private faultPx: number = 20;
+
+    protected onLoad(): void {
+        this.setLinsten();
+        this.initList();
+    }
+
+    protected onEnable(): void {
+        this.node.opacity = 255;
+        this.schedule(this.updateMusicIconScale);
+    }
+
+    protected onDisable(): void {
+        // 取消歌曲ICON缩放帧事件
+        this.unschedule(this.updateMusicIconScale);
+    }
+
+    /**
+     * 监听触摸层
+     *
+     * @private
+     * @memberof SongSelector
+     */
+    private setLinsten(): void {
+        this.touchLayer = CCUtils.findChild(this.content, 'touchLayer');
+        this.touchLayer.on(cc.Node.EventType.TOUCH_START, this.onTouchBegan.bind(this), this);
+        this.touchLayer.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMoved.bind(this), this);
+        this.touchLayer.on(cc.Node.EventType.TOUCH_END, this.onTouchEnded.bind(this), this);
+        this.touchLayer.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchEnded.bind(this), this);
+    }
+
+    private initList(): void {
+        this.commonAngle = 360 / this._itemCount;
+        this.r = this._rAngle * this._itemCount;
+        this.faultPx = 31 - this._itemCount;
+        // this.r = 900;
+        /** 圆的半径偏左 50px*/
+        this._circle.x = (this.r - 50) * -1;
+        for (let i: number = 0; i < this._itemCount; i++) {
+            let item: cc.Node = cc.instantiate(this.itemPrefab);
+            item.parent = this.content;
+            CCUtils.getLabel(item, 'label').string = i.toString();
+            item.attr({ ao: i * this.commonAngle });
+            this.items.push(item);
+            item.setPosition(this.anglePos(item['ao']));
+        }
+
+        CCUtils.findChild(this.items[0], 'btn').runAction(cc.repeatForever(cc.rotateBy(12.0, 360)));
+    }
+
+    /**
+     * 根据角度返回坐标
+     * @param {*} angle 度数
+     */
+    private anglePos(angle: number): cc.Vec2 {
+        var r = this.r;
+        var x0 = this._circle.x;
+        var y0 = this._circle.y;
+        var ao = angle;
+        var x1 = x0 + r * Math.cos((ao * 3.14) / 180);
+        var y1 = y0 + r * Math.sin((ao * 3.14) / 180);
+        return cc.v2(x1, y1);
+    }
+
+    /**
+     * 检测歌曲是否在中心区域,自动缩放
+     *
+     * @param {*} dt
+     * @memberof SongSelector
+     */
+    updateMusicIconScale(dt): void {
+        for (let i: number = 0; i < this._itemCount; i++) {
+            const music: cc.Node = this.items[i];
+            const posy: number = music.y;
+            /** 为什么是-25,我也忘记了 */
+            var offesty = Math.abs(posy - 25);
+            /** 估计140也是需要调的 */
+            if (offesty < 140) {
+                this.tempIndex = i;
+                music.opacity = 255;
+                music.setScale(1.2 - (offesty / 140) * 0.55);
+                // TODO: 设置模式
+                // Module.difficulty = Module.selectGateDifficulty[Module._recentcardi];
+            } else {
+                music.opacity = 150;
+                music.setScale(0.5);
+            }
+        }
+    }
+
+    /**
+     * 触摸开始
+     *
+     * @param {*} event
+     * @return {*}
+     * @memberof SongSelector
+     */
+    private onTouchBegan(event: any): void {
+        // console.log("---start: " , this.gameFlag);
+        const position: cc.Vec2 = event.getLocation();
+        this._cartouch = true;
+        this._down = true;
+        this._lastpos = cc.v2(position.x, position.y);
+        this._BeganPos = cc.v2(position.x, position.y);
+    }
+
+    /**
+     *
+     *
+     * @private
+     * @param {*} event
+     * @return {*}  {void}
+     * @memberof SongSelector
+     */
+    private onTouchMoved(event: any): void {
+        // console.log("---onTouchMoved---: " , this._down);
+        if (!this._down) {
+            event.stopPropagation();
+            return;
+        }
+
+        var position = event.getLocation();
+        if (position.x + position.y == this._lastpos.x + this._lastpos.y) {
+            return;
+        }
+
+        this._clickTouch = false;
+        var offesty = position.y - this._lastpos.y;
+
+        // this.carPositionOff(0, offesty*1.3);
+        this.musicPositionOff(offesty * 0.2);
+        this._lastpos = position;
+    }
+
+    private updateUIColor(rgb: cc.Color): void {
+        console.warn('===rgb==', rgb);
+        this.updateColorAction(CCUtils.findChild(this.node.parent, 'bg') , rgb);
+        this.updateColorAction(CCUtils.findChild(this.node.parent, 'headLayer') , rgb);
+    }
+
+    private updateColorAction(node: cc.Node , rgb: cc.Color): void {
+        node.stopAllActions();
+        cc.tween(node)
+        .to(0.5, { color: rgb })
+        .start();
+    }
+
+    /**
+     * 滑动结束
+     *
+     * @private
+     * @param {*} event
+     * @return {*}  {void}
+     * @memberof SongSelector
+     */
+    private onTouchEnded(event: any): void {
+        var position = event.getLocation();
+        /** 是否点击组件内 */
+        if (!this.touchMusic(event)) {
+            
+            const rgb: cc.Color = cc.color(Utiles.random(100, 255), Utiles.random(100, 255), Utiles.random(100, 255));
+            this.updateUIColor(rgb);
+
+
+            //点击直接切换到该歌曲
+            if (position.x + position.y == this._BeganPos.x + this._BeganPos.y) {
+                var node = this.items[this.getId(this._recentcardi + 1)];
+                var node2 = this.items[this.getId(this._recentcardi - 1)];
+                var node3 = this.items[this.getId(this._recentcardi + 2)];
+                var node4 = this.items[this.getId(this._recentcardi - 2)];
+                console.log('node: ', node);
+                if (this.rectContainsPoint(node.getBoundingBoxToWorld(), event.getLocation())) {
+                    this.musicPositionOff(-150 * 0.2);
+                } else if (this.rectContainsPoint(node2.getBoundingBoxToWorld(), event.getLocation())) {
+                    this.musicPositionOff(150 * 0.2);
+                } else if (this.rectContainsPoint(node3.getBoundingBoxToWorld(), event.getLocation())) {
+                    this.musicPositionOff(-300 * 0.2);
+                } else if (this.rectContainsPoint(node4.getBoundingBoxToWorld(), event.getLocation())) {
+                    this.musicPositionOff(300 * 0.2);
+                } else {
+                    return;
+                }
+            }
+            // this._lastpos=position;
+            if (!this._down) {
+                event.stopPropagation();
+                return;
+            }
+            this._clickTouch = true;
+            this._down = false;
+            // this.carPostionSure();
+            this.musicMoveToChange();
+        }
+    }
+
+    /**
+     * 是否点击歌曲在组件内
+     *
+     * @private
+     * @param {*} event
+     * @return {*}  {void}
+     * @memberof SongSelector
+     */
+    private touchMusic(event: any): boolean {
+        if (this._clickTouch) {
+            var node = this.items[this._recentcardi];
+            if (this.rectContainsPoint(node.getBoundingBoxToWorld(), event.getLocation())) {
+                // 点击在组件内的操作
+                console.log('选中歌曲: ', this._recentcardi);
+                this.intoGameMain(this._recentcardi);
+
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 进入游戏核心玩法
+     *
+     * @private
+     * @memberof SongSelector
+     */
+    private intoGameMain(index: number): void {
+        cc.tween(this.node).to(0.5, { opacity: 50 }).call((): void => {
+            PrefabManager.close(this.node);
+            ObserverManager.notify(EventType.OpenGame, { index: this._recentcardi });
+        }).start();
+    }
+
+    /**
+     * 获取歌曲id
+     *
+     * @private
+     * @type {function(number)}
+     * @memberof SongSelector
+     */
+    private getId(number: number): number {
+        if (number > this._itemCount - 1) number = 0;
+        if (number < 0) number = this._itemCount - 1;
+        return number;
+    }
+
+    /**
+     * 滑动选择歌曲
+     *
+     * @private
+     * @param {*} val
+     * @memberof SongSelector
+     */
+    private musicPositionOff(val: any): void {
+        for (let i: number = 0; i < this.items.length; i++) {
+            this.items[i]['ao'] += val;
+            if (this.items[i]['ao'] < 0) this.items[i]['ao'] += 360;
+            if (this.items[i]['ao'] > 360) this.items[i]['ao'] -= 360;
+            this.items[i].setPosition(this.anglePos(this.items[i]['ao']));
+        }
+    }
+
+    /**
+     * 判定范围
+     *
+     * @private
+     * @param {*} c
+     * @param {*} t
+     * @return {*}  {*}
+     * @memberof SongSelector
+     */
+    private rectContainsPoint(c, t): any {
+        var n = !1;
+        t.x >= c.x && t.x <= c.x + c.width && t.y >= c.y && t.y <= c.y + c.height && (n = !0);
+        return n;
+    }
+
+    /**
+     * 滑动选择
+     *
+     * @private
+     * @memberof SongSelector
+     */
+    private musicMoveToChange(): void {
+        var angle = [];
+        for (var i = 0; i < this._itemCount + 1; i++) {
+            angle.push(i * this.commonAngle);
+        }
+        var ao = Math.abs(this.items[0]['ao']);
+
+        for (var i = 0; i < this.items.length; i++) {
+            var ao = this.items[i]['ao'];
+            for (var j = 0; j < angle.length - 1; j++) {
+                if (Math.abs(ao) >= angle[j] && Math.abs(ao) <= angle[j + 1]) {
+                    var ao2 = 0;
+                    if (angle[j + 1] - Math.abs(ao) < this.faultPx) {
+                        ao2 = angle[j + 1];
+                    } else {
+                        ao2 = angle[j];
+                    }
+                    this.items[i]['ao'] > 0 ? (this.items[i]['ao'] = ao2) : (this.items[i]['ao'] = -ao2);
+                    break;
+                }
+            }
+        }
+        var lastIndex = this._recentcardi;
+        for (var i = 0; i < this._itemCount; i++) {
+            if (this.items[i]['ao'] == 0 || this.items[i]['ao'] == 360) {
+                this._recentcardi = i;
+            }
+        }
+
+        // console.log("--this._recentcardi--: " , Module._recentcardi);
+        var flag = true;
+        for (var i = 0; i < this._itemCount; i++) {
+            var item = this.items[i];
+            var pos = this.anglePos(this.items[i]['ao']);
+            item.stopAllActions();
+
+            var call = cc.callFunc(
+                function (t, index) {
+                    // var sk = this.items[index].getChildByName("gd").getComponent(sp.Skeleton);
+                    // if (index == this._recentcardi) {
+                    //     sk.animation = "01";
+                    // } else {
+                    //     sk.animation = "02";
+                    // }
+                    // if (lastIndex != Module._recentcardi && flag) {
+                    //     flag =false;
+                    //     cc.audioEngine.stopAllEffects();
+                    //     Utils.playMusic("sound/soung/audition/"+Module._recentcardi+".mp3",true);
+                    // }
+                    this.unschedule(this.musicScaleUpdate);
+                },
+                this,
+                i
+            );
+            var call2 = cc.callFunc(
+                function (t, index) {
+                    // var sk = this.items[index].getChildByName("gd").getComponent(sp.Skeleton);
+                    // if (sk.animation == "01") sk.animation = "02";
+                },
+                this,
+                i
+            );
+            // TODO: 运行动画,暂时还不需要
+            item.runAction(cc.sequence(cc.moveTo(0.2, pos), call, cc.delayTime(99 / 30), call2));
+
+            if (i == this._recentcardi) {
+                CCUtils.findChild(item, 'btn').runAction(cc.repeatForever(cc.rotateBy(12.0, 360)));
+            } else {
+                CCUtils.findChild(item, 'btn').rotation = 0;
+                CCUtils.findChild(item, 'btn').stopAllActions();
+            }
+        }
+    }
+}

+ 10 - 0
assets/Script/Main/SongSelector.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "f2cc05f4-0ab9-4343-a539-87bcefbe75d7",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 13 - 0
assets/Script/Manager.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "1de2ad2d-19d9-4f7e-ae41-40d52a96a5f3",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/Script/Manager/core.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "ab075ea5-6a09-440e-97d6-7aec3a04c41f",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 55 - 0
assets/Script/Manager/core/EventManager.ts

@@ -0,0 +1,55 @@
+// 定义事件类型
+export enum EventType {
+    OpenGame = "OpenGame",
+    Event2 = "Event2"
+}
+
+// 创建观察者类
+export class Observer {
+    private callbacks: Function[] = [];
+
+    public addCallback(callback: Function) {
+        this.callbacks.push(callback);
+    }
+
+    public removeCallback(callback: Function) {
+        const index = this.callbacks.indexOf(callback);
+        if (index !== -1) {
+            this.callbacks.splice(index, 1);
+        }
+    }
+
+    public notify(data: any) {
+        this.callbacks.forEach(callback => {
+            callback(data);
+        });
+    }
+}
+
+// 创建观察者管理类
+export class ObserverManager {
+    private static observers: Map<EventType, Observer> = new Map();
+
+    public static addObserver(eventType: EventType, callback: Function) {
+        let observer = this.observers.get(eventType);
+        if (!observer) {
+            observer = new Observer();
+            this.observers.set(eventType, observer);
+        }
+        observer.addCallback(callback);
+    }
+
+    public static removeObserver(eventType: EventType, callback?: Function) {
+        const observer = this.observers.get(eventType);
+        if (observer) {
+            observer.removeCallback(callback);
+        }
+    }
+
+    public static notify(eventType: EventType, data: any) {
+        const observer = this.observers.get(eventType);
+        if (observer) {
+            observer.notify(data);
+        }
+    }
+}

+ 10 - 0
assets/Script/Manager/core/EventManager.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "9a535056-a7a1-4954-ac51-96b4f8b72100",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 52 - 0
assets/Script/Manager/core/PlaySoundManager.ts

@@ -0,0 +1,52 @@
+// 音频管理类 单例模式
+// 用法:playSoundManager.getInstance().playSound("soundName",1,false);
+// 1.第一个参数是音频名称,2.第二个参数是音量,3.第三个参数是是否循环
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class PlaySoundManager extends cc.Component {
+    // 单例
+    private static _instance: PlaySoundManager = null;
+    public static getInstance(): PlaySoundManager {
+        if (!PlaySoundManager._instance) {
+            PlaySoundManager._instance = new PlaySoundManager();
+        }
+        return PlaySoundManager._instance;
+    }
+
+    // 加载音频
+    public loadSound(soundName: string, callback: Function): void {
+        cc.loader.loadRes(
+            soundName,
+            cc.AudioClip,
+            function (err, clip) {
+                if (err) {
+                    cc.error(err.message || err);
+                    return;
+                }
+                if (callback) callback(clip);
+            }.bind(this)
+        );
+    }
+
+    /**
+     * 播放音效
+     *
+     * @param {cc.AudioClip} soundClip
+     * @param {boolean} [loop=true]
+     * @param {number} volume
+     * @memberof PlaySoundManager
+     */
+    public playSound(soundClip: cc.AudioClip, loop: boolean = true, volume?: number): void {
+        cc.audioEngine.playEffect(soundClip, loop);
+    }
+
+    /**
+     *  停止所有音效
+     *
+     * @memberof PlaySoundManager
+     */
+    public stopAllSound(): void {
+        cc.audioEngine.stopAllEffects();
+    }
+}

+ 10 - 0
assets/Script/Manager/core/PlaySoundManager.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "224c6e46-6918-4f46-80b7-814a23c94258",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 76 - 0
assets/Script/Manager/core/PrefabManager.ts

@@ -0,0 +1,76 @@
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class PrefabManager {
+    private static _prefabMap: { [key: string]: cc.Prefab } = {};
+
+    private static _prefabDic: { [key: string]: cc.Node } = {};
+
+    /**
+     * 加载指定路径下的预制体
+     * @param path 预制体的路径
+     * @param callback 加载完成后的回调函数
+     */
+    public static loadPrefab(path: string, callback: (prefab: cc.Prefab) => void) {
+        if (path in this._prefabMap) {
+            callback(this._prefabMap[path]);
+        } else {
+            cc.resources.load(path, cc.Prefab, (err, prefab: cc.Prefab) => {
+                if (err) {
+                    cc.error(err.message || err);
+                    return;
+                }
+                this._prefabMap[path] = prefab;
+                callback(prefab);
+            });
+        }
+    }
+
+    /**
+     * 打开指定路径下的预制体
+     * @param path 预制体的路径
+     * @param parentNode 预制体的父节点
+     * @param callback 预制体加载完成后的回调函数
+     */
+    public static open(path: string, parentNode?: cc.Node, callback?: (node: cc.Node) => void) {
+        // 如果已经加载过了,就直接显示
+        if (this._prefabDic[path] != undefined) {
+            this._prefabDic[path].active = true;
+        } else {
+            this.loadPrefab(path, (prefab) => {
+                let node = cc.instantiate(prefab);
+                if (parentNode) {
+                    node.parent = parentNode;
+                    node.setPosition(cc.v2(0, 0));
+                    this._prefabDic[path] = node;
+                }
+                if (callback) {
+                    callback(node);
+                }
+            });
+        }
+    }
+
+    /**
+     * 关闭指定路径下的预制体
+     * @param path 预制体的路径
+     * @param node 预制体的节点
+     */
+    public static close(node: cc.Node | string) {
+        if ( typeof node == 'string'){
+            this._prefabDic[node].active = false;
+        } else if (node.isValid){
+            node.active = false;
+        }
+    }
+
+    /** 遍历所有 this._prefabDic里面已隐藏的节点*/
+    public static closeAll() {
+        // for (let key in this._prefabDic) {
+        //     if (this._prefabDic[key].active) {
+        //         this._prefabDic[key].active = false;
+        //     }
+        // }
+    }
+
+}

+ 10 - 0
assets/Script/Manager/core/PrefabManager.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "3a095572-73f4-429e-867d-d179e998e8be",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 11 - 0
assets/Script/Manager/core/UIID.ts

@@ -0,0 +1,11 @@
+/** 预制体信息 */
+export const UIID = {
+    /** 主界面 */
+    MainHome: 'Prefab/Main/MainHomePrefab',
+    /** 选歌预制体 */
+    SongSelector: 'Prefab/Main/SongSelector/SongSelectorPrefab',
+    /** 游戏界面 */
+    GameMainPrefab: 'Prefab/GameMain/GameMainPrefab',
+    // public Setting: string = 'Prefab/Setting.prefab';
+    // 添加更多UI的信息
+};

+ 10 - 0
assets/Script/Manager/core/UIID.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "d427273b-5599-4b86-a7b1-1fb19ed13005",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 13 - 0
assets/Script/Utiles.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "cf1f6161-f3d5-4a17-b64b-d0841d9845c1",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 203 - 0
assets/Script/Utiles/CCUtils.ts

@@ -0,0 +1,203 @@
+
+export default class CCUtils {
+    // node.addChild 当你已经有parent的情况下再addChild会出现看不到的问题
+    public static addChild(child: cc.Node, parent: cc.Node, needCleanUp: boolean = false): void {
+        const lastParent: cc.Node = child.parent;
+
+        if (lastParent != null) {
+            child.removeFromParent(needCleanUp);
+        }
+        child.setParent(parent);
+    }
+
+    // node避免触发onEnable onDisable
+    public static setActive(node: cc.Node, active: boolean): void {
+        if (node.active == active) {
+            return;
+        }
+        node.active = active;
+    }
+
+    public static findChild(node: cc.Node, name: string): cc.Node {
+        if (name == '') {
+            return node;
+        }
+        const splitArr: any[] = name.split('/');
+        let tempNode: cc.Node = node;
+        for (let i: number = 0; i < splitArr.length; i++) {
+            tempNode = tempNode.getChildByName(splitArr[i]);
+            if (tempNode == null) {
+                break;
+            }
+        }
+        return tempNode;
+    }
+
+    public static getSprite(node: cc.Node, name: string): cc.Sprite {
+        return this.findChild(node, name).getComponent(cc.Sprite);
+    }
+
+    public static getLabel(node: cc.Node, name: string): cc.Label {
+        return this.findChild(node, name).getComponent(cc.Label);
+    }
+
+    public static getRichText(node: cc.Node, name: string): cc.RichText {
+        return this.findChild(node, name).getComponent(cc.RichText);
+    }
+
+    public static getCanvas(node: cc.Node, name: string): cc.Canvas {
+        return this.findChild(node, name).getComponent(cc.Canvas);
+    }
+
+    public static getWidget(node: cc.Node, name: string): cc.Widget {
+        return this.findChild(node, name).getComponent(cc.Widget);
+    }
+
+    public static getLayout(node: cc.Node, name: string): cc.Layout {
+        return this.findChild(node, name).getComponent(cc.Layout);
+    }
+
+    public static getScrollView(node: cc.Node, name: string): cc.ScrollView {
+        return this.findChild(node, name).getComponent(cc.ScrollView);
+    }
+
+    public static getScrollBar(node: cc.Node, name: string): cc.Scrollbar {
+        return this.findChild(node, name).getComponent(cc.Scrollbar);
+    }
+
+    public static getProgressBar(node: cc.Node, name: string): cc.ProgressBar {
+        return this.findChild(node, name).getComponent(cc.ProgressBar);
+    }
+
+    public static getToggle(node: cc.Node, name: string): cc.Toggle {
+        return this.findChild(node, name).getComponent(cc.Toggle);
+    }
+
+    public static getToggleContainer(node: cc.Node, name: string): cc.ToggleContainer {
+        return this.findChild(node, name).getComponent(cc.ToggleContainer);
+    }
+
+    public static getPageView(node: cc.Node, name: string): cc.PageView {
+        return this.findChild(node, name).getComponent(cc.PageView);
+    }
+
+    public static getPageviewIndicator(node: cc.Node, name: string): cc.PageViewIndicator {
+        return this.findChild(node, name).getComponent(cc.PageViewIndicator);
+    }
+
+    public static getSlider(node: cc.Node, name: string): cc.Slider {
+        return this.findChild(node, name).getComponent(cc.Slider);
+    }
+
+    public static getBlockInputEvents(node: cc.Node, name: string): cc.BlockInputEvents {
+        return this.findChild(node, name).getComponent(cc.BlockInputEvents);
+    }
+
+    public static getGraphics(node: cc.Node, name: string): cc.Graphics {
+        return this.findChild(node, name).getComponent(cc.Graphics);
+    }
+
+    public static getAnimation(node: cc.Node, name: string): cc.Animation {
+        return this.findChild(node, name).getComponent(cc.Animation);
+    }
+
+    public static getPolygonCollider(node: cc.Node, name: string): cc.PolygonCollider {
+        return this.findChild(node, name).getComponent(cc.PolygonCollider);
+    }
+
+    public static getBoxCollider(node: cc.Node, name: string): cc.BoxCollider {
+        return this.findChild(node, name).getComponent(cc.BoxCollider);
+    }
+
+    public static getVideoPlayer(node: cc.Node, name: string): cc.VideoPlayer {
+        return this.findChild(node, name).getComponent(cc.VideoPlayer);
+    }
+
+    public static isInBox(worldPos: cc.Vec2, boxCollider: cc.BoxCollider): boolean {
+        const innerPos: cc.Vec2 = boxCollider.node.convertToNodeSpaceAR(worldPos);
+        let isInX: boolean = false;
+        let isInY: boolean = false;
+        if (innerPos.x >= -boxCollider.node.anchorX * boxCollider.size.width && innerPos.x <= boxCollider.size.width * (1 - boxCollider.node.anchorX)) {
+            isInX = true;
+        }
+
+        if (innerPos.y >= -boxCollider.node.anchorY * boxCollider.size.height && innerPos.y <= boxCollider.size.height * (1 - boxCollider.node.anchorY)) {
+            isInY = true;
+        }
+        return isInX && isInY;
+    }
+
+    public static findLastNumber(name: string): number {
+        const reg: RegExp = /.*([0-9]+)$/;
+        const result: any = name.match(reg);
+        if (result != null) {
+            return Number(result[1]);
+        }
+        return -1;
+    }
+
+    public static changeToNodePos(node1: cc.Node, node2: cc.Node): cc.Vec2 {
+        const worldPos: cc.Vec2 = node1.parent.convertToWorldSpaceAR(node1.getPosition());
+        const nodeContentPos: cc.Vec2 = node2.parent.convertToNodeSpaceAR(worldPos);
+        return nodeContentPos;
+    }
+
+    public static getOrAddComponent<T extends cc.Component>(node: cc.Node, type: new () => T): T {
+        const component: any = node.getComponent(type);
+        if (component) {
+            return component;
+        }
+        return node.addComponent(type);
+    }
+
+    // public static createRegion(texture) {
+    //     let skeletonTexture = new sp.SkeletonTexture()
+    //     skeletonTexture.setRealTexture(texture)
+    //     let page = new sp.spine.TextureAtlasPage()
+    //     page.name = texture.name
+    //     page.uWrap = sp.spine.TextureWrap.ClampToEdge
+    //     page.vWrap = sp.spine.TextureWrap.ClampToEdge
+    //     page.texture = skeletonTexture
+    //     page.texture.setWraps(page.uWrap, page.vWrap)
+    //     page.width = texture.width
+    //     page.height = texture.height
+
+    //     let region = new sp.spine.TextureAtlasRegion()
+    //     region.page = page
+    //     region.width = texture.width
+    //     region.height = texture.height
+    //     region.originalWidth = texture.width
+    //     region.originalHeight = texture.height
+
+    //     region.rotate = false
+    //     region.u = 0
+    //     region.v = 0
+    //     region.u2 = 1
+    //     region.v2 = 1
+    //     region.texture = skeletonTexture
+    //     return region
+    // }
+
+    public static shuffle(arr: Array<any>): void {
+        for (let i: number = arr.length - 1; i >= 1; i--) {
+            const random: number = Math.floor(Math.random() * i);
+            const temp: any = arr[i];
+            arr[i] = arr[random];
+            arr[random] = temp;
+        }
+    }
+
+    public static getClassName(clas: any): string {
+        const name: string = cc.js.getClassName(clas);
+        return name;
+    }
+
+    public static getClassByName(name: string): Function {
+        const clas: Function = cc.js.getClassByName(name);
+        return clas;
+    }
+
+    public static setClass(className: string, clas: Function): void {
+        cc.js.setClassName(className, clas);
+    }
+}

+ 10 - 0
assets/Script/Utiles/CCUtils.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "cec1985f-f473-42aa-82d8-b7833f916927",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 51 - 0
assets/Script/Utiles/Utiles.ts


+ 10 - 0
assets/Script/Utiles/Utiles.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "ac742d15-0884-47e6-908d-59930f89c5fe",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 13 - 0
assets/Texture.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "5eca3fa6-5ec1-49ec-9c66-550157a78811",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/Texture/Avatar.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "fd73f585-17b0-45b6-a321-6bf56cdb1a85",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

BIN
assets/Texture/Avatar/musician.png


+ 38 - 0
assets/Texture/Avatar/musician.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "0ef8c94f-b1cd-4aff-9c12-a520955449ca",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 1024,
+  "height": 1024,
+  "platformSettings": {},
+  "subMetas": {
+    "musician": {
+      "ver": "1.0.6",
+      "uuid": "b8d5f228-0414-4e87-81b7-0e490fa214e9",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "0ef8c94f-b1cd-4aff-9c12-a520955449ca",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 1024,
+      "height": 1024,
+      "rawWidth": 1024,
+      "rawHeight": 1024,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Texture/Avatar/win.png


+ 38 - 0
assets/Texture/Avatar/win.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "f85b7229-e25d-4c62-a82b-356ef762d12b",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 256,
+  "height": 256,
+  "platformSettings": {},
+  "subMetas": {
+    "win": {
+      "ver": "1.0.6",
+      "uuid": "ac0e827d-522c-4e3d-b68b-a46f42250d11",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "f85b7229-e25d-4c62-a82b-356ef762d12b",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0.5,
+      "trimX": 15,
+      "trimY": 13,
+      "width": 226,
+      "height": 229,
+      "rawWidth": 256,
+      "rawHeight": 256,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 13 - 0
assets/Texture/Common.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "3ff5a912-2498-4a15-958b-c0869ddbfd40",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/Texture/Common/button.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "895a882f-a3be-4223-a9ea-e99c3ed84978",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

BIN
assets/Texture/Common/button/btn_next.png


+ 38 - 0
assets/Texture/Common/button/btn_next.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "74629302-4518-4271-999d-1a02805ef4a8",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 230,
+  "height": 86,
+  "platformSettings": {},
+  "subMetas": {
+    "btn_next": {
+      "ver": "1.0.6",
+      "uuid": "9a7abf41-7423-45f8-80cc-1712c824a438",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "74629302-4518-4271-999d-1a02805ef4a8",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 230,
+      "height": 86,
+      "rawWidth": 230,
+      "rawHeight": 86,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Texture/Common/logo-removebg.png


+ 38 - 0
assets/Texture/Common/logo-removebg.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "0fda0b51-ae2d-400d-b155-e47da1c2742a",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 324,
+  "height": 324,
+  "platformSettings": {},
+  "subMetas": {
+    "logo-removebg": {
+      "ver": "1.0.6",
+      "uuid": "31431e0a-869e-4cb8-8b37-88873970cd4f",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "0fda0b51-ae2d-400d-b155-e47da1c2742a",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 3.5,
+      "offsetY": -11,
+      "trimX": 15,
+      "trimY": 42,
+      "width": 624,
+      "height": 585,
+      "rawWidth": 647,
+      "rawHeight": 647,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Texture/Common/logo-removebg2.png


+ 38 - 0
assets/Texture/Common/logo-removebg2.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "9d4b7a18-a61b-4df6-9a69-da320686bc6f",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 647,
+  "height": 647,
+  "platformSettings": {},
+  "subMetas": {
+    "logo-removebg2": {
+      "ver": "1.0.6",
+      "uuid": "e256e447-337d-4414-b1fc-b06d2dfd2e6b",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "9d4b7a18-a61b-4df6-9a69-da320686bc6f",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": -21,
+      "trimX": 0,
+      "trimY": 42,
+      "width": 647,
+      "height": 605,
+      "rawWidth": 647,
+      "rawHeight": 647,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/Texture/Common/logo.png


+ 38 - 0
assets/Texture/Common/logo.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "409eaa59-15e4-48f1-8f86-f68c4fb9f019",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 647,
+  "height": 647,
+  "platformSettings": {},
+  "subMetas": {
+    "logo": {
+      "ver": "1.0.6",
+      "uuid": "4e093338-498e-4477-af1d-c6be5fc270f7",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "409eaa59-15e4-48f1-8f86-f68c4fb9f019",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 647,
+      "height": 647,
+      "rawWidth": 647,
+      "rawHeight": 647,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 13 - 0
assets/Texture/Spine.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "f91e39d6-3f1c-4996-84eb-5f78a6240197",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/Texture/Spine/changeBg.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "ffc4f9ca-4cec-4a52-b9f6-3a8cbc0c5828",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/Texture/Spine/changeBg/caidian2.atlas

@@ -0,0 +1,13 @@
+
+caidian2.png
+size: 64,64
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+q1_3
+  rotate: false
+  xy: 2, 2
+  size: 40, 40
+  orig: 40, 40
+  offset: 0, 0
+  index: -1

+ 6 - 0
assets/Texture/Spine/changeBg/caidian2.atlas.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "1.0.3",
+  "uuid": "6f9e5c64-41ea-499f-a977-c6d0647dca23",
+  "importer": "asset",
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
assets/Texture/Spine/changeBg/caidian2.json


+ 10 - 0
assets/Texture/Spine/changeBg/caidian2.json.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.2.5",
+  "uuid": "e3a6a4d8-eacd-4e1d-9965-eef963605e6e",
+  "importer": "spine",
+  "textures": [
+    "49453a50-18f9-4589-b3e0-1ac3148023ce"
+  ],
+  "scale": 1,
+  "subMetas": {}
+}

BIN
assets/Texture/Spine/changeBg/caidian2.png


+ 38 - 0
assets/Texture/Spine/changeBg/caidian2.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "49453a50-18f9-4589-b3e0-1ac3148023ce",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 64,
+  "height": 64,
+  "platformSettings": {},
+  "subMetas": {
+    "caidian2": {
+      "ver": "1.0.6",
+      "uuid": "6e9109df-2525-4222-9d41-5a97265f1872",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "49453a50-18f9-4589-b3e0-1ac3148023ce",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -10,
+      "offsetY": 10,
+      "trimX": 2,
+      "trimY": 2,
+      "width": 40,
+      "height": 40,
+      "rawWidth": 64,
+      "rawHeight": 64,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 13 - 0
assets/Texture/Spine/gameStar.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "b9a7ff76-c7c8-4742-a74f-3e53373adb99",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 48 - 0
assets/Texture/Spine/gameStar/yxbj01.atlas

@@ -0,0 +1,48 @@
+
+yxbj01.png
+size: 2048,4096
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+gd1
+  rotate: false
+  xy: 825, 3076
+  size: 45, 40
+  orig: 45, 40
+  offset: 0, 0
+  index: -1
+xx1
+  rotate: false
+  xy: 825, 3118
+  size: 820, 840
+  orig: 820, 840
+  offset: 0, 0
+  index: -1
+xx2
+  rotate: false
+  xy: 2, 2891
+  size: 821, 1067
+  orig: 821, 1067
+  offset: 0, 0
+  index: -1
+xx3
+  rotate: true
+  xy: 2, 1134
+  size: 864, 774
+  orig: 864, 774
+  offset: 0, 0
+  index: -1
+xx4
+  rotate: false
+  xy: 2, 2
+  size: 466, 1130
+  orig: 466, 1130
+  offset: 0, 0
+  index: -1
+xx5
+  rotate: true
+  xy: 2, 2000
+  size: 889, 813
+  orig: 889, 813
+  offset: 0, 0
+  index: -1

+ 6 - 0
assets/Texture/Spine/gameStar/yxbj01.atlas.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "1.0.3",
+  "uuid": "48ea1ef9-468f-4c3b-94ff-fa8187304a85",
+  "importer": "asset",
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
assets/Texture/Spine/gameStar/yxbj01.json


+ 10 - 0
assets/Texture/Spine/gameStar/yxbj01.json.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.2.5",
+  "uuid": "7b704af4-833b-43a4-bb81-3dfc7cd641ec",
+  "importer": "spine",
+  "textures": [
+    "edf0c7d4-73b0-427c-8b1f-2235c17e08d3"
+  ],
+  "scale": 1,
+  "subMetas": {}
+}

BIN
assets/Texture/Spine/gameStar/yxbj01.png


+ 38 - 0
assets/Texture/Spine/gameStar/yxbj01.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "edf0c7d4-73b0-427c-8b1f-2235c17e08d3",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 2048,
+  "height": 4096,
+  "platformSettings": {},
+  "subMetas": {
+    "yxbj01": {
+      "ver": "1.0.6",
+      "uuid": "89687bf6-1663-49c8-8cc9-c099e78d9af1",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "edf0c7d4-73b0-427c-8b1f-2235c17e08d3",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -227.5,
+      "offsetY": 45.5,
+      "trimX": 74,
+      "trimY": 174,
+      "width": 1445,
+      "height": 3657,
+      "rawWidth": 2048,
+      "rawHeight": 4096,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 13 - 0
assets/Texture/Spine/gameStar/yxbj02.atlas

@@ -0,0 +1,13 @@
+
+yxbj02.png
+size: 64,64
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+gd2
+  rotate: false
+  xy: 2, 2
+  size: 45, 40
+  orig: 45, 40
+  offset: 0, 0
+  index: -1

+ 6 - 0
assets/Texture/Spine/gameStar/yxbj02.atlas.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "1.0.3",
+  "uuid": "4004b45f-72b8-4eb2-8346-b4fbae2f0a04",
+  "importer": "asset",
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
assets/Texture/Spine/gameStar/yxbj02.json


+ 10 - 0
assets/Texture/Spine/gameStar/yxbj02.json.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.2.5",
+  "uuid": "a55e57e7-055a-41e6-8eaa-15099144da87",
+  "importer": "spine",
+  "textures": [
+    "168c70f5-6f4c-47fa-99f0-4c079d1fa707"
+  ],
+  "scale": 1,
+  "subMetas": {}
+}

BIN
assets/Texture/Spine/gameStar/yxbj02.png


+ 38 - 0
assets/Texture/Spine/gameStar/yxbj02.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "168c70f5-6f4c-47fa-99f0-4c079d1fa707",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 64,
+  "height": 64,
+  "platformSettings": {},
+  "subMetas": {
+    "yxbj02": {
+      "ver": "1.0.6",
+      "uuid": "dda02983-576f-4657-bafa-0512683f835f",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "168c70f5-6f4c-47fa-99f0-4c079d1fa707",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -7,
+      "offsetY": 10,
+      "trimX": 18,
+      "trimY": 16,
+      "width": 14,
+      "height": 12,
+      "rawWidth": 64,
+      "rawHeight": 64,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 48 - 0
assets/Texture/Spine/gameStar/zjmxx.atlas

@@ -0,0 +1,48 @@
+
+zjmxx.png
+size: 2048,4096
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+gd1
+  rotate: false
+  xy: 825, 3076
+  size: 45, 40
+  orig: 45, 40
+  offset: 0, 0
+  index: -1
+xx1
+  rotate: false
+  xy: 825, 3118
+  size: 820, 840
+  orig: 820, 840
+  offset: 0, 0
+  index: -1
+xx2
+  rotate: false
+  xy: 2, 2891
+  size: 821, 1067
+  orig: 821, 1067
+  offset: 0, 0
+  index: -1
+xx3
+  rotate: true
+  xy: 2, 1134
+  size: 864, 774
+  orig: 864, 774
+  offset: 0, 0
+  index: -1
+xx4
+  rotate: false
+  xy: 2, 2
+  size: 466, 1130
+  orig: 466, 1130
+  offset: 0, 0
+  index: -1
+xx5
+  rotate: true
+  xy: 2, 2000
+  size: 889, 813
+  orig: 889, 813
+  offset: 0, 0
+  index: -1

+ 6 - 0
assets/Texture/Spine/gameStar/zjmxx.atlas.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "1.0.3",
+  "uuid": "541e039c-07fb-4613-abec-0987e894aa36",
+  "importer": "asset",
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
assets/Texture/Spine/gameStar/zjmxx.json


+ 10 - 0
assets/Texture/Spine/gameStar/zjmxx.json.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.2.5",
+  "uuid": "afe95956-9022-49f8-b966-d1456312f919",
+  "importer": "spine",
+  "textures": [
+    "bf1dbca0-c7e6-4e56-8b99-df35446beb10"
+  ],
+  "scale": 1,
+  "subMetas": {}
+}

BIN
assets/Texture/Spine/gameStar/zjmxx.png


+ 38 - 0
assets/Texture/Spine/gameStar/zjmxx.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "bf1dbca0-c7e6-4e56-8b99-df35446beb10",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 2048,
+  "height": 4096,
+  "platformSettings": {},
+  "subMetas": {
+    "zjmxx": {
+      "ver": "1.0.6",
+      "uuid": "d738e21b-8a7c-4aed-9786-53192acda285",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "bf1dbca0-c7e6-4e56-8b99-df35446beb10",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -201,
+      "offsetY": 67.5,
+      "trimX": 3,
+      "trimY": 3,
+      "width": 1640,
+      "height": 3955,
+      "rawWidth": 2048,
+      "rawHeight": 4096,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 13 - 0
assets/Texture/Spine/jiazai.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "fc8386e2-9def-4425-b088-e193a3953c19",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 48 - 0
assets/Texture/Spine/jiazai/jiazai.atlas

@@ -0,0 +1,48 @@
+
+jiazai.png
+size: 512,256
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+erji
+  rotate: false
+  xy: 190, 117
+  size: 154, 111
+  orig: 154, 111
+  offset: 0, 0
+  index: -1
+erji2
+  rotate: false
+  xy: 2, 85
+  size: 186, 143
+  orig: 186, 143
+  offset: 0, 0
+  index: -1
+yf1
+  rotate: false
+  xy: 57, 16
+  size: 45, 67
+  orig: 45, 67
+  offset: 0, 0
+  index: -1
+yf2
+  rotate: false
+  xy: 346, 167
+  size: 71, 61
+  orig: 71, 61
+  offset: 0, 0
+  index: -1
+yf3
+  rotate: false
+  xy: 2, 2
+  size: 53, 81
+  orig: 53, 81
+  offset: 0, 0
+  index: -1
+yf4
+  rotate: false
+  xy: 419, 168
+  size: 50, 60
+  orig: 50, 60
+  offset: 0, 0
+  index: -1

+ 6 - 0
assets/Texture/Spine/jiazai/jiazai.atlas.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "1.0.3",
+  "uuid": "0e1b65c5-d605-4cc2-8f87-bb8bce4badd4",
+  "importer": "asset",
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
assets/Texture/Spine/jiazai/jiazai.json


+ 10 - 0
assets/Texture/Spine/jiazai/jiazai.json.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.2.5",
+  "uuid": "baceb15b-540c-4e87-a312-270d8264b681",
+  "importer": "spine",
+  "textures": [
+    "5c9a9c5e-de9e-4fb7-8062-e1038b4176bb"
+  ],
+  "scale": 1,
+  "subMetas": {}
+}

BIN
assets/Texture/Spine/jiazai/jiazai.png


+ 38 - 0
assets/Texture/Spine/jiazai/jiazai.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "5c9a9c5e-de9e-4fb7-8062-e1038b4176bb",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 512,
+  "height": 256,
+  "platformSettings": {},
+  "subMetas": {
+    "jiazai": {
+      "ver": "1.0.6",
+      "uuid": "42ce5f11-a4bb-4250-b1d9-83c0b60cd394",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "5c9a9c5e-de9e-4fb7-8062-e1038b4176bb",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -21.5,
+      "offsetY": 12.5,
+      "trimX": 2,
+      "trimY": 3,
+      "width": 465,
+      "height": 225,
+      "rawWidth": 512,
+      "rawHeight": 256,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 13 - 0
assets/Texture/Spine/lhz.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "18f2f72c-2326-4c1d-bda5-39f5a01e904e",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 27 - 0
assets/Texture/Spine/lhz/dayan.atlas

@@ -0,0 +1,27 @@
+
+dayan.png
+size: 256,128
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+cb
+  rotate: false
+  xy: 106, 59
+  size: 76, 45
+  orig: 76, 45
+  offset: 0, 0
+  index: -1
+diguang
+  rotate: false
+  xy: 2, 2
+  size: 102, 102
+  orig: 102, 102
+  offset: 0, 0
+  index: -1
+st
+  rotate: true
+  xy: 106, 16
+  size: 41, 73
+  orig: 41, 73
+  offset: 0, 0
+  index: -1

+ 6 - 0
assets/Texture/Spine/lhz/dayan.atlas.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "1.0.3",
+  "uuid": "2140d26a-59f5-47bf-8231-c4576ec4a0c3",
+  "importer": "asset",
+  "subMetas": {}
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
assets/Texture/Spine/lhz/dayan.json


+ 10 - 0
assets/Texture/Spine/lhz/dayan.json.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.2.5",
+  "uuid": "4e72d14e-aadf-4748-b384-681736127273",
+  "importer": "spine",
+  "textures": [
+    "eac57831-8450-4d27-8442-9ecde016c1a5"
+  ],
+  "scale": 1,
+  "subMetas": {}
+}

BIN
assets/Texture/Spine/lhz/dayan.png


+ 38 - 0
assets/Texture/Spine/lhz/dayan.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "eac57831-8450-4d27-8442-9ecde016c1a5",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": true,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 256,
+  "height": 128,
+  "platformSettings": {},
+  "subMetas": {
+    "dayan": {
+      "ver": "1.0.6",
+      "uuid": "6acc6086-9bb6-4a2d-8c7e-363739d82364",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "eac57831-8450-4d27-8442-9ecde016c1a5",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -36,
+      "offsetY": 11,
+      "trimX": 2,
+      "trimY": 2,
+      "width": 180,
+      "height": 102,
+      "rawWidth": 256,
+      "rawHeight": 128,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 0 - 0
assets/Texture/Spine/lhz/feiji.atlas


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff