This commit is contained in:
KuoKuo666
2019-10-12 10:25:37 +08:00
commit 2e8c09e405
41 changed files with 27524 additions and 0 deletions

53
.gitignore vendored Normal file
View File

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

7
assets/data.meta Normal file
View File

@@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "5fab39bd-6792-493d-8f43-d3f6cabf548a",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

View File

@@ -0,0 +1,16 @@
{
"lv1": [
[2,2,2,3,3,3,4,4,4],
[2,2,0,3,3,0,4,4],
[0,2,0,0,3,0,0,4,0],
[0,1,1,1,1,1,1,0],
[0,0,1,1,0,1,1,0,0],
[0,0,1,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,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]
]
}

View File

@@ -0,0 +1,5 @@
{
"ver": "1.0.0",
"uuid": "917b9546-68b8-479e-ad5f-5cb1e32ef234",
"subMetas": {}
}

643
assets/game.fire Normal file
View File

@@ -0,0 +1,643 @@
[
{
"__type__": "cc.SceneAsset",
"_name": "",
"_objFlags": 0,
"_native": "",
"scene": {
"__id__": 1
}
},
{
"__type__": "cc.Scene",
"_objFlags": 0,
"_parent": null,
"_children": [
{
"__id__": 2
},
{
"__id__": 11
}
],
"_active": false,
"_level": 0,
"_components": [],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 0,
"height": 0
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_is3DNode": true,
"groupIndex": 0,
"autoReleaseAssets": false,
"_id": "8a7db86e-40ea-4005-ad31-ef806fec11ee"
},
{
"__type__": "cc.Node",
"_name": "Canvas",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [
{
"__id__": 3
},
{
"__id__": 5
}
],
"_active": true,
"_level": 1,
"_components": [
{
"__id__": 7
},
{
"__id__": 8
}
],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 720,
"height": 1280
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 360,
"y": 640,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": "53UUydPLZOpa+h6FhzKizp"
},
{
"__type__": "cc.Node",
"_name": "Main Camera",
"_objFlags": 0,
"_parent": {
"__id__": 2
},
"_children": [],
"_active": true,
"_level": 1,
"_components": [
{
"__id__": 4
}
],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 0,
"height": 0
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 1108.5125168440816
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": "b7I7i0ythBQZfDkmS3w3cr"
},
{
"__type__": "cc.Camera",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 3
},
"_enabled": true,
"_cullingMask": 4294967295,
"_clearFlags": 7,
"_backgroundColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_depth": -1,
"_zoomRatio": 1,
"_targetTexture": null,
"_fov": 60,
"_orthoSize": 10,
"_nearClip": 1,
"_farClip": 4096,
"_ortho": true,
"_rect": {
"__type__": "cc.Rect",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
"_renderStages": 1,
"_id": "07PAe1g3hEW5SsoMKWyCiW"
},
{
"__type__": "cc.Node",
"_name": "bg",
"_objFlags": 0,
"_parent": {
"__id__": 2
},
"_children": [],
"_active": true,
"_level": 1,
"_components": [
{
"__id__": 6
}
],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 720,
"height": 1280
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": "8a0Gat9EVFr4dta5pNEo2L"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 5
},
"_enabled": true,
"_materials": [
{
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
}
],
"_srcBlendFactor": 770,
"_dstBlendFactor": 771,
"_spriteFrame": {
"__uuid__": "e8904d7e-e46a-45f3-a319-150119858587"
},
"_type": 0,
"_sizeMode": 1,
"_fillType": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_atlas": null,
"_id": "baMzXQDt9PK7BdpMsbZIx1"
},
{
"__type__": "cc.Canvas",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 2
},
"_enabled": true,
"_designResolution": {
"__type__": "cc.Size",
"width": 720,
"height": 1280
},
"_fitWidth": true,
"_fitHeight": false,
"_id": "66rNXTRbdIf4zQpjtxeC03"
},
{
"__type__": "6e8f2bpKJRLLJnPCx8f3vFZ",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 2
},
"_enabled": true,
"shooter": {
"__id__": 9
},
"_id": "d6EiZd6VpG36qcNqNdCSuI"
},
{
"__type__": "cc.Node",
"_name": "shooter",
"_objFlags": 0,
"_parent": {
"__id__": 10
},
"_children": [],
"_active": true,
"_level": 3,
"_components": [
{
"__id__": 14
}
],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 40,
"height": 131
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": -0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 360,
"y": 180,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": "e1SOEVDRlPd680IvW73b5t"
},
{
"__type__": "cc.Node",
"_name": "ShootLayer",
"_objFlags": 0,
"_parent": {
"__id__": 11
},
"_children": [
{
"__id__": 9
}
],
"_active": true,
"_level": 2,
"_components": [],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 0,
"height": 0
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": "43uXlv+8JHX7gxKFlcjej1"
},
{
"__type__": "cc.Node",
"_name": "GameLayer",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [
{
"__id__": 10
},
{
"__id__": 12
}
],
"_active": true,
"_level": 1,
"_components": [],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 0,
"height": 0
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": "a01MPeoe1Iupu6gyILn6e6"
},
{
"__type__": "cc.Node",
"_name": "BubbleLayer",
"_objFlags": 0,
"_parent": {
"__id__": 11
},
"_children": [],
"_active": true,
"_level": 2,
"_components": [
{
"__id__": 13
}
],
"_prefab": null,
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 0,
"height": 0
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": "c3nPtTsMhJqoN36wh7hDzA"
},
{
"__type__": "c3c35Rv27JBRIOSDzrh7MRZ",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 12
},
"_enabled": true,
"bubbleSpriteFrame": [
{
"__uuid__": "f8ebb73e-6f80-4166-a352-8e043ae708df"
},
{
"__uuid__": "2ff6dd8e-6890-4950-8bb3-b0b2978ca97d"
},
{
"__uuid__": "7fe1a0d4-37d0-4c6e-956b-19d09a99fb0e"
},
{
"__uuid__": "3c26acf7-0d23-4b6a-b56b-3b5ad1f3519b"
}
],
"bubblePrefab": {
"__uuid__": "91c2ccd6-0bd3-4da2-b4cc-58797a202360"
},
"shooter": {
"__id__": 9
},
"levelData": {
"__uuid__": "917b9546-68b8-479e-ad5f-5cb1e32ef234"
},
"_id": "eamkUHYPpOGp5dAeumBIoQ"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 9
},
"_enabled": true,
"_materials": [
{
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
}
],
"_srcBlendFactor": 770,
"_dstBlendFactor": 771,
"_spriteFrame": {
"__uuid__": "7bc48a43-36c4-4ed2-a4df-a50bf76e462f"
},
"_type": 0,
"_sizeMode": 1,
"_fillType": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_atlas": null,
"_id": "32gt9M6IVGz6oID0QzTVWC"
}
]

