first commit
@@ -0,0 +1,2 @@
|
||||
[InternetShortcut]
|
||||
URL=https://docs.cocos.com/creator/manual/en/scripting/setup.html#custom-script-template
|
||||
5
.creator/default-meta.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"image": {
|
||||
"type": "sprite-frame"
|
||||
}
|
||||
}
|
||||
24
.gitignore
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
#///////////////////////////
|
||||
# Cocos Creator 3D Project
|
||||
#///////////////////////////
|
||||
library/
|
||||
temp/
|
||||
local/
|
||||
build/
|
||||
profiles/
|
||||
native
|
||||
#//////////////////////////
|
||||
# NPM
|
||||
#//////////////////////////
|
||||
node_modules/
|
||||
|
||||
#//////////////////////////
|
||||
# VSCode
|
||||
#//////////////////////////
|
||||
.vscode/
|
||||
|
||||
#//////////////////////////
|
||||
# WebStorm
|
||||
#//////////////////////////
|
||||
.idea/
|
||||
BIN
assets/.DS_Store
vendored
Normal file
9
assets/Music.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "89841261-db10-4d0a-bb77-d90710c093ee",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
BIN
assets/Music/.DS_Store
vendored
Normal file
BIN
assets/Music/clear.mp3
Normal file
14
assets/Music/clear.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "226321ef-18ba-4971-8c1e-390621bd586a",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/electricity.mp3
Normal file
14
assets/Music/electricity.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "c70553ee-1056-4775-9ff9-c237a713654f",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/hint.mp3
Normal file
14
assets/Music/hint.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "506f2137-ea3a-496d-b351-278cd50ffd56",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/magic.mp3
Normal file
14
assets/Music/magic.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "255c0043-ac64-4437-89f0-c0f645a26918",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/play.mp3
Normal file
14
assets/Music/play.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "1b3412d9-9df6-4e43-9b89-53f824efc759",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/remove.mp3
Normal file
14
assets/Music/remove.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "a5363c1d-f32a-400a-ba20-d69481533373",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/shuffle.mp3
Normal file
14
assets/Music/shuffle.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "5d1b053d-a3aa-43e9-b794-cd5acbb9767f",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/startAudio.mp3
Normal file
14
assets/Music/startAudio.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "0b1fe855-606c-411e-b287-72a9b2b78d59",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
BIN
assets/Music/victory.mp3
Normal file
14
assets/Music/victory.mp3.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.0.0",
|
||||
"importer": "audio-clip",
|
||||
"imported": true,
|
||||
"uuid": "79b91b1d-d514-4317-91ba-4dfceaee8ae7",
|
||||
"files": [
|
||||
".json",
|
||||
".mp3"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"downloadMode": 0
|
||||
}
|
||||
}
|
||||
9
assets/prefabs.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "da9740f8-c097-47c9-b759-b2e91aa13d36",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
2746
assets/prefabs/AudioSettingsPanel.prefab
Normal file
13
assets/prefabs/AudioSettingsPanel.prefab.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "1bf00709-edb9-4753-a6bc-5d7908f24fbb",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "AudioSettingsPanel"
|
||||
}
|
||||
}
|
||||
378
assets/prefabs/Block.prefab
Normal file
@@ -0,0 +1,378 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "Block",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Block",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 14
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 33554432,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Bg",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 33554432,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 198,
|
||||
"height": 198
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "3dXbVEaRNKz5cPuNJ27SGV"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "38593591-e719-4f26-8a25-db4e021d8f3f@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "03WyJryl9GuYgDjfoMO1rE"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c3eihc62NPnr6RI8VMNmL8",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Icon",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 33554432,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 40,
|
||||
"height": 36
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "22s2RxEIZFe7g7jMygTP8R"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "57520716-48c8-4a19-8acf-41c9f8777fb0@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "7euT41/SFLgb1jfUY/Me8z"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "7bCF37+CtCSLrI7gObuY1D",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 15
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 100,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "6aX/IOoYVDUKZ84bN0DaxR"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "88vcfQJ7xKIZ0ejqSCSdo8",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
13
assets/prefabs/Block.prefab.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "9fa6687e-41ec-4a98-bc60-fbf24dc8a22b",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "Block"
|
||||
}
|
||||
}
|
||||
14
assets/resources.meta
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "1ed9b8a7-b57f-4e50-bdc6-8cfbc7f70ce5",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"isBundle": true,
|
||||
"bundleConfigID": "default",
|
||||
"bundleName": "resources",
|
||||
"priority": 8
|
||||
}
|
||||
}
|
||||
9
assets/resources/textures.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "7b2ffd95-2192-41db-a474-b9cc90d5c933",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
BIN
assets/resources/textures/.DS_Store
vendored
Normal file
BIN
assets/resources/textures/1.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
134
assets/resources/textures/1.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "a19c48c6-e2ce-473b-87a8-d1140251756c",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "a19c48c6-e2ce-473b-87a8-d1140251756c@6c48a",
|
||||
"displayName": "1",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "a19c48c6-e2ce-473b-87a8-d1140251756c",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "a19c48c6-e2ce-473b-87a8-d1140251756c@f9941",
|
||||
"displayName": "1",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 240,
|
||||
"height": 286,
|
||||
"rawWidth": 240,
|
||||
"rawHeight": 286,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-120,
|
||||
-143,
|
||||
0,
|
||||
120,
|
||||
-143,
|
||||
0,
|
||||
-120,
|
||||
143,
|
||||
0,
|
||||
120,
|
||||
143,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
286,
|
||||
240,
|
||||
286,
|
||||
0,
|
||||
0,
|
||||
240,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-120,
|
||||
-143,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
120,
|
||||
143,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "a19c48c6-e2ce-473b-87a8-d1140251756c@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "a19c48c6-e2ce-473b-87a8-d1140251756c@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/resources/textures/2.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
134
assets/resources/textures/2.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "af528c64-b079-463b-88e0-7bfbba947bf2",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "af528c64-b079-463b-88e0-7bfbba947bf2@6c48a",
|
||||
"displayName": "2",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "af528c64-b079-463b-88e0-7bfbba947bf2",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "af528c64-b079-463b-88e0-7bfbba947bf2@f9941",
|
||||
"displayName": "2",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 3,
|
||||
"offsetY": 0,
|
||||
"trimX": 6,
|
||||
"trimY": 0,
|
||||
"width": 203,
|
||||
"height": 307,
|
||||
"rawWidth": 209,
|
||||
"rawHeight": 307,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-101.5,
|
||||
-153.5,
|
||||
0,
|
||||
101.5,
|
||||
-153.5,
|
||||
0,
|
||||
-101.5,
|
||||
153.5,
|
||||
0,
|
||||
101.5,
|
||||
153.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
6,
|
||||
307,
|
||||
209,
|
||||
307,
|
||||
6,
|
||||
0,
|
||||
209,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0.028708133971291867,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0.028708133971291867,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-101.5,
|
||||
-153.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
101.5,
|
||||
153.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "af528c64-b079-463b-88e0-7bfbba947bf2@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "af528c64-b079-463b-88e0-7bfbba947bf2@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/resources/textures/3.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
134
assets/resources/textures/3.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "5b4d5825-6c8e-44e5-a71d-2d087c8993ca",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "5b4d5825-6c8e-44e5-a71d-2d087c8993ca@6c48a",
|
||||
"displayName": "3",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "5b4d5825-6c8e-44e5-a71d-2d087c8993ca",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "5b4d5825-6c8e-44e5-a71d-2d087c8993ca@f9941",
|
||||
"displayName": "3",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 1,
|
||||
"offsetY": 0,
|
||||
"trimX": 2,
|
||||
"trimY": 0,
|
||||
"width": 222,
|
||||
"height": 275,
|
||||
"rawWidth": 224,
|
||||
"rawHeight": 275,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-111,
|
||||
-137.5,
|
||||
0,
|
||||
111,
|
||||
-137.5,
|
||||
0,
|
||||
-111,
|
||||
137.5,
|
||||
0,
|
||||
111,
|
||||
137.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
2,
|
||||
275,
|
||||
224,
|
||||
275,
|
||||
2,
|
||||
0,
|
||||
224,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0.008928571428571428,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0.008928571428571428,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-111,
|
||||
-137.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
111,
|
||||
137.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "5b4d5825-6c8e-44e5-a71d-2d087c8993ca@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "5b4d5825-6c8e-44e5-a71d-2d087c8993ca@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/resources/textures/4.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
134
assets/resources/textures/4.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "4e57c78e-d895-4138-a2b3-25b825699979",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "4e57c78e-d895-4138-a2b3-25b825699979@6c48a",
|
||||
"displayName": "4",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "4e57c78e-d895-4138-a2b3-25b825699979",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "4e57c78e-d895-4138-a2b3-25b825699979@f9941",
|
||||
"displayName": "4",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 204,
|
||||
"height": 287,
|
||||
"rawWidth": 204,
|
||||
"rawHeight": 287,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-102,
|
||||
-143.5,
|
||||
0,
|
||||
102,
|
||||
-143.5,
|
||||
0,
|
||||
-102,
|
||||
143.5,
|
||||
0,
|
||||
102,
|
||||
143.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
287,
|
||||
204,
|
||||
287,
|
||||
0,
|
||||
0,
|
||||
204,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-102,
|
||||
-143.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
102,
|
||||
143.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "4e57c78e-d895-4138-a2b3-25b825699979@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "4e57c78e-d895-4138-a2b3-25b825699979@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/resources/textures/5.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
134
assets/resources/textures/5.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "c34a77c1-d19d-4f03-bbeb-4cbb51aa3d9d",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "c34a77c1-d19d-4f03-bbeb-4cbb51aa3d9d@6c48a",
|
||||
"displayName": "5",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "c34a77c1-d19d-4f03-bbeb-4cbb51aa3d9d",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "c34a77c1-d19d-4f03-bbeb-4cbb51aa3d9d@f9941",
|
||||
"displayName": "5",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 224,
|
||||
"height": 278,
|
||||
"rawWidth": 224,
|
||||
"rawHeight": 278,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-112,
|
||||
-139,
|
||||
0,
|
||||
112,
|
||||
-139,
|
||||
0,
|
||||
-112,
|
||||
139,
|
||||
0,
|
||||
112,
|
||||
139,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
278,
|
||||
224,
|
||||
278,
|
||||
0,
|
||||
0,
|
||||
224,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-112,
|
||||
-139,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
112,
|
||||
139,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "c34a77c1-d19d-4f03-bbeb-4cbb51aa3d9d@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "c34a77c1-d19d-4f03-bbeb-4cbb51aa3d9d@6c48a"
|
||||
}
|
||||
}
|
||||
9
assets/scene.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "f72eca68-16b5-4abe-8ba3-7c9037ac8f88",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
1176
assets/scene/Load.scene
Normal file
11
assets/scene/Load.scene.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "scene",
|
||||
"imported": true,
|
||||
"uuid": "7e6b8aff-6d8d-40e7-aa76-36fd1952f14f",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
4045
assets/scene/StartScene.scene
Normal file
11
assets/scene/StartScene.scene.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "scene",
|
||||
"imported": true,
|
||||
"uuid": "58e12c37-b669-4dd6-a1e2-2cfc37074151",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
4421
assets/scene/s1.scene
Normal file
11
assets/scene/s1.scene.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "scene",
|
||||
"imported": true,
|
||||
"uuid": "9de958b4-c0ee-4c33-8a6c-c4fd2a633a34",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
9
assets/scripts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "c8a78a0b-cd2c-4c1a-bae3-76bb4078a7f4",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
139
assets/scripts/AudioManager.ts
Normal file
@@ -0,0 +1,139 @@
|
||||
import { _decorator, Component, Node, AudioSource, AudioClip, director } from 'cc';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
// 背景音乐类型
|
||||
export enum BGMType {
|
||||
Home,
|
||||
Level,
|
||||
Boss,
|
||||
}
|
||||
|
||||
// 音效类型
|
||||
export enum SFXType {
|
||||
Remove,
|
||||
Success,
|
||||
Fail,
|
||||
Item,
|
||||
Victory,
|
||||
Magic,
|
||||
Shuffle,
|
||||
Hint
|
||||
}
|
||||
|
||||
@ccclass('AudioManager')
|
||||
export class AudioManager extends Component {
|
||||
private static _instance: AudioManager | null = null;
|
||||
public static get instance(): AudioManager {
|
||||
if (!this._instance) {
|
||||
const node = new Node('AudioManager');
|
||||
this._instance = node.addComponent(AudioManager);
|
||||
director.addPersistRootNode(node);
|
||||
}
|
||||
|
||||
return this._instance;
|
||||
}
|
||||
|
||||
// AudioSources
|
||||
private bgmSource!: AudioSource;
|
||||
private sfxSource!: AudioSource;
|
||||
|
||||
// 开关
|
||||
public bgmEnabled: boolean = true;
|
||||
public sfxEnabled: boolean = true;
|
||||
|
||||
// 音乐 / 音效 Map
|
||||
private bgmClips: Map<BGMType, AudioClip> = new Map();
|
||||
private sfxClips: Map<SFXType, AudioClip> = new Map();
|
||||
|
||||
private currentBGM: BGMType | null = null;
|
||||
|
||||
onLoad() {
|
||||
// 初始化单例
|
||||
AudioManager._instance = this;
|
||||
|
||||
// 跨场景不销毁
|
||||
// director.addPersistRootNode(this.node);
|
||||
|
||||
// 读取本地开关
|
||||
this.bgmEnabled = localStorage.getItem('bgmEnabled') !== '0';
|
||||
this.sfxEnabled = localStorage.getItem('sfxEnabled') !== '0';
|
||||
|
||||
// 自动挂载或创建 AudioSource
|
||||
const sources = this.node.getComponents(AudioSource);
|
||||
if (sources.length >= 2) {
|
||||
this.bgmSource = sources[0];
|
||||
this.sfxSource = sources[1];
|
||||
} else {
|
||||
this.bgmSource = this.node.addComponent(AudioSource);
|
||||
this.bgmSource.loop = true;
|
||||
this.sfxSource = this.node.addComponent(AudioSource);
|
||||
}
|
||||
}
|
||||
|
||||
/** 注册 BGM */
|
||||
public registerBGM(type: BGMType, clip: AudioClip) {
|
||||
this.bgmClips.set(type, clip);
|
||||
}
|
||||
|
||||
/** 注册 SFX */
|
||||
public registerSFX(type: SFXType, clip: AudioClip) {
|
||||
this.sfxClips.set(type, clip);
|
||||
}
|
||||
|
||||
/** 播放背景音乐 */
|
||||
public playBGM(type: BGMType) {
|
||||
if (!this.bgmEnabled) return;
|
||||
// if (this.currentBGM === type) return;
|
||||
|
||||
const clip = this.bgmClips.get(type);
|
||||
if (!clip) return;
|
||||
|
||||
this.currentBGM = type;
|
||||
this.bgmSource.clip = clip;
|
||||
this.bgmSource.loop = true;
|
||||
this.bgmSource.play();
|
||||
}
|
||||
|
||||
/** 播放音效 */
|
||||
public playSFX(type: SFXType) {
|
||||
if (!this.sfxEnabled) return;
|
||||
|
||||
const clip = this.sfxClips.get(type);
|
||||
if (!clip) return;
|
||||
|
||||
this.sfxSource.playOneShot(clip, 1.0);
|
||||
}
|
||||
|
||||
/** 设置 BGM 开关 */
|
||||
public setBGMEnabled(enabled: boolean) {
|
||||
this.bgmEnabled = enabled;
|
||||
localStorage.setItem('bgmEnabled', enabled ? '1' : '0');
|
||||
if (!this.bgmSource) return;
|
||||
|
||||
if (enabled) {
|
||||
// 开启播放当前 BGM
|
||||
if (this.currentBGM !== null || this.currentBGM !== undefined) {
|
||||
const clip = this.bgmClips.get(this.currentBGM);
|
||||
if (clip) {
|
||||
this.bgmSource.clip = clip;
|
||||
this.bgmSource.play();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 关闭停止播放
|
||||
this.bgmSource.stop();
|
||||
}
|
||||
}
|
||||
|
||||
/** 设置 SFX 开关 */
|
||||
public setSFXEnabled(enabled: boolean) {
|
||||
this.sfxEnabled = enabled;
|
||||
localStorage.setItem('sfxEnabled', enabled ? '1' : '0');
|
||||
// 关闭音效后,playSFX 会直接返回,不会播放
|
||||
}
|
||||
|
||||
/** 设置 SFX 开关 */
|
||||
public setCurBgm(type: number) {
|
||||
this.currentBGM = type;
|
||||
}
|
||||
}
|
||||
9
assets/scripts/AudioManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "b07ed8a6-f1ba-46a1-8edd-9b424894ec9f",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
48
assets/scripts/AudioSettingsUI.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { _decorator, Component, Node, Toggle } from 'cc';
|
||||
import { AudioManager } from './AudioManager';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('AudioSettingsUI')
|
||||
export class AudioSettingsUI extends Component {
|
||||
@property(Node)
|
||||
panel: Node = null!; // 设置面板节点
|
||||
|
||||
@property(Toggle)
|
||||
bgmToggle: Toggle = null!;
|
||||
|
||||
@property(Toggle)
|
||||
sfxToggle: Toggle = null!;
|
||||
|
||||
onLoad() {
|
||||
const am = AudioManager.instance;
|
||||
|
||||
// 初始化 Toggle 状态
|
||||
this.bgmToggle.isChecked = am.bgmEnabled;
|
||||
this.sfxToggle.isChecked = am.sfxEnabled;
|
||||
|
||||
// Toggle 监听
|
||||
this.bgmToggle.node.on('toggle', this.onBgmToggleChanged, this);
|
||||
this.sfxToggle.node.on('toggle', this.onSfxToggleChanged, this);
|
||||
|
||||
// 面板默认隐藏
|
||||
this.panel.active = false;
|
||||
}
|
||||
|
||||
/** 打开设置面板 */
|
||||
openPanel() {
|
||||
this.panel.active = true;
|
||||
}
|
||||
|
||||
/** 关闭设置面板 */
|
||||
closePanel() {
|
||||
this.panel.active = false;
|
||||
}
|
||||
|
||||
private onBgmToggleChanged(toggle: Toggle) {
|
||||
AudioManager.instance.setBGMEnabled(toggle.isChecked);
|
||||
}
|
||||
|
||||
private onSfxToggleChanged(toggle: Toggle) {
|
||||
AudioManager.instance.setSFXEnabled(toggle.isChecked);
|
||||
}
|
||||
}
|
||||
9
assets/scripts/AudioSettingsUI.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "e6a5f56b-bc7d-48ad-82cf-23ab8d7da791",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
50
assets/scripts/BoardShape.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
export type BoardShapeName = "rectangle" | "L_shape" | "T_shape" | "cross_shape" | "diamond" | "custom";
|
||||
|
||||
export const BoardShapes: Record<BoardShapeName, number[][]> = {
|
||||
rectangle: [
|
||||
[1,1,1,1,1,1],
|
||||
[1,1,1,1,1,1],
|
||||
[1,1,1,1,1,1],
|
||||
[1,1,1,1,1,1],
|
||||
[1,1,1,1,1,1],
|
||||
],
|
||||
L_shape: [
|
||||
[1,1,1,0,0,0],
|
||||
[1,1,1,0,0,0],
|
||||
[1,1,1,1,1,1],
|
||||
[1,1,1,1,1,1],
|
||||
],
|
||||
T_shape: [
|
||||
[1,1,1,1,1,1,1],
|
||||
[0,0,1,1,1,0,0],
|
||||
[0,0,1,1,1,0,0],
|
||||
[0,0,1,1,1,0,0],
|
||||
],
|
||||
cross_shape: [
|
||||
[0,0,1,1,0,0],
|
||||
[0,0,1,1,0,0],
|
||||
[1,1,1,1,1,1],
|
||||
[0,0,1,1,0,0],
|
||||
[0,0,1,1,0,0],
|
||||
],
|
||||
diamond: [
|
||||
[0,0,0,1,0,0,0],
|
||||
[0,0,1,1,1,0,0],
|
||||
[0,1,1,1,1,1,0],
|
||||
[1,1,1,1,1,1,1],
|
||||
[0,1,1,1,1,1,0],
|
||||
[0,0,1,1,1,0,0],
|
||||
[0,0,0,1,0,0,0],
|
||||
[0,0,0,1,0,0,0],
|
||||
],
|
||||
custom: [
|
||||
[0,0,0,0,-1,0,0],
|
||||
[0,0,0,0,-1,0,0],
|
||||
[0,0,0,0,-1,0,0],
|
||||
[0,0,0,0,1,1,1],
|
||||
[0,0,0,0,1,0,0],
|
||||
[0,0,0,0,0,0,0],
|
||||
[0,0,0,0,0,0,0],
|
||||
[0,0,0,0,0,0,0],
|
||||
]
|
||||
};
|
||||
9
assets/scripts/BoardShape.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "5ff0aad1-47ce-41a6-9dfd-25e0d722b769",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
195
assets/scripts/ButtonBadge.ts
Normal file
@@ -0,0 +1,195 @@
|
||||
import { _decorator, Component, Node, Label, sys } from 'cc';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('ButtonBadge')
|
||||
export class ButtonBadge extends Component {
|
||||
@property(Node)
|
||||
hint_badge: Node | null = null;
|
||||
|
||||
@property(Label)
|
||||
hint_countLabel: Label | null = null;
|
||||
|
||||
@property(Node)
|
||||
hint_adIcon: Node | null = null;
|
||||
|
||||
@property(Node)
|
||||
shuffle_badge: Node | null = null;
|
||||
|
||||
@property(Label)
|
||||
shuffle_countLabel: Label | null = null;
|
||||
|
||||
@property(Node)
|
||||
shuffle_adIcon: Node | null = null;
|
||||
|
||||
@property(Node)
|
||||
magic_badge: Node | null = null;
|
||||
|
||||
@property(Label)
|
||||
magic_countLabel: Label | null = null;
|
||||
|
||||
@property(Node)
|
||||
magic_adIcon: Node | null = null;
|
||||
|
||||
private _hint_count: number = 0;
|
||||
private _hint_storageKey: string = "hint_button_usage_count";
|
||||
|
||||
private _shuffle_count: number = 0;
|
||||
private _shuffle_storageKey: string = "shuffle_button_usage_count";
|
||||
|
||||
private _magic_count: number = 0;
|
||||
private _magic_storageKey: string = "magic_button_usage_count";
|
||||
|
||||
onLoad() {
|
||||
// 从本地缓存读取
|
||||
const hintSaved = sys.localStorage.getItem(this._hint_storageKey);
|
||||
const shuffleSaved = sys.localStorage.getItem(this._shuffle_storageKey);
|
||||
const magicSaved = sys.localStorage.getItem(this._magic_storageKey);
|
||||
this._hint_count = hintSaved ? parseInt(hintSaved) : 3; // 默认初始 3 次
|
||||
this._shuffle_count = shuffleSaved ? parseInt(shuffleSaved) : 3; // 默认初始 3 次
|
||||
this._magic_count = magicSaved ? parseInt(magicSaved) : 3; // 默认初始 3 次
|
||||
console.log('load', this._shuffle_count, this._magic_count)
|
||||
this.updateHintView();
|
||||
this.updateShuffleView();
|
||||
this.updateMagicView();
|
||||
}
|
||||
|
||||
private updateHintView() {
|
||||
if (!this.hint_badge) return;
|
||||
|
||||
if (this._hint_count > 0) {
|
||||
this.hint_badge.active = true;
|
||||
if (this.hint_countLabel) {
|
||||
this.hint_countLabel.string = this._hint_count.toString();
|
||||
this.hint_countLabel.node.active = true;
|
||||
}
|
||||
if (this.hint_adIcon) this.hint_adIcon.active = false;
|
||||
} else {
|
||||
this.hint_badge.active = true;
|
||||
if (this.hint_countLabel) this.hint_countLabel.node.active = false;
|
||||
if (this.hint_adIcon) this.hint_adIcon.active = true;
|
||||
}
|
||||
}
|
||||
|
||||
private updateShuffleView() {
|
||||
if (!this.shuffle_badge) return;
|
||||
|
||||
if (this._shuffle_count > 0) {
|
||||
this.shuffle_badge.active = true;
|
||||
if (this.shuffle_countLabel) {
|
||||
this.shuffle_countLabel.string = this._shuffle_count.toString();
|
||||
this.shuffle_countLabel.node.active = true;
|
||||
}
|
||||
if (this.shuffle_adIcon) this.shuffle_adIcon.active = false;
|
||||
} else {
|
||||
this.shuffle_badge.active = true;
|
||||
if (this.shuffle_countLabel) this.shuffle_countLabel.node.active = false;
|
||||
if (this.shuffle_adIcon) this.shuffle_adIcon.active = true;
|
||||
}
|
||||
}
|
||||
|
||||
private updateMagicView() {
|
||||
if (!this.magic_badge) return;
|
||||
|
||||
if (this._magic_count > 0) {
|
||||
this.magic_badge.active = true;
|
||||
if (this.magic_countLabel) {
|
||||
this.magic_countLabel.string = this._magic_count.toString();
|
||||
this.magic_countLabel.node.active = true;
|
||||
}
|
||||
if (this.magic_adIcon) this.magic_adIcon.active = false;
|
||||
} else {
|
||||
this.magic_badge.active = true;
|
||||
if (this.magic_countLabel) this.magic_countLabel.node.active = false;
|
||||
if (this.magic_adIcon) this.magic_adIcon.active = true;
|
||||
}
|
||||
}
|
||||
|
||||
private saveHint() {
|
||||
sys.localStorage.setItem(this._hint_storageKey, this._hint_count.toString());
|
||||
}
|
||||
|
||||
private saveShuffle() {
|
||||
sys.localStorage.setItem(this._shuffle_storageKey, this._shuffle_count.toString());
|
||||
}
|
||||
|
||||
private saveMagic() {
|
||||
sys.localStorage.setItem(this._magic_storageKey, this._magic_count.toString());
|
||||
}
|
||||
|
||||
public useHintOnce(): boolean {
|
||||
if (this._hint_count > 0) {
|
||||
this._hint_count--;
|
||||
this.saveHint();
|
||||
this.updateHintView();
|
||||
return true; // 成功使用
|
||||
} else {
|
||||
// this.showAdAndReward();
|
||||
return false; // 没次数,去看广告
|
||||
}
|
||||
}
|
||||
|
||||
public useShuffleOnce(): boolean {
|
||||
if (this._shuffle_count > 0) {
|
||||
this._shuffle_count--;
|
||||
this.saveShuffle();
|
||||
this.updateShuffleView();
|
||||
return true; // 成功使用
|
||||
} else {
|
||||
// this.showAdAndReward();
|
||||
return false; // 没次数,去看广告
|
||||
}
|
||||
}
|
||||
|
||||
public useMagicOnce(): boolean {
|
||||
if (this._magic_count > 0) {
|
||||
this._magic_count--;
|
||||
this.saveMagic();
|
||||
this.updateMagicView();
|
||||
return true; // 成功使用
|
||||
} else {
|
||||
// this.showAdAndReward();
|
||||
return false; // 没次数,去看广告
|
||||
}
|
||||
}
|
||||
|
||||
public getHintCount() {
|
||||
return this._hint_count;
|
||||
}
|
||||
|
||||
public getShuffleCount() {
|
||||
return this._shuffle_count;
|
||||
}
|
||||
|
||||
public getMagicCount() {
|
||||
return this._magic_count;
|
||||
}
|
||||
|
||||
public showAdAndReward(type) {
|
||||
// ⚠️ 这里接入广告 SDK
|
||||
console.log("显示广告...");
|
||||
|
||||
// 假设广告结束回调
|
||||
if(type === 'hint') this.onAdHintComplete();
|
||||
if(type === 'shuffle') this.onAdShuffleComplete();
|
||||
if(type === 'magic') this.onAdMagicComplete();
|
||||
|
||||
}
|
||||
|
||||
private onAdHintComplete() {
|
||||
this._hint_count += 3;
|
||||
this.saveHint();
|
||||
this.updateHintView();
|
||||
}
|
||||
|
||||
private onAdShuffleComplete() {
|
||||
this._shuffle_count += 3;
|
||||
this.saveShuffle();
|
||||
this.updateShuffleView();
|
||||
}
|
||||
|
||||
private onAdMagicComplete() {
|
||||
this._magic_count += 3;
|
||||
this.saveMagic();
|
||||
this.updateMagicView();
|
||||
}
|
||||
}
|
||||
9
assets/scripts/ButtonBadge.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "718c3d80-1392-4a19-9a8c-31e59d8b5627",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
232
assets/scripts/DragManager.ts
Normal file
@@ -0,0 +1,232 @@
|
||||
import { Node, Vec3, tween } from "cc";
|
||||
|
||||
export interface DragCell {
|
||||
r: number;
|
||||
c: number;
|
||||
type: number;
|
||||
node: Node;
|
||||
}
|
||||
|
||||
export interface DragGroup {
|
||||
cells: DragCell[];
|
||||
dirR: number;
|
||||
dirC: number;
|
||||
maxSteps: number;
|
||||
}
|
||||
|
||||
export class DragManager {
|
||||
private board: number[][];
|
||||
private blockNodes: (Node | null)[][];
|
||||
private rows: number;
|
||||
private cols: number;
|
||||
private blockSize: number;
|
||||
|
||||
constructor(
|
||||
board: number[][],
|
||||
blockNodes: (Node | null)[][],
|
||||
rows: number,
|
||||
cols: number,
|
||||
blockSize: number,
|
||||
) {
|
||||
this.board = board;
|
||||
this.blockNodes = blockNodes;
|
||||
this.rows = rows;
|
||||
this.cols = cols;
|
||||
this.blockSize = blockSize;
|
||||
}
|
||||
|
||||
/** 查找拖动组(从点击格子 + 方向出发) */
|
||||
findDragGroup(
|
||||
r: number,
|
||||
c: number,
|
||||
dirR: number,
|
||||
dirC: number,
|
||||
): { r: number; c: number }[] {
|
||||
if (this.board[r][c] < 0) return [];
|
||||
|
||||
const group: { r: number; c: number }[] = [];
|
||||
|
||||
// 包含起点
|
||||
group.push({ r, c });
|
||||
|
||||
if (dirR === 0 && dirC === 0) {
|
||||
// 无方向,返回只有自己
|
||||
return group;
|
||||
}
|
||||
|
||||
if (dirR !== 0) {
|
||||
// 垂直方向,向前方向查找
|
||||
// 前面方向就是 dirR 方向(正负决定上或下)
|
||||
|
||||
let rr = r + dirR;
|
||||
while (rr >= 0 && rr < this.rows) {
|
||||
if (this.board[rr][c] >= 0) {
|
||||
if (dirR > 0) {
|
||||
// 向下,push后面
|
||||
group.push({ r: rr, c });
|
||||
} else {
|
||||
// 向上,unshift前面
|
||||
group.unshift({ r: rr, c });
|
||||
}
|
||||
rr += dirR;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (dirC !== 0) {
|
||||
// 水平方向,向前方向查找
|
||||
// 前面方向就是 dirC 方向(正负决定左或右)
|
||||
|
||||
let cc = c + dirC;
|
||||
while (cc >= 0 && cc < this.cols) {
|
||||
if (this.board[r][cc] >= 0) {
|
||||
if (dirC > 0) {
|
||||
// 向右,push后面
|
||||
group.push({ r, c: cc });
|
||||
} else {
|
||||
// 向左,unshift前面
|
||||
group.unshift({ r, c: cc });
|
||||
}
|
||||
cc += dirC;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
/** 计算最多能移动多少格 */
|
||||
countEmptyStepsGroup(
|
||||
group: { r: number; c: number }[],
|
||||
dirR: number,
|
||||
dirC: number,
|
||||
): number {
|
||||
if (group.length === 0) return 0;
|
||||
// 按滑动方向,找整组前方连续空格最小值
|
||||
if (dirR !== 0) {
|
||||
// 纵向滑动,找组中最顶部或最底部行号
|
||||
const rows = group.map((g) => g.r);
|
||||
const col = group[0].c;
|
||||
const boundaryRow = dirR === 1 ? Math.max(...rows) : Math.min(...rows);
|
||||
let count = 0;
|
||||
let checkRow = boundaryRow + dirR;
|
||||
while (
|
||||
checkRow >= 0 &&
|
||||
checkRow < this.rows &&
|
||||
this.board[checkRow][col] === -1
|
||||
) {
|
||||
count++;
|
||||
checkRow += dirR;
|
||||
}
|
||||
return count;
|
||||
} else {
|
||||
// 横向滑动,找组中最左或最右列号
|
||||
const cols = group.map((g) => g.c);
|
||||
const row = group[0].r;
|
||||
const boundaryCol = dirC === 1 ? Math.max(...cols) : Math.min(...cols);
|
||||
let count = 0;
|
||||
let checkCol = boundaryCol + dirC;
|
||||
while (
|
||||
checkCol >= 0 &&
|
||||
checkCol < this.cols &&
|
||||
this.board[row][checkCol] === -1
|
||||
) {
|
||||
count++;
|
||||
checkCol += dirC;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
/** 执行拖动中的偏移 */
|
||||
public applyDragOffset(
|
||||
draggingGroup,
|
||||
maxSteps: number,
|
||||
dirR: number,
|
||||
dirC: number,
|
||||
dy: number,
|
||||
dx: number,
|
||||
) {
|
||||
// 计算偏移量,滑动方向相反时置0
|
||||
let offset = dirR !== 0 ? dy : dx;
|
||||
|
||||
if (
|
||||
(dirR === -1 && offset <= 0) ||
|
||||
(dirR === 1 && offset >= 0) ||
|
||||
(dirC === 1 && offset <= 0) ||
|
||||
(dirC === -1 && offset >= 0)
|
||||
)
|
||||
offset = 0;
|
||||
|
||||
const maxOffset = maxSteps * this.blockSize;
|
||||
if (Math.abs(offset) > maxOffset) offset = maxOffset * Math.sign(offset);
|
||||
|
||||
// 整组方块移动
|
||||
draggingGroup.forEach(({ r, c }) => {
|
||||
const block = this.blockNodes[r][c];
|
||||
if (!block) return;
|
||||
const startPos = this.getPos(r, c);
|
||||
if (dirR !== 0) {
|
||||
block.setPosition(startPos.x, startPos.y + offset, 0);
|
||||
} else {
|
||||
block.setPosition(startPos.x + offset, startPos.y, 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getPos(row: number, col: number): Vec3 {
|
||||
const x =
|
||||
col * this.blockSize -
|
||||
(this.cols * this.blockSize) / 2 +
|
||||
this.blockSize / 2;
|
||||
const y =
|
||||
(this.rows * this.blockSize) / 2 -
|
||||
row * this.blockSize -
|
||||
this.blockSize / 2;
|
||||
return new Vec3(x, y, 0);
|
||||
}
|
||||
|
||||
/** 松手:确认移动 or 回弹 */
|
||||
public async settleDrag(
|
||||
blocksInfo: DragCell[],
|
||||
reset: boolean,
|
||||
steps?: number,
|
||||
slidingDir?,
|
||||
) {
|
||||
if (reset) {
|
||||
await this.resetGroup(blocksInfo);
|
||||
} else {
|
||||
await this.applyMove(blocksInfo, steps, slidingDir);
|
||||
}
|
||||
}
|
||||
|
||||
/** 执行动画移动 */
|
||||
private async applyMove(blocksInfo: DragCell[], steps: number, slidingDir) {
|
||||
blocksInfo.forEach(({ r, c, type, node }) => {
|
||||
const tr = r + slidingDir.dirR * steps;
|
||||
const tc = c + slidingDir.dirC * steps;
|
||||
|
||||
this.board[tr][tc] = type;
|
||||
this.blockNodes[tr][tc] = node;
|
||||
if (node) node.setPosition(this.getPos(tr, tc));
|
||||
});
|
||||
}
|
||||
|
||||
/** 回弹动画 */
|
||||
private async resetGroup(blocksInfo) {
|
||||
const promises = blocksInfo.map(({ r, c, type, node }) => {
|
||||
const targetPos = this.getPos(r, c);
|
||||
this.board[r][c] = type;
|
||||
this.blockNodes[r][c] = node;
|
||||
return new Promise<void>((resolve) => {
|
||||
tween(node)
|
||||
.to(0.15, { position: targetPos })
|
||||
.call(() => resolve()) // ✅ 修复
|
||||
.start();
|
||||
});
|
||||
});
|
||||
await Promise.all(promises);
|
||||
}
|
||||
}
|
||||
9
assets/scripts/DragManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "6426afbd-e807-450a-b364-9b404873d8b3",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
1386
assets/scripts/GameManager.ts
Normal file
9
assets/scripts/GameManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "f5caabc4-7ab4-4966-ad71-81c18beb874c",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
75
assets/scripts/HintManager.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import { _decorator, Component, Node, tween, Vec3, Sprite, UITransform } from "cc";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("HintManager")
|
||||
export class HintManager extends Component {
|
||||
@property(Node)
|
||||
handNode: Node | null = null; // 编辑器里拖一只手的 sprite 节点
|
||||
|
||||
private runningTween: any = null;
|
||||
|
||||
// 传入 getHint 的结果
|
||||
showHint(hint: any, getPos: (r: number, c: number) => Vec3) {
|
||||
if (!this.handNode) return;
|
||||
|
||||
// 清理之前的动画
|
||||
if (this.runningTween) {
|
||||
this.runningTween.stop();
|
||||
this.runningTween = null;
|
||||
}
|
||||
|
||||
if (!hint.from || !hint.dir || hint.steps == null) return;
|
||||
|
||||
const { from, dir, steps } = hint;
|
||||
const dr = dir.dr;
|
||||
const dc = dir.dc;
|
||||
|
||||
// 生成路径格子(起点 + dir * step)
|
||||
const pathCells: { r: number; c: number }[] = [];
|
||||
for (let s = 0; s <= steps; s++) {
|
||||
pathCells.push({ r: from.r + dr * s, c: from.c + dc * s });
|
||||
}
|
||||
|
||||
// 转换成 UI 坐标
|
||||
const positions: Vec3[] = pathCells.map(cell => getPos(cell.r, cell.c));
|
||||
|
||||
const startPos = positions[0];
|
||||
this.handNode.active = true;
|
||||
this.handNode.setSiblingIndex(this.handNode.parent.children.length - 1);
|
||||
this.handNode.setPosition(startPos);
|
||||
|
||||
// 构建单向滑动动画(格子之间平均时间)
|
||||
const durationPerCell = 1 / steps;
|
||||
let tw = tween(this.handNode);
|
||||
for (let i = 1; i < positions.length; i++) {
|
||||
tw = tw.to(durationPerCell, { position: positions[i] });
|
||||
}
|
||||
|
||||
// 到终点瞬间回起点
|
||||
tw = tw.call(() => this.handNode.setPosition(startPos));
|
||||
|
||||
// 重复 3 次
|
||||
this.runningTween = tween(this.handNode)
|
||||
.repeat(3, tw)
|
||||
.call(() => {
|
||||
this.handNode.active = false;
|
||||
this.runningTween = null;
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
cancelHint() {
|
||||
if (this.runningTween) {
|
||||
try {
|
||||
this.runningTween.stop();
|
||||
} catch (e) {
|
||||
console.warn("停止手势动画失败", e);
|
||||
}
|
||||
this.runningTween = null;
|
||||
}
|
||||
if (this.handNode) {
|
||||
this.handNode.active = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
9
assets/scripts/HintManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "1fafa285-6dac-4a29-8a97-fbb3d3389996",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
267
assets/scripts/LevelBuilder.ts
Normal file
@@ -0,0 +1,267 @@
|
||||
import {
|
||||
Node,
|
||||
Prefab,
|
||||
instantiate,
|
||||
Sprite,
|
||||
SpriteFrame,
|
||||
UITransform,
|
||||
Vec3,
|
||||
} from "cc";
|
||||
import { BoardShapes, BoardShapeName } from "./BoardShape";
|
||||
|
||||
export interface LevelConfig {
|
||||
rows?: number;
|
||||
cols?: number;
|
||||
blockSize?: number;
|
||||
tileTypes?: number;
|
||||
currentShape?: BoardShapeName;
|
||||
isTutorial?: boolean;
|
||||
fixedBoard?: number[][];
|
||||
}
|
||||
|
||||
export class LevelBuilder {
|
||||
public board: number[][] = [];
|
||||
public blockNodes: (Node | null)[][] = [];
|
||||
public rows: number = 0;
|
||||
public cols: number = 0;
|
||||
|
||||
private node: Node;
|
||||
private blockPrefab: Prefab;
|
||||
private spriteFrames: SpriteFrame[] = [];
|
||||
private blockSize: number = 100;
|
||||
private tileTypes: number = 5;
|
||||
|
||||
public currentShape: BoardShapeName = "rectangle";
|
||||
private fixedBoard: number[][] | null = null;
|
||||
|
||||
constructor(
|
||||
node: Node,
|
||||
blockPrefab: Prefab,
|
||||
spriteFrames: SpriteFrame[],
|
||||
config?: LevelConfig,
|
||||
) {
|
||||
this.node = node;
|
||||
this.blockPrefab = blockPrefab;
|
||||
this.spriteFrames = spriteFrames;
|
||||
|
||||
if (config) {
|
||||
this.blockSize = config.blockSize ?? this.blockSize;
|
||||
this.tileTypes = config.tileTypes ?? this.tileTypes;
|
||||
if (config.currentShape) this.currentShape = config.currentShape;
|
||||
if (config.fixedBoard) this.fixedBoard = config.fixedBoard;
|
||||
}
|
||||
}
|
||||
|
||||
public buildBoard(): void {
|
||||
if (this.fixedBoard) {
|
||||
this.buildFixedBoard();
|
||||
return;
|
||||
}
|
||||
|
||||
const shapeTemplate = BoardShapes[this.currentShape];
|
||||
if (!shapeTemplate) throw new Error(`Shape "${this.currentShape}" 未定义`);
|
||||
|
||||
const maxCols = Math.max(...shapeTemplate.map((row) => row.length));
|
||||
const rows = shapeTemplate.length;
|
||||
|
||||
// 自动补齐矩形
|
||||
const fixedTemplate: number[][] = [];
|
||||
for (let r = 0; r < rows; r++) {
|
||||
fixedTemplate[r] = [];
|
||||
for (let c = 0; c < maxCols; c++) {
|
||||
fixedTemplate[r][c] = shapeTemplate[r][c] ?? 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 收集可用格子
|
||||
const validCells = [];
|
||||
for (let r = 0; r < rows; r++) {
|
||||
for (let c = 0; c < maxCols; c++) {
|
||||
if (fixedTemplate[r][c] === 1) validCells.push({ r, c });
|
||||
}
|
||||
}
|
||||
|
||||
if (validCells.length % 2 !== 0) throw new Error("有效格子数量必须为偶数");
|
||||
|
||||
// 随机生成配对
|
||||
let tiles: number[] = [];
|
||||
for (let i = 0; i < validCells.length / 2; i++) {
|
||||
const id = i % this.tileTypes;
|
||||
tiles.push(id, id);
|
||||
}
|
||||
for (let i = tiles.length - 1; i > 0; i--) {
|
||||
const j = Math.floor(Math.random() * (i + 1));
|
||||
[tiles[i], tiles[j]] = [tiles[j], tiles[i]];
|
||||
}
|
||||
|
||||
let tileIndex = 0;
|
||||
this.board = [];
|
||||
this.blockNodes = [];
|
||||
this.rows = rows;
|
||||
this.cols = maxCols;
|
||||
|
||||
for (let r = 0; r < rows; r++) {
|
||||
this.board[r] = [];
|
||||
this.blockNodes[r] = [];
|
||||
for (let c = 0; c < maxCols; c++) {
|
||||
if (fixedTemplate[r][c] === 1) {
|
||||
const tileId = tiles[tileIndex++];
|
||||
this.board[r][c] = tileId;
|
||||
const block = this.createNormalBlock(tileId);
|
||||
block.setPosition(this.getPos(r, c));
|
||||
this.node.addChild(block);
|
||||
this.blockNodes[r][c] = block;
|
||||
} else if (fixedTemplate[r][c] === -1) {
|
||||
this.board[r][c] = -1;
|
||||
this.blockNodes[r][c] = null;
|
||||
} else {
|
||||
this.board[r][c] = -2;
|
||||
const stone = this.createStoneBlock();
|
||||
stone.setPosition(this.getPos(r, c));
|
||||
this.node.addChild(stone);
|
||||
this.blockNodes[r][c] = stone;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private buildFixedBoard() {
|
||||
this.rows = this.fixedBoard.length;
|
||||
this.cols = this.fixedBoard[0].length;
|
||||
this.board = [];
|
||||
this.blockNodes = [];
|
||||
|
||||
for (let r = 0; r < this.rows; r++) {
|
||||
this.board[r] = [];
|
||||
this.blockNodes[r] = [];
|
||||
for (let c = 0; c < this.cols; c++) {
|
||||
const val = this.fixedBoard[r][c];
|
||||
this.board[r][c] = val;
|
||||
|
||||
if (val >= 0) {
|
||||
const block = this.createNormalBlock(val);
|
||||
block.setPosition(this.getPos(r, c));
|
||||
this.node.addChild(block);
|
||||
this.blockNodes[r][c] = block;
|
||||
} else if (val === -1) {
|
||||
this.blockNodes[r][c] = null;
|
||||
} else if (val === -2) {
|
||||
const stone = this.createStoneBlock();
|
||||
stone.setPosition(this.getPos(r, c));
|
||||
this.node.addChild(stone);
|
||||
this.blockNodes[r][c] = stone;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private createNormalBlock(tileId: number) {
|
||||
const block = instantiate(this.blockPrefab);
|
||||
const bgNode = block.getChildByName("Bg");
|
||||
const bgUI =
|
||||
bgNode.getComponent(UITransform) ?? bgNode.addComponent(UITransform);
|
||||
bgUI.setContentSize(this.blockSize, this.blockSize);
|
||||
|
||||
const iconNode = block.getChildByName("Icon");
|
||||
const iconUI =
|
||||
iconNode.getComponent(UITransform) ?? iconNode.addComponent(UITransform);
|
||||
const iconUI_sprite = iconNode.getComponent(Sprite)!;
|
||||
iconUI_sprite.spriteFrame = this.spriteFrames[tileId];
|
||||
iconUI.setContentSize(this.blockSize * 0.7, this.blockSize * 0.7);
|
||||
iconNode.setPosition(0, 0, 0);
|
||||
|
||||
return block;
|
||||
}
|
||||
|
||||
private createStoneBlock() {
|
||||
const stone = instantiate(this.blockPrefab);
|
||||
const bgNode = stone.getChildByName("Bg");
|
||||
const bgUI =
|
||||
bgNode.getComponent(UITransform) ?? bgNode.addComponent(UITransform);
|
||||
bgUI.setContentSize(this.blockSize, this.blockSize);
|
||||
|
||||
const iconNode = stone.getChildByName("Icon");
|
||||
iconNode.active = false;
|
||||
|
||||
return stone;
|
||||
}
|
||||
|
||||
private getPos(row: number, col: number): Vec3 {
|
||||
const x =
|
||||
col * this.blockSize -
|
||||
(this.cols * this.blockSize) / 2 +
|
||||
this.blockSize / 2;
|
||||
const y =
|
||||
(this.rows * this.blockSize) / 2 -
|
||||
row * this.blockSize -
|
||||
this.blockSize / 2;
|
||||
return new Vec3(x, y, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建 UI 节点,并设置类型和位置
|
||||
*/
|
||||
public createBlockNode(type: number, r: number, c: number): Node {
|
||||
let block: Node;
|
||||
|
||||
if (type >= 0) {
|
||||
// 普通方块
|
||||
block = this.createNormalBlock(type);
|
||||
} else if (type === -2) {
|
||||
// 石头障碍
|
||||
block = this.createStoneBlock();
|
||||
} else {
|
||||
// 空格不需要节点
|
||||
return null!;
|
||||
}
|
||||
|
||||
block.setPosition(this.getPos(r, c));
|
||||
this.node.addChild(block);
|
||||
|
||||
return block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新节点的贴图/颜色/数字等显示
|
||||
*/
|
||||
public setBlockType(node: Node, type: number): void {
|
||||
if (!node) return;
|
||||
|
||||
const iconNode = node.getChildByName("Icon");
|
||||
if (!iconNode) return;
|
||||
|
||||
if (type >= 0) {
|
||||
// 普通方块
|
||||
iconNode.active = true;
|
||||
const iconUI =
|
||||
iconNode.getComponent(UITransform) ??
|
||||
iconNode.addComponent(UITransform);
|
||||
const iconUI_sprite = iconNode.getComponent(Sprite)!;
|
||||
iconUI_sprite.spriteFrame = this.spriteFrames[type];
|
||||
iconUI.setContentSize(this.blockSize * 0.7, this.blockSize * 0.7);
|
||||
iconNode.setPosition(0, 0, 0);
|
||||
} else if (type === -2) {
|
||||
// 石头
|
||||
iconNode.active = false;
|
||||
} else {
|
||||
// 空格
|
||||
iconNode.active = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新节点的坐标位置(UI 上)
|
||||
*/
|
||||
public setBlockPosition(node: Node, r: number, c: number): void {
|
||||
if (!node) return;
|
||||
node.setPosition(this.getPos(r, c));
|
||||
}
|
||||
|
||||
/**
|
||||
* 销毁节点或隐藏
|
||||
*/
|
||||
public destroyBlockNode(node: Node): void {
|
||||
if (!node) return;
|
||||
node.destroy(); // 如果想复用可改为 node.active = false
|
||||
}
|
||||
}
|
||||
9
assets/scripts/LevelBuilder.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "b69764f9-e98c-4d95-afa7-0b2649089cb5",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
131
assets/scripts/LevelManager.ts
Normal file
@@ -0,0 +1,131 @@
|
||||
import { sys } from "cc";
|
||||
import { LevelConfig } from "./LevelBuilder";
|
||||
import { BoardShapeName } from "./BoardShape";
|
||||
|
||||
export class LevelManager {
|
||||
private static _instance: LevelManager;
|
||||
public static get instance() {
|
||||
if (!this._instance) this._instance = new LevelManager();
|
||||
return this._instance;
|
||||
}
|
||||
|
||||
private levelIndex: number = 0;
|
||||
private unlockedLevels: number = 1; // 已解锁关卡数
|
||||
private STORAGE_KEY = "MY_GAME_PROGRESS";
|
||||
private TUTORIAL_KEY = "TUTORIAL_COMPLETED";
|
||||
|
||||
// 预设关卡配置表(可以继续扩展) //rectangle L_shape T_shape cross_shape
|
||||
private levels: LevelConfig[] = [
|
||||
{ currentShape: "rectangle", blockSize: 100, tileTypes: 5 },
|
||||
{ currentShape: "L_shape", blockSize: 90, tileTypes: 4 },
|
||||
{ currentShape: "T_shape", blockSize: 80, tileTypes: 3 },
|
||||
{ currentShape: "cross_shape", blockSize: 70, tileTypes: 3 },
|
||||
{ currentShape: "diamond", blockSize: 80, tileTypes: 4 },
|
||||
];
|
||||
|
||||
constructor() {
|
||||
this.loadProgress();
|
||||
}
|
||||
|
||||
public isTutorialCompleted(): boolean {
|
||||
return sys.localStorage.getItem(this.TUTORIAL_KEY) === "true";
|
||||
}
|
||||
|
||||
public setTutorialCompleted() {
|
||||
sys.localStorage.setItem(this.TUTORIAL_KEY, "true");
|
||||
}
|
||||
|
||||
public getTutorialLevel(): LevelConfig {
|
||||
return {
|
||||
isTutorial: true,
|
||||
tileTypes: 2,
|
||||
blockSize: 120,
|
||||
fixedBoard: [
|
||||
[0, 0, -1],
|
||||
[1, -1, 1]
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
public getCurrentLevel(): LevelConfig {
|
||||
if (!this.isTutorialCompleted()) {
|
||||
return this.getTutorialLevel();
|
||||
}
|
||||
|
||||
if (this.levelIndex < this.levels.length) {
|
||||
return this.levels[this.levelIndex];
|
||||
}
|
||||
console.log('随机关卡')
|
||||
return this.generateRandomLevel(this.levelIndex + 1);
|
||||
}
|
||||
|
||||
public nextLevel(): LevelConfig | null {
|
||||
if (!this.isTutorialCompleted()) {
|
||||
this.setTutorialCompleted();
|
||||
this.levelIndex = 0;
|
||||
this.saveProgress();
|
||||
return this.getCurrentLevel();
|
||||
}
|
||||
|
||||
this.levelIndex++;
|
||||
this.saveProgress();
|
||||
return this.getCurrentLevel();
|
||||
}
|
||||
|
||||
public reset() {
|
||||
this.levelIndex = 0;
|
||||
this.unlockedLevels = 1;
|
||||
this.saveProgress();
|
||||
// 重置时是否重置教学?通常不用,除非显式清除数据
|
||||
// sys.localStorage.removeItem(this.TUTORIAL_KEY);
|
||||
}
|
||||
|
||||
/** 本地存储进度 */
|
||||
private saveProgress() {
|
||||
const data = {
|
||||
levelIndex: this.levelIndex,
|
||||
unlockedLevels: this.unlockedLevels,
|
||||
};
|
||||
sys.localStorage.setItem(this.STORAGE_KEY, JSON.stringify(data));
|
||||
}
|
||||
|
||||
/** 读取本地存储 */
|
||||
private loadProgress() {
|
||||
const json = sys.localStorage.getItem(this.STORAGE_KEY);
|
||||
if (json) {
|
||||
try {
|
||||
const data = JSON.parse(json);
|
||||
this.levelIndex = data.levelIndex ?? 0;
|
||||
this.unlockedLevels = data.unlockedLevels ?? 1;
|
||||
|
||||
// 如果是老玩家(已解锁超过1关),跳过教学
|
||||
if (this.unlockedLevels > 1 && !this.isTutorialCompleted()) {
|
||||
this.setTutorialCompleted();
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("进度解析失败, 重置进度");
|
||||
this.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private generateRandomLevel(id: number): LevelConfig {
|
||||
const allShapes: BoardShapeName[] = ["rectangle", "L_shape", "T_shape", "cross_shape", "diamond"];
|
||||
|
||||
// 随机选一个形状
|
||||
const shape = allShapes[Math.floor(Math.random() * allShapes.length)];
|
||||
|
||||
// 随机决定方块种类 (6~12)
|
||||
const tileTypes = 5;
|
||||
// const tileTypes = 6 + Math.floor(Math.random() * 7);
|
||||
|
||||
// 随机大小 (70~100)
|
||||
const blockSize = 70 + Math.floor(Math.random() * 31);
|
||||
|
||||
return {
|
||||
currentShape: shape,
|
||||
tileTypes,
|
||||
blockSize,
|
||||
};
|
||||
}
|
||||
}
|
||||
9
assets/scripts/LevelManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "f6594edb-0e1e-41bc-b818-0c9b51a816ff",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
64
assets/scripts/Loading.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
import { _decorator, Component, ProgressBar, Label, assetManager, director, SpriteFrame, Prefab } from 'cc';
|
||||
import { ResourceManager } from './ResourceManager';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('Loading')
|
||||
export class Loading extends Component {
|
||||
@property(ProgressBar)
|
||||
progressBar: ProgressBar | null = null;
|
||||
|
||||
@property(Label)
|
||||
progressLabel: Label | null = null;
|
||||
|
||||
@property
|
||||
nextScene: string = "StartScene";
|
||||
|
||||
onLoad() {
|
||||
// if (typeof wx !== 'undefined' && wx.hideLoading) {
|
||||
// wx.hideLoading();
|
||||
// }
|
||||
this.startLoading();
|
||||
}
|
||||
|
||||
startLoading() {
|
||||
assetManager.loadBundle("resources", (err, bundle) => {
|
||||
if (err) {
|
||||
console.error("加载 resources 失败:", err);
|
||||
return;
|
||||
}
|
||||
console.log(11111111111,2222)
|
||||
|
||||
// 加载整个 resources 下的内容
|
||||
bundle.loadDir(".", (finished, total, item) => {
|
||||
let ratio = finished / total;
|
||||
console.log(11111111111,ratio)
|
||||
|
||||
this.updateProgress(ratio);
|
||||
}, (err, assets) => {
|
||||
if (err) {
|
||||
console.error("资源加载失败:", err);
|
||||
return;
|
||||
}
|
||||
|
||||
// 缓存资源
|
||||
assets.forEach(asset => {
|
||||
ResourceManager.instance.set(asset.name, asset);
|
||||
asset.addRef(); // 增加引用计数,避免被自动释放
|
||||
});
|
||||
|
||||
// 进入主场景
|
||||
director.loadScene(this.nextScene);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updateProgress(ratio: number) {
|
||||
console.log(111111, ratio)
|
||||
if (this.progressBar) {
|
||||
this.progressBar.progress = ratio;
|
||||
}
|
||||
if (this.progressLabel) {
|
||||
this.progressLabel.string = `${Math.floor(ratio * 100)}%`;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
assets/scripts/Loading.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "5eac7988-bb99-4c65-a76c-37013eb0eac7",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
45
assets/scripts/ResourceManager.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { _decorator, Asset } from 'cc';
|
||||
const { ccclass } = _decorator;
|
||||
|
||||
@ccclass('ResourceManager')
|
||||
export class ResourceManager {
|
||||
private static _instance: ResourceManager;
|
||||
private cache: Map<string, Asset> = new Map();
|
||||
|
||||
static get instance(): ResourceManager {
|
||||
if (!this._instance) {
|
||||
this._instance = new ResourceManager();
|
||||
}
|
||||
return this._instance;
|
||||
}
|
||||
|
||||
/** 存资源 */
|
||||
set(key: string, asset: Asset) {
|
||||
this.cache.set(key, asset);
|
||||
}
|
||||
|
||||
/** 取资源 */
|
||||
get<T extends Asset>(key: string): T | undefined {
|
||||
return this.cache.get(key) as T | undefined;
|
||||
}
|
||||
|
||||
/** 是否存在 */
|
||||
has(key: string): boolean {
|
||||
return this.cache.has(key);
|
||||
}
|
||||
|
||||
/** 释放某个资源 */
|
||||
release(key: string) {
|
||||
const asset = this.cache.get(key);
|
||||
if (asset) {
|
||||
asset.decRef(); // 减少引用计数
|
||||
this.cache.delete(key);
|
||||
}
|
||||
}
|
||||
|
||||
/** 释放全部资源 */
|
||||
releaseAll() {
|
||||
this.cache.forEach(asset => asset.decRef());
|
||||
this.cache.clear();
|
||||
}
|
||||
}
|
||||
9
assets/scripts/ResourceManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "57226c7a-7652-40f6-a947-d9fc032231b0",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
160
assets/scripts/StartScene.ts
Normal file
@@ -0,0 +1,160 @@
|
||||
import {
|
||||
_decorator,
|
||||
Component,
|
||||
Node,
|
||||
tween,
|
||||
UIOpacity,
|
||||
Vec3,
|
||||
director,
|
||||
Button,
|
||||
AudioClip,
|
||||
AudioSource,
|
||||
Toggle,
|
||||
} from "cc";
|
||||
import { AudioManager, BGMType, SFXType } from "./AudioManager";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("StartScene")
|
||||
export class StartScene extends Component {
|
||||
@property(Node)
|
||||
background: Node = null;
|
||||
|
||||
@property(Node)
|
||||
logo: Node = null;
|
||||
|
||||
@property(Node)
|
||||
startButton: Node = null;
|
||||
|
||||
@property(Node)
|
||||
setting_node: Node = null;
|
||||
|
||||
@property(Node)
|
||||
setting_tab_node: Node = null;
|
||||
|
||||
@property(AudioClip)
|
||||
bg_audio: AudioClip = null;
|
||||
|
||||
@property(Toggle)
|
||||
bgmToggle: Toggle = null!;
|
||||
|
||||
@property(Toggle)
|
||||
sfxToggle: Toggle = null!;
|
||||
|
||||
onLoad() {
|
||||
const am = AudioManager.instance;
|
||||
|
||||
// 注册首页 BGM 和音效
|
||||
am.registerBGM(BGMType.Home, this.bg_audio);
|
||||
|
||||
// 初始化 Toggle 状态
|
||||
this.bgmToggle.isChecked = am.bgmEnabled;
|
||||
this.sfxToggle.isChecked = am.sfxEnabled;
|
||||
|
||||
// am.registerSFX(SFXType.Item, this.startClickClip);
|
||||
am.setCurBgm(BGMType.Home);
|
||||
am.playBGM(BGMType.Home);
|
||||
// 监听切换事件
|
||||
this.bgmToggle.node.on("toggle", this.onBgmToggleChanged, this);
|
||||
this.sfxToggle.node.on("toggle", this.onSfxToggleChanged, this);
|
||||
}
|
||||
|
||||
start() {
|
||||
// 初始化透明度
|
||||
const bgOpacity = this.background.addComponent(UIOpacity);
|
||||
bgOpacity.opacity = 0;
|
||||
|
||||
const logoOpacity = this.logo.addComponent(UIOpacity);
|
||||
logoOpacity.opacity = 0;
|
||||
this.logo.setScale(new Vec3(0.5, 0.5, 1));
|
||||
|
||||
const btnOpacity = this.startButton.addComponent(UIOpacity);
|
||||
btnOpacity.opacity = 0;
|
||||
|
||||
// 背景渐入
|
||||
tween(bgOpacity).to(1, { opacity: 255 }).start();
|
||||
|
||||
// Logo 缩放 + 渐入
|
||||
tween(logoOpacity).delay(0.5).to(1, { opacity: 255 }).start();
|
||||
|
||||
tween(this.logo)
|
||||
.delay(0.5)
|
||||
.to(1, { scale: new Vec3(1.1, 1.1, 1) })
|
||||
.to(0.3, { scale: new Vec3(1, 1, 1) })
|
||||
.start();
|
||||
|
||||
// 按钮呼吸动画
|
||||
tween(btnOpacity)
|
||||
.delay(1.2)
|
||||
.to(0.8, { opacity: 255 })
|
||||
.call(() => {
|
||||
this.playButtonBreathing();
|
||||
})
|
||||
.start();
|
||||
|
||||
// 按钮点击事件
|
||||
// this.startButton.on(Button.EventType.CLICK, this.onStartGame, this);
|
||||
}
|
||||
|
||||
onBgmToggleChanged(toggle: Toggle) {
|
||||
AudioManager.instance.setBGMEnabled(toggle.isChecked);
|
||||
}
|
||||
|
||||
onSfxToggleChanged(toggle: Toggle) {
|
||||
AudioManager.instance.setSFXEnabled(toggle.isChecked);
|
||||
}
|
||||
|
||||
playButtonBreathing() {
|
||||
tween(this.startButton)
|
||||
.repeatForever(
|
||||
tween()
|
||||
.to(0.6, { scale: new Vec3(1.1, 1.1, 1) })
|
||||
.to(0.6, { scale: new Vec3(1, 1, 1) })
|
||||
)
|
||||
.start();
|
||||
}
|
||||
|
||||
onStartGame() {
|
||||
// 按钮点击反馈动画
|
||||
tween(this.startButton)
|
||||
.to(0.1, { scale: new Vec3(0.9, 0.9, 1) })
|
||||
.to(0.1, { scale: new Vec3(1, 1, 1) })
|
||||
.call(() => {
|
||||
director.loadScene("s1"); // 这里替换为你的第一关场景名
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
onShowSettingTab() {
|
||||
this.setting_tab_node.active = true;
|
||||
}
|
||||
|
||||
onHideSettingTab() {
|
||||
this.setting_tab_node.active = false;
|
||||
}
|
||||
|
||||
onSwitchMusic(toggle) {
|
||||
// this.audioMgr.bgmSource = this.node.getComponent(AudioSource);
|
||||
|
||||
if (toggle.isChecked) {
|
||||
// this.audioMgr.setBGMEnabled(true);
|
||||
// this.audioMgr.playBGM(this.bg_audio);
|
||||
// this.playBgAudio();
|
||||
} else {
|
||||
// this.audioMgr.setBGMEnabled(false);
|
||||
// this.notPlayBgAudio();
|
||||
// this.audioMgr.playBGM(this.bg_audio);
|
||||
}
|
||||
}
|
||||
|
||||
playBgAudio() {
|
||||
const Audio = this.node.getComponent(AudioSource);
|
||||
Audio.clip = this.bg_audio;
|
||||
Audio.play();
|
||||
}
|
||||
|
||||
notPlayBgAudio() {
|
||||
const Audio = this.node.getComponent(AudioSource);
|
||||
Audio.clip = this.bg_audio;
|
||||
Audio.stop();
|
||||
}
|
||||
}
|
||||
9
assets/scripts/StartScene.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "0c27000f-a20c-4b07-9ac1-5c05df71c90e",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
9
assets/scripts/utils.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "c85a2ba2-7cde-4fdc-ae16-3f2718db5c2c",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
35
assets/scripts/utils/ScreenAdapter.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
// ScreenAdapter.ts
|
||||
import { _decorator, Component, view, ResolutionPolicy } from 'cc';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('ScreenAdapter')
|
||||
export class ScreenAdapter extends Component {
|
||||
@property
|
||||
designWidth: number = 1080; // 默认设计宽度
|
||||
|
||||
@property
|
||||
designHeight: number = 1920; // 默认设计高度
|
||||
|
||||
onLoad() {
|
||||
this.applyAdapter();
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用屏幕适配
|
||||
*/
|
||||
applyAdapter() {
|
||||
// const frameSize = view.getFrameSize();
|
||||
// const aspect = frameSize.width / frameSize.height;
|
||||
// const designAspect = this.designWidth / this.designHeight;
|
||||
|
||||
// if (aspect > designAspect) {
|
||||
// // 屏幕更宽 → 固定高度,保证上下完整
|
||||
// view.setDesignResolutionSize(this.designWidth, this.designHeight, ResolutionPolicy.FIXED_HEIGHT);
|
||||
// console.log('[ScreenAdapter] Use FIXED_HEIGHT, aspect =', aspect.toFixed(2));
|
||||
// } else {
|
||||
// // 屏幕更窄 → 固定宽度,保证左右完整
|
||||
// view.setDesignResolutionSize(this.designWidth, this.designHeight, ResolutionPolicy.FIXED_WIDTH);
|
||||
// console.log('[ScreenAdapter] Use FIXED_WIDTH, aspect =', aspect.toFixed(2));
|
||||
// }
|
||||
}
|
||||
}
|
||||
9
assets/scripts/utils/ScreenAdapter.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "043cfab9-7936-40a6-ab63-145e9193c71a",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
13
assets/scripts/utils/loadResources.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { resources, SpriteFrame } from "cc";
|
||||
|
||||
export const loadSpriteFrames = (dir: string): Promise<SpriteFrame[]> => {
|
||||
return new Promise((resolve, reject) => {
|
||||
resources.loadDir(dir, SpriteFrame, (err, frames) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
resolve(frames);
|
||||
});
|
||||
});
|
||||
}
|
||||
9
assets/scripts/utils/loadResources.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "a2baa6eb-8db8-4998-9719-ae146445a3e2",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
9
assets/ui.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "ddd6e477-3e21-4ebd-82db-feb2a24db491",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
BIN
assets/ui/.DS_Store
vendored
Normal file
BIN
assets/ui/Music.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
134
assets/ui/Music.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "66a951bb-1d71-4b2c-8eb6-fd42cc5c0413",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "66a951bb-1d71-4b2c-8eb6-fd42cc5c0413@6c48a",
|
||||
"displayName": "Music",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "66a951bb-1d71-4b2c-8eb6-fd42cc5c0413",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "66a951bb-1d71-4b2c-8eb6-fd42cc5c0413@f9941",
|
||||
"displayName": "Music",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 45,
|
||||
"trimY": 25,
|
||||
"width": 110,
|
||||
"height": 150,
|
||||
"rawWidth": 200,
|
||||
"rawHeight": 200,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-55,
|
||||
-75,
|
||||
0,
|
||||
55,
|
||||
-75,
|
||||
0,
|
||||
-55,
|
||||
75,
|
||||
0,
|
||||
55,
|
||||
75,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
45,
|
||||
175,
|
||||
155,
|
||||
175,
|
||||
45,
|
||||
25,
|
||||
155,
|
||||
25
|
||||
],
|
||||
"nuv": [
|
||||
0.225,
|
||||
0.125,
|
||||
0.775,
|
||||
0.125,
|
||||
0.225,
|
||||
0.875,
|
||||
0.775,
|
||||
0.875
|
||||
],
|
||||
"minPos": [
|
||||
-55,
|
||||
-75,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
55,
|
||||
75,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "66a951bb-1d71-4b2c-8eb6-fd42cc5c0413@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "66a951bb-1d71-4b2c-8eb6-fd42cc5c0413@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/ad.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
134
assets/ui/ad.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "0b92f301-47bc-4438-9dc6-6f3291c5f638",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "0b92f301-47bc-4438-9dc6-6f3291c5f638@6c48a",
|
||||
"displayName": "ad",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "0b92f301-47bc-4438-9dc6-6f3291c5f638",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "0b92f301-47bc-4438-9dc6-6f3291c5f638@f9941",
|
||||
"displayName": "ad",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": -2,
|
||||
"offsetY": 0,
|
||||
"trimX": 35,
|
||||
"trimY": 39,
|
||||
"width": 182,
|
||||
"height": 178,
|
||||
"rawWidth": 256,
|
||||
"rawHeight": 256,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-91,
|
||||
-89,
|
||||
0,
|
||||
91,
|
||||
-89,
|
||||
0,
|
||||
-91,
|
||||
89,
|
||||
0,
|
||||
91,
|
||||
89,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
35,
|
||||
217,
|
||||
217,
|
||||
217,
|
||||
35,
|
||||
39,
|
||||
217,
|
||||
39
|
||||
],
|
||||
"nuv": [
|
||||
0.13671875,
|
||||
0.15234375,
|
||||
0.84765625,
|
||||
0.15234375,
|
||||
0.13671875,
|
||||
0.84765625,
|
||||
0.84765625,
|
||||
0.84765625
|
||||
],
|
||||
"minPos": [
|
||||
-91,
|
||||
-89,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
91,
|
||||
89,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "0b92f301-47bc-4438-9dc6-6f3291c5f638@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "0b92f301-47bc-4438-9dc6-6f3291c5f638@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/bg.jpg
Normal file
|
After Width: | Height: | Size: 64 KiB |
134
assets/ui/bg.jpg.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "e1c0688e-a6d3-48b7-8a1b-1f3db5b2c438",
|
||||
"files": [
|
||||
".jpg",
|
||||
".json"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "e1c0688e-a6d3-48b7-8a1b-1f3db5b2c438@6c48a",
|
||||
"displayName": "bg",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "e1c0688e-a6d3-48b7-8a1b-1f3db5b2c438",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "e1c0688e-a6d3-48b7-8a1b-1f3db5b2c438@f9941",
|
||||
"displayName": "bg",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 582,
|
||||
"height": 876,
|
||||
"rawWidth": 582,
|
||||
"rawHeight": 876,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-291,
|
||||
-438,
|
||||
0,
|
||||
291,
|
||||
-438,
|
||||
0,
|
||||
-291,
|
||||
438,
|
||||
0,
|
||||
291,
|
||||
438,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
876,
|
||||
582,
|
||||
876,
|
||||
0,
|
||||
0,
|
||||
582,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-291,
|
||||
-438,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
291,
|
||||
438,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "e1c0688e-a6d3-48b7-8a1b-1f3db5b2c438@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": false,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "e1c0688e-a6d3-48b7-8a1b-1f3db5b2c438@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/bg_block.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
134
assets/ui/bg_block.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "38593591-e719-4f26-8a25-db4e021d8f3f",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "38593591-e719-4f26-8a25-db4e021d8f3f@6c48a",
|
||||
"displayName": "bg_block",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "38593591-e719-4f26-8a25-db4e021d8f3f",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "38593591-e719-4f26-8a25-db4e021d8f3f@f9941",
|
||||
"displayName": "bg_block",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 198,
|
||||
"height": 198,
|
||||
"rawWidth": 198,
|
||||
"rawHeight": 198,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-99,
|
||||
-99,
|
||||
0,
|
||||
99,
|
||||
-99,
|
||||
0,
|
||||
-99,
|
||||
99,
|
||||
0,
|
||||
99,
|
||||
99,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
198,
|
||||
198,
|
||||
198,
|
||||
0,
|
||||
0,
|
||||
198,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-99,
|
||||
-99,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
99,
|
||||
99,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "38593591-e719-4f26-8a25-db4e021d8f3f@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "38593591-e719-4f26-8a25-db4e021d8f3f@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/buttonStart.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
134
assets/ui/buttonStart.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "b064e3fd-a28b-4f0e-85fe-a19c402cd8dc",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "b064e3fd-a28b-4f0e-85fe-a19c402cd8dc@6c48a",
|
||||
"displayName": "buttonStart",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "b064e3fd-a28b-4f0e-85fe-a19c402cd8dc",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "b064e3fd-a28b-4f0e-85fe-a19c402cd8dc@f9941",
|
||||
"displayName": "buttonStart",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 6,
|
||||
"offsetY": -1.5,
|
||||
"trimX": 12,
|
||||
"trimY": 15,
|
||||
"width": 388,
|
||||
"height": 293,
|
||||
"rawWidth": 400,
|
||||
"rawHeight": 320,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-194,
|
||||
-146.5,
|
||||
0,
|
||||
194,
|
||||
-146.5,
|
||||
0,
|
||||
-194,
|
||||
146.5,
|
||||
0,
|
||||
194,
|
||||
146.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
12,
|
||||
305,
|
||||
400,
|
||||
305,
|
||||
12,
|
||||
12,
|
||||
400,
|
||||
12
|
||||
],
|
||||
"nuv": [
|
||||
0.03,
|
||||
0.0375,
|
||||
1,
|
||||
0.0375,
|
||||
0.03,
|
||||
0.953125,
|
||||
1,
|
||||
0.953125
|
||||
],
|
||||
"minPos": [
|
||||
-194,
|
||||
-146.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
194,
|
||||
146.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "b064e3fd-a28b-4f0e-85fe-a19c402cd8dc@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "b064e3fd-a28b-4f0e-85fe-a19c402cd8dc@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/hand.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
134
assets/ui/hand.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "12833244-7bd0-4417-b298-ccd19e59b3e6",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "12833244-7bd0-4417-b298-ccd19e59b3e6@6c48a",
|
||||
"displayName": "hand",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "12833244-7bd0-4417-b298-ccd19e59b3e6",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "12833244-7bd0-4417-b298-ccd19e59b3e6@f9941",
|
||||
"displayName": "hand",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 28,
|
||||
"trimY": 0,
|
||||
"width": 200,
|
||||
"height": 256,
|
||||
"rawWidth": 256,
|
||||
"rawHeight": 256,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-100,
|
||||
-128,
|
||||
0,
|
||||
100,
|
||||
-128,
|
||||
0,
|
||||
-100,
|
||||
128,
|
||||
0,
|
||||
100,
|
||||
128,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
28,
|
||||
256,
|
||||
228,
|
||||
256,
|
||||
28,
|
||||
0,
|
||||
228,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0.109375,
|
||||
0,
|
||||
0.890625,
|
||||
0,
|
||||
0.109375,
|
||||
1,
|
||||
0.890625,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-100,
|
||||
-128,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
100,
|
||||
128,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "12833244-7bd0-4417-b298-ccd19e59b3e6@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "12833244-7bd0-4417-b298-ccd19e59b3e6@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/hint.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
134
assets/ui/hint.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "2cfb061e-ef65-42d7-868d-d1232daf0ddb",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "2cfb061e-ef65-42d7-868d-d1232daf0ddb@6c48a",
|
||||
"displayName": "hint",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "2cfb061e-ef65-42d7-868d-d1232daf0ddb",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "2cfb061e-ef65-42d7-868d-d1232daf0ddb@f9941",
|
||||
"displayName": "hint",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"rawWidth": 256,
|
||||
"rawHeight": 256,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-128,
|
||||
-128,
|
||||
0,
|
||||
128,
|
||||
-128,
|
||||
0,
|
||||
-128,
|
||||
128,
|
||||
0,
|
||||
128,
|
||||
128,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
256,
|
||||
256,
|
||||
256,
|
||||
0,
|
||||
0,
|
||||
256,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-128,
|
||||
-128,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
128,
|
||||
128,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "2cfb061e-ef65-42d7-868d-d1232daf0ddb@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "2cfb061e-ef65-42d7-868d-d1232daf0ddb@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/laba.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
134
assets/ui/laba.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "572b4278-e7c1-457c-a1aa-394095659678",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "572b4278-e7c1-457c-a1aa-394095659678@6c48a",
|
||||
"displayName": "laba",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "572b4278-e7c1-457c-a1aa-394095659678",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "572b4278-e7c1-457c-a1aa-394095659678@f9941",
|
||||
"displayName": "laba",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": -0.5,
|
||||
"offsetY": 2,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 222,
|
||||
"height": 196,
|
||||
"rawWidth": 223,
|
||||
"rawHeight": 200,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-111,
|
||||
-98,
|
||||
0,
|
||||
111,
|
||||
-98,
|
||||
0,
|
||||
-111,
|
||||
98,
|
||||
0,
|
||||
111,
|
||||
98,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
200,
|
||||
222,
|
||||
200,
|
||||
0,
|
||||
4,
|
||||
222,
|
||||
4
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0.02,
|
||||
0.9955156950672646,
|
||||
0.02,
|
||||
0,
|
||||
1,
|
||||
0.9955156950672646,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-111,
|
||||
-98,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
111,
|
||||
98,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "572b4278-e7c1-457c-a1aa-394095659678@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "572b4278-e7c1-457c-a1aa-394095659678@6c48a"
|
||||
}
|
||||
}
|
||||
BIN
assets/ui/logo.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
134
assets/ui/logo.png.meta
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "46e4ca9d-4861-4169-b3bf-b69db7f5dbcb",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "46e4ca9d-4861-4169-b3bf-b69db7f5dbcb@6c48a",
|
||||
"displayName": "logo",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "46e4ca9d-4861-4169-b3bf-b69db7f5dbcb",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "46e4ca9d-4861-4169-b3bf-b69db7f5dbcb@f9941",
|
||||
"displayName": "logo",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 4,
|
||||
"offsetY": 5.5,
|
||||
"trimX": 68,
|
||||
"trimY": 155,
|
||||
"width": 449,
|
||||
"height": 112,
|
||||
"rawWidth": 577,
|
||||
"rawHeight": 433,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-224.5,
|
||||
-56,
|
||||
0,
|
||||
224.5,
|
||||
-56,
|
||||
0,
|
||||
-224.5,
|
||||
56,
|
||||
0,
|
||||
224.5,
|
||||
56,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
68,
|
||||
278,
|
||||
517,
|
||||
278,
|
||||
68,
|
||||
166,
|
||||
517,
|
||||
166
|
||||
],
|
||||
"nuv": [
|
||||
0.11785095320623917,
|
||||
0.3833718244803695,
|
||||
0.8960138648180243,
|
||||
0.3833718244803695,
|
||||
0.11785095320623917,
|
||||
0.6420323325635104,
|
||||
0.8960138648180243,
|
||||
0.6420323325635104
|
||||
],
|
||||
"minPos": [
|
||||
-224.5,
|
||||
-56,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
224.5,
|
||||
56,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "46e4ca9d-4861-4169-b3bf-b69db7f5dbcb@6c48a",
|
||||
"atlasUuid": "",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "46e4ca9d-4861-4169-b3bf-b69db7f5dbcb@6c48a"
|
||||
}
|
||||
}
|
||||