7
assets/game.fire.meta Normal file
View File

@@ -0,0 +1,7 @@
{
"ver": "1.2.0",
"uuid": "8a7db86e-40ea-4005-ad31-ef806fec11ee",
"asyncLoadAssets": false,
"autoReleaseAssets": false,
"subMetas": {}
}

7
assets/res.meta Normal file
View File

@@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "cf91833e-a427-42e8-89ce-64a6223805e7",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

7
assets/res/prefab.meta Normal file
View File

@@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "01583de9-f3c1-4ad2-866a-bab38b987937",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

View File

@@ -0,0 +1,128 @@
[
{
"__type__": "cc.Prefab",
"_name": "",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"asyncLoadAssets": false,
"readonly": false
},
{
"__type__": "cc.Node",
"_name": "bubble",
"_objFlags": 0,
"_parent": null,
"_children": [],
"_active": true,
"_level": 1,
"_components": [
{
"__id__": 2
},
{
"__id__": 3
}
],
"_prefab": {
"__id__": 4
},
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 80,
"height": 80
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_position": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"groupIndex": 0,
"_id": ""
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"_materials": [
{
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
}
],
"_srcBlendFactor": 770,
"_dstBlendFactor": 771,
"_spriteFrame": {
"__uuid__": "f8ebb73e-6f80-4166-a352-8e043ae708df"
},
"_type": 0,
"_sizeMode": 1,
"_fillType": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_atlas": null,
"_id": ""
},
{
"__type__": "2620bjKKJhPi6b/2EnkJDAa",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"_id": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__uuid__": "91c2ccd6-0bd3-4da2-b4cc-58797a202360"
},
"fileId": "3d4jKgOJlEnJTpQvENhkWO",
"sync": false
}
]

View File

@@ -0,0 +1,8 @@
{
"ver": "1.2.0",
"uuid": "91c2ccd6-0bd3-4da2-b4cc-58797a202360",
"optimizationPolicy": "AUTO",
"asyncLoadAssets": false,
"readonly": false,
"subMetas": {}
}

7
assets/res/textures.meta Normal file
View File

@@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "e18b149f-6e9e-49d0-89ed-f3b871b0f45d",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

BIN
assets/res/textures/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -0,0 +1,32 @@
{
"ver": "2.3.1",
"uuid": "7bb0f575-dfe8-45af-ab1e-e9cf63c610a9",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"platformSettings": {},
"subMetas": {
"bg": {
"ver": "1.0.4",
"uuid": "e8904d7e-e46a-45f3-a319-150119858587",
"rawTextureUuid": "7bb0f575-dfe8-45af-ab1e-e9cf63c610a9",
"trimType": "custom",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 720,
"height": 1280,
"rawWidth": 720,
"rawHeight": 1280,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

View File

@@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "910de0c5-4449-43dd-9a86-86739f810cd3",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,32 @@
{
"ver": "2.3.1",
"uuid": "c24f9b07-2e19-488f-affe-945da3e86b2b",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"platformSettings": {},
"subMetas": {
"bubble1": {
"ver": "1.0.4",
"uuid": "f8ebb73e-6f80-4166-a352-8e043ae708df",
"rawTextureUuid": "c24f9b07-2e19-488f-affe-945da3e86b2b",
"trimType": "custom",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 80,
"height": 80,
"rawWidth": 80,
"rawHeight": 80,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,32 @@
{
"ver": "2.3.1",
"uuid": "ec8937fa-55f5-4d97-b41d-73d44225ff50",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"platformSettings": {},
"subMetas": {
"bubble2": {
"ver": "1.0.4",
"uuid": "2ff6dd8e-6890-4950-8bb3-b0b2978ca97d",
"rawTextureUuid": "ec8937fa-55f5-4d97-b41d-73d44225ff50",
"trimType": "custom",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 80,
"height": 80,
"rawWidth": 80,
"rawHeight": 80,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,32 @@
{
"ver": "2.3.1",
"uuid": "7504a837-22f3-48ed-9cdd-5f5318cff6c7",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"platformSettings": {},
"subMetas": {
"bubble3": {
"ver": "1.0.4",
"uuid": "7fe1a0d4-37d0-4c6e-956b-19d09a99fb0e",
"rawTextureUuid": "7504a837-22f3-48ed-9cdd-5f5318cff6c7",
"trimType": "custom",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 80,
"height": 80,
"rawWidth": 80,
"rawHeight": 80,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,32 @@
{
"ver": "2.3.1",
"uuid": "68dd0831-75a9-41ea-8112-5159283f9b5e",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"platformSettings": {},
"subMetas": {
"bubble4": {
"ver": "1.0.4",
"uuid": "3c26acf7-0d23-4b6a-b56b-3b5ad1f3519b",
"rawTextureUuid": "68dd0831-75a9-41ea-8112-5159283f9b5e",
"trimType": "custom",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 80,
"height": 80,
"rawWidth": 80,
"rawHeight": 80,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

View File

@@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "d51177ac-c6b0-45ae-bc0a-85a9080086e5",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,32 @@
{
"ver": "2.3.1",
"uuid": "f3a97a43-32c8-41b7-b672-c9143186b8bb",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"platformSettings": {},
"subMetas": {
"shooter": {
"ver": "1.0.4",
"uuid": "7bc48a43-36c4-4ed2-a4df-a50bf76e462f",
"rawTextureUuid": "f3a97a43-32c8-41b7-b672-c9143186b8bb",
"trimType": "custom",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 40,
"height": 131,
"rawWidth": 40,
"rawHeight": 131,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

7
assets/script.meta Normal file
View File

@@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "504c2b9b-61e3-49e9-9f2f-87af8471aa67",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

56
assets/script/Bubble.ts Normal file
View File

@@ -0,0 +1,56 @@
import BubbleMgr from "./BubbleMgr";
const {ccclass, property} = cc._decorator;
@ccclass
export default class Bubble extends cc.Component {
// 父节点类
private parent: BubbleMgr;
/** 初始化 */
public init (parent: BubbleMgr, position: cc.Vec2, spriteFrame: cc.SpriteFrame): void {
parent.node.addChild(this.node);
this.parent = parent;
this.node.position = position;
this.setSpriteFrame(spriteFrame);
}
/** 设置纹理 */
public setSpriteFrame (spriteFrame: cc.SpriteFrame): void {
this.getComponent(cc.Sprite).spriteFrame = spriteFrame;
}
/** 死亡动画 */
public playDeathAnimation (index: cc.Vec2): void {
this.node.runAction(
cc.sequence(
// 膨胀后消除自己
cc.scaleTo(0.1, 1.2),
cc.scaleTo(0.1, 1.0),
cc.callFunc(() => {
// 将位置空出
this.parent.bubblesArray[index.x][index.y] = undefined;
}, this),
cc.removeSelf()
)
);
}
/** 下落动画 */
public playDownAnimation (index: cc.Vec2): void {
this.node.runAction(
// 渐隐下落
cc.sequence(
cc.spawn(
cc.moveBy(0.5, 0, -300),
cc.fadeOut(0.5)
),
cc.callFunc(() => {
this.parent.bubblesArray[index.x][index.y] = undefined;
}, this),
cc.removeSelf()
)
);
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "2620b8ca-2898-4f8b-a6ff-d849e424301a",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

284
assets/script/BubbleMgr.ts Normal file
View File

@@ -0,0 +1,284 @@
import { bubbleData, EVENT } from "./Interface";
import Bubble from "./Bubble";
import Util from "./Util";
const {ccclass, property} = cc._decorator;
@ccclass
export default class BubbleMgr extends cc.Component {
/** 泡泡纹理 */
@property([cc.SpriteFrame]) bubbleSpriteFrame: cc.SpriteFrame[] = [];
/** 预制体 */
@property(cc.Prefab) bubblePrefab: cc.Prefab = null;
/** 确认发射点 */
@property(cc.Node) shooter: cc.Node = null;
/** 关卡数据 */
@property(cc.JsonAsset) levelData: cc.JsonAsset = null;
/** 装载场景中所有泡泡,注意 s 这是二维数组 */
public bubblesArray: bubbleData[][] = [];
/** 当前待发射球 */
public shootBubble: bubbleData;
/** 是否正在射击的标志 */
public isShooting: boolean = false;
/** 射出方向 */
public shootDir: cc.Vec2 = null;
public onLoad (): void {
this.init("lv1");
// 监听触摸结束
cc.director.on(EVENT.TOUCHEND_SHOOT, (data) => {
console.log('BubbleMgr -on -touchend');
// console.log(data);
// 转为弧度
let r = cc.misc.degreesToRadians(data);
// 分量 x - sin y - cos
this.shootDir = cc.v2(-Math.sin(r), Math.cos(r));
console.log(this.shootDir);
// 开启射击
this.isShooting = true;
}, this);
this._createOneShooter();
}
public update (dt: number) {
if (this.isShooting) {
// 小球移动
this._bubbleMove(dt);
this._isCollided();
}
}
/** 检测碰撞 */
private _isCollided (): void {
for (let row = 0; row < this.bubblesArray.length; row++) {
for (let col = 0; col < this.bubblesArray[row].length; col++) {
// 是否存在小球
if (!this.bubblesArray[row][col]) continue;
let n: cc.Node = this.bubblesArray[row][col].node;
// 先看 y 轴
let offsetY = Math.abs(n.y - this.shootBubble.node.y);
if (offsetY > Util.BUBBLE_R * 2) continue;
// 再看 x 轴
let offsetX = Math.abs(n.x - this.shootBubble.node.x);
if (offsetX > Util.BUBBLE_R * 2) continue;
// 再做乘法
let dis = offsetX * offsetX + offsetY * offsetY;
if (dis > Util.BUBBLE_R * 2 * Util.BUBBLE_R * 2) continue;
// 在范围内,触发碰撞,停止射击移动
this.isShooting = false;
// 位置修正
this._setBubblePos();
// 如果有小球符合条件return
return;
}
}
// 没触发碰撞且碰到最上方
if (this.shootBubble.node.y > Util.SCREEN_H - Util.BUBBLE_R) {
this.isShooting = false;
// 位置修正
this._setBubblePos();
}
}
/** 根据停止位置,修正 */
private _setBubblePos (): void {
let index: cc.Vec2 = Util.convertPosToRowCol(this.shootBubble.node.x, this.shootBubble.node.y);
this.shootBubble.node.position = Util.convertRowColToPos(index.x, index.y);
// 设置对应数据
let obj: bubbleData = Object.create(null);
obj.node = this.shootBubble.node;
obj.color = this.shootBubble.color;
obj.isLinked = false;
obj.isVisited = false;
this.bubblesArray[index.x][index.y] = obj;
// 应该遍历相同颜色的泡泡了
this._mapColor(index);
}
/** 相同颜色检测,传入当前小球位置 */
private _mapColor (index: cc.Vec2): void {
// 检测消除方法
let test: Function = (row: number, col: number, color: number) => {
// 非空检测
if (!this.bubblesArray[row] || !this.bubblesArray[row][col]) return;
// 获取泡泡数据
let b: bubbleData = this.bubblesArray[row][col];
// 如果被访问过
if (b.isVisited) return;
// 如果颜色不同
if (b.color !== color) return;
// 符合条件
b.isVisited = true;
let leftTop = col;
// 根据不同的行做偏移
if (row % 2 === 0) {
leftTop = col - 1;
}
// 每个泡泡周围有6个,依次检测
// 左上
test(row - 1, leftTop, color);
//右上
test(row - 1, leftTop + 1, color);
//左
test(row, col - 1, color);
//右
test(row, col + 1, color);
//左下
test(row + 1, leftTop, color);
//右下
test(row + 1, leftTop + 1, color);
}
// 执行
test(index.x, index.y, this.bubblesArray[index.x][index.y].color);
// 看有几个相同的
let count: number = 0;
// 记录消除行列值
let record: cc.Vec2[] = [];
for (let row = 0; row < this.bubblesArray.length; row++) {
for (let col = 0; col < this.bubblesArray[row].length; col++) {
if (!this.bubblesArray[row][col]) continue;
if (this.bubblesArray[row][col].isVisited) {
this.bubblesArray[row][col].isVisited = false;
count ++;
// 记录要进行消除的泡泡行列值
record.push(cc.v2(row, col));
}
}
}
if (count >= 3) {
// 执行消除
for (let i in record) {
// 获取到该位置泡泡,执行消除
let b = this.bubblesArray[record[i].x][record[i].y].node;
b.getComponent(Bubble).playDeathAnimation(record[i]);
}
this.scheduleOnce(this._testUnLinked, 0.3);
// this.scheduleOnce(this._nextBubble, 0.3);
} else {
this._nextBubble();
}
}
/** 悬空检测 同理 */
private _testUnLinked (): void {
// 检测方法
let test: Function = (row: number, col: number) => {
//从刚刚加入的泡泡为起点,递归寻找相连的
if (!this.bubblesArray[row] || !this.bubblesArray[row][col]) return;
let b = this.bubblesArray[row][col];
if (b.isVisited) return;
// 符合条件
b.isVisited = true;
b.isLinked = true;
let leftTop = col;
if (row % 2 === 0) {
leftTop = col - 1;
}
// 每个泡泡周围有6个,依次检测
// 左上
test(row - 1, leftTop);
//右上
test(row - 1, leftTop + 1);
//左
test(row, col - 1);
//右
test(row, col + 1);
//左下
test(row + 1, leftTop);
//右下
test(row + 1, leftTop + 1);
}
// 执行
for (let i = 0; i < this.bubblesArray[0].length; i++) {
// 执行最上的一排泡泡
if (!this.bubblesArray[0][i]) continue;
test(0, i);
}
// 局部标志,是否执行过下落
let flag: boolean = true;
for (let row = 0; row < this.bubblesArray.length; row++) {
for (let col = 0; col < this.bubblesArray[row].length; col++) {
if (!this.bubblesArray[row][col]) continue;
if (!this.bubblesArray[row][col].isLinked) {
flag = false;
let b = this.bubblesArray[row][col].node;
b.getComponent(Bubble).playDownAnimation(cc.v2(row, col));
} else {
this.bubblesArray[row][col].isVisited = false;
this.bubblesArray[row][col].isLinked = false;
}
}
}
if (flag) {
this._nextBubble();
} else {
this.scheduleOnce(this._nextBubble, 0.6);
}
}
private _nextBubble (): void {
// 继续游戏
this._createOneShooter();
}
private _bubbleMove (dt: number): void {
// 移动速度
let speed = 1000;
let n: cc.Node = this.shootBubble.node;
// 左右出区域要改向 因为不知正负,先求绝对值
if (n.x < Util.BUBBLE_R) this.shootDir.x = Math.abs(this.shootDir.x);
if (n.x > Util.SCREEN_W - Util.BUBBLE_R) this.shootDir.x = -Math.abs(this.shootDir.x);
n.x += this.shootDir.x * speed * dt;
n.y += this.shootDir.y * speed * dt;
}
// 根据数据初始化
public init (str: string): void {
// 获取到关卡数据
let data: [][] = this.levelData.json[str];
// 将所有数据遍历0代表空
for (let row = 0; row < data.length; row++) {
let colBubbleData: bubbleData[] = data[row];
// 一起初始化一下 bubblesArray
this.bubblesArray[row] = [];
for (let col = 0; col < colBubbleData.length; col++) {
let color = data[row][col];
if (color === 0) continue;
// 实例化泡泡
let b = cc.instantiate(this.bubblePrefab);
// 行列 -> 坐标
let pos = Util.convertRowColToPos(row, col);
// 调用泡泡初始化
b.getComponent(Bubble).init(this, pos, this.bubbleSpriteFrame[color-1]);
// 往bubblesArray 里 设置对应数据
let obj: bubbleData = Object.create(null);
obj.node = b;
obj.color = color;
obj.isLinked = false;
obj.isVisited = false;
this.bubblesArray[row][col] = obj;
}
}
}
/** 创造发射小球 */
private _createOneShooter (): void {
let b = cc.instantiate(this.bubblePrefab);
let color = Util.randNum(1, 4);
b.getComponent(Bubble).init(this, this.shooter.position, this.bubbleSpriteFrame[color-1]);
// 设置对应数据
let obj: bubbleData = Object.create(null);
obj.node = b;
obj.color = color;
obj.isLinked = false;
obj.isVisited = false;
// 指定当前 shootBubble
this.shootBubble = obj;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "c3c3546f-dbb2-4144-8392-0f3ae1ecc459",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@@ -0,0 +1,13 @@
/** 泡泡对象 */
export interface bubbleData {
node: cc.Node,
color: number,
isVisited: boolean,
isLinked: boolean
}
/** 导出事件名称枚举 */
export enum EVENT {
/** 触摸结束后,射击事件,附带角度参数 */
TOUCHEND_SHOOT = 'shoot'
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "022296e7-a6b0-46b0-9422-0007550c1e35",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

59
assets/script/TouchMgr.ts Normal file
View File

@@ -0,0 +1,59 @@
import { EVENT } from "./Interface";
const {ccclass, property} = cc._decorator;
@ccclass
export default class TouchMgr extends cc.Component {
@property(cc.Node) shooter: cc.Node = null;
public onLoad (): void {
this.openTouch();
}
public openTouch (): void {
this.node.on(cc.Node.EventType.TOUCH_START, this._touchStart, this);
this.node.on(cc.Node.EventType.TOUCH_MOVE, this._touchsMove, this);
this.node.on(cc.Node.EventType.TOUCH_END, this._touchEnd, this);
}
public closeTouch (): void {
this.node.off(cc.Node.EventType.TOUCH_START, this._touchStart, this);
this.node.off(cc.Node.EventType.TOUCH_MOVE, this._touchsMove, this);
this.node.off(cc.Node.EventType.TOUCH_END, this._touchEnd, this);
}
private _touchStart (e: cc.Event.EventTouch): void {
let d = this.convertToDegree(e);
this.shooter.angle = d;
}
private _touchsMove (e: cc.Event.EventTouch): void {
let d = this.convertToDegree(e);
this.shooter.angle = d;
}
private _touchEnd (e: cc.Event.EventTouch): void {
let d = this.convertToDegree(e);
this.shooter.angle = d;
// 发送角度
cc.director.emit(EVENT.TOUCHEND_SHOOT, d);
}
// 转化角度
private convertToDegree (e: cc.Event.EventTouch): number {
let pos: cc.Vec2 = e.getLocation();
let x = pos.x - this.shooter.x;
let y = pos.y - this.shooter.y;
let radian = Math.atan2(y, x);
// 弧度转角度 0 - 2π -> 0 - 360
let degree = cc.misc.radiansToDegrees(radian);
// angle 与原版 rotation 差 90
degree -= 90;
// console.log(degree);
if (degree < -80 && degree > -180) degree = -80;
if (degree > 80 || degree <= -180) degree = 80;
return degree;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "6e8f26e9-2894-4b2c-99cf-0b1f1fdef159",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

31
assets/script/Util.ts Normal file
View File

@@ -0,0 +1,31 @@
export default class Util {
public static readonly SCREEN_W: number = 720;
public static readonly SCREEN_H: number = 1280;
public static readonly BUBBLE_R: number = 40;
/** Y 方向偏差为 40 倍根号 3 */
public static readonly BUBBLE_Y: number = 40 * Math.sqrt(3);
/** 随机数 min - max */
public static randNum (min: number, max: number): number {
// random 0 - 1 不包括 1
return min + Math.floor((max - min + 1) * Math.random());
}
/** 传入二维数组行列,返回泡泡对应位置坐标 */
public static convertRowColToPos (row: number, col: number): cc.Vec2 {
// 奇数行前方少一个半径宽
// 如果为偶数行 row % 2 = 0;
let posX: number = this.BUBBLE_R * ((row % 2) + 1) + col * this.BUBBLE_R * 2;
let posY: number = this.SCREEN_H - (this.BUBBLE_R + row * this.BUBBLE_Y);
return cc.v2(posX, posY);
}
/** 传入泡泡对应位置坐标,返回二维数组行列 */
public static convertPosToRowCol (posX: number, posY: number): cc.Vec2 {
let row: number = Math.round((this.SCREEN_H - posY - this.BUBBLE_R) / this.BUBBLE_Y);
let col: number = Math.round((posX - this.BUBBLE_R * ((row % 2) + 1)) / (this.BUBBLE_R * 2));
return cc.v2(row, col);
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "70790414-52bd-4147-996c-3e13662d4472",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

25777
creator.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

15
jsconfig.json Normal file
View File

@@ -0,0 +1,15 @@
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"experimentalDecorators": true
},
"exclude": [
"node_modules",
".vscode",
"library",
"local",
"settings",
"temp"
]
}

5
project.json Normal file
View File

@@ -0,0 +1,5 @@
{
"engine": "cocos-creator-js",
"packages": "packages",
"version": "2.1.2"
}

35
settings/project.json Normal file
View File

@@ -0,0 +1,35 @@
{
"start-scene": "current",
"group-list": [
"default"
],
"collision-matrix": [
[
true
]
],
"excluded-modules": [],
"last-module-event-record-time": 0,
"design-resolution-width": 960,
"design-resolution-height": 640,
"fit-width": false,
"fit-height": true,
"use-project-simulator-setting": false,
"simulator-orientation": false,
"use-customize-simulator": false,
"simulator-resolution": {
"width": 960,
"height": 640
},
"assets-sort-type": "name",
"facebook": {
"enable": false,
"appID": "",
"live": {
"enable": false
},
"audience": {
"enable": false
}
}
}

103
settings/services.json Normal file
View File

@@ -0,0 +1,103 @@
{
"services": [
{
"service_id": "235",
"service_name": "Cocos Analytics",
"service_icon": "https://account.cocos.com/client/3f8f31ccf66995e183044f167c092395.png",
"service_desc": "提供最核心最基本的数据、标准化界面功能简洁易用、数据准确性最好",
"service_title": "精准了解游戏的新增、活跃、留存、付费等数据",
"service_guide_url": "https://n-analytics.cocos.com/docs/",
"service_sample_url": "https://github.com/cocos-creator/tutorial-dark-slash/tree/analytics",
"service_dev_url": "http://analytics.cocos.com/realtime/jump_to/<app_id>",
"service_type": "3",
"service_type_zh": "公司和个人游戏",
"support_platform": [
"Android",
"iOS",
"HTML5"
],
"package_download_url": "https://download.cocos.com/CocosServices/plugins/service-analytics/1.2.0_2.1.0.zip",
"package_version_desc": "<b>更新日期:</b>2019/6/10<br>\n<br><b>更新说明:</b><br>\n1、优化SDK修复H5-SDK 与多个小游戏平台适配问题删除和优化init事件无用接口<br>\n2、如有相关问题咨询或者需求 可以联系我们技术支持邮箱 <a href=' '>support-cocos@cocos.com</a>",
"service_component_name": "service-analytics",
"package_versions": [
"1.2.1_2.1.0",
"1.2.0_2.1.0",
"1.1.7_2.0.3",
"1.1.6_2.0.1_2.0.2",
"1.1.5_2.0.1",
"1.1.4_2.0.1",
"1.1.3_2.0.1",
"1.1.2_2.0.0",
"1.0.0_1.0.5"
],
"build_platform": [],
"require_verify": 0,
"service_price": "",
"service_protocol": "游戏首次开启该服务时Cocos会后台通知服务方为游戏开通服务并初始化参数服务方根据需要可能会获取您的Cocos账户信息包括账户基本资料、游戏基本资料、账户余额等点击确认开通按钮即视为您同意该服务访问您的账户信息详见<a href='http://auth.cocos.com/CocosServiceAgreement.html'>《Cocos用户服务协议》</a>和<a href='http://auth.cocos.com/PrivacyPolicy.html'>《Cocos隐私政策》</a>"
},
{
"service_id": "241",
"service_name": "Matchvs",
"service_icon": "https://account.cocos.com/client/14406719a07eb3d714d36e5edc6e06fa.png",
"service_desc": "通过SDK接入快速实现联网功能、帧同步、国内外多节点、服务器独立部署、gameServer自定义游戏服务端逻辑。",
"service_title": "专业成熟的移动游戏联网与服务端解决方案",
"service_guide_url": "http://doc.matchvs.com/QuickStart/QuickStart-CocosCreator",
"service_sample_url": "http://www.matchvs.com/serviceCourse",
"service_dev_url": "http://www.matchvs.com/cocosLogin",
"service_type": "3",
"service_type_zh": "公司和个人游戏",
"support_platform": [
"Android",
"iOS",
"HTML5"
],
"package_download_url": "https://download.cocos.com/CocosServices/plugins/service-matchvs/1.0.10_3.7.9.10.zip",
"package_version_desc": "<p><strong>更新日期:</strong> 2019/9/12\n<strong>更新内容:</strong>\n1.多语言支持\n2.SDK日常更新</p>",
"service_component_name": "service-matchvs",
"package_versions": [
"1.0.9_3.7.9.9",
"1.0.7_3.7.9.6",
"1.0.6_3.7.9.2",
"1.0.5_3.7.7.3",
"1.0.3_3.7.6.4",
"1.0.10_3.7.9.10"
],
"build_platform": [],
"require_verify": 0,
"service_price": "该服务按使用量计费,<a href='https://www.matchvs.com/price'><font color='#dddddd'>计费规则</font></a>,所产生的费用将由第三方从您的 <a href='https://account.cocos.com/#/finance/finance_list'><font color='#dddddd'>Cocos 账户余额</font></a> 中扣除。",
"service_protocol": "游戏首次开启该服务时Cocos会后台通知服务方为游戏开通服务并初始化参数服务方根据需要可能会获取您的Cocos账户信息包括账户基本资料、游戏基本资料、账户余额等点击确认开通按钮即视为您同意该服务访问您的账户信息详见<a href='http://auth.cocos.com/CocosServiceAgreement.html'>《Cocos用户服务协议》</a>和<a href='http://auth.cocos.com/PrivacyPolicy.html'>《Cocos隐私政策》</a>"
},
{
"service_id": "242",
"service_name": "Agora Voice",
"service_icon": "https://account.cocos.com/uploads/client_icon/2019-07-16/273952d155b4cdb72d2b1bc61de91ade.png",
"service_desc": "稳定、低耗、76ms超低延时、全球200+数据中心覆盖变声器、超高音质、听声辩位等丰富玩法极速接入全平台支持Android、iOS、Web。",
"service_title": "游戏内置实时语音",
"service_guide_url": "https://docs.agora.io/cn/Interactive Gaming/game_c?platform=Cocos Creator",
"service_sample_url": "https://github.com/AgoraIO/Voice-Call-for-Mobile-Gaming/tree/master/Basic-Voice-Call-for-Gaming/Hello-CocosCreator-Voice-Agora",
"service_dev_url": "https://sso.agora.io/api/oauth/cocos/login",
"service_type": "3",
"service_type_zh": "公司和个人游戏",
"support_platform": [
"Android",
"iOS",
"HTML5"
],
"package_download_url": "https://download.cocos.com/CocosServices/plugins/service-agora/1.0.2_2.2.3.20_2.5.2.zip",
"package_version_desc": "<b>更新日期:<b>2019/06/27<br>\n<br><b>更新内容:</b><br>\n1、修复部分BUG<br>\n2、代码优化",
"service_component_name": "service-agora",
"package_versions": [
"1.0.2_2.2.3.20_2.5.2",
"1.0.1_2.2.3.20_2.5.2"
],
"build_platform": [],
"require_verify": 1,
"service_price": "该服务按使用量计费,<a href='https://www.agora.io/cn/price/'><font color='#dddddd'>计费规则</font></a>,所产生的费用将由第三方从您的 <a href='https://account.cocos.com/#/finance/finance_list'><font color='#dddddd'>Cocos 账户余额</font></a> 中扣除。",
"service_protocol": "游戏首次开启该服务时Cocos会后台通知服务方为游戏开通服务并初始化参数服务方根据需要可能会获取您的Cocos账户信息包括账户基本资料、游戏基本资料、账户余额等点击确认开通按钮即视为您同意该服务访问您的账户信息详见<a href='http://auth.cocos.com/CocosServiceAgreement.html'>《Cocos用户服务协议》</a>和<a href='http://auth.cocos.com/PrivacyPolicy.html'>《Cocos隐私政策》</a>"
}
],
"game": {
"name": "未知游戏",
"appid": "UNKNOW"
}
}