mirror of
https://github.com/Leo501/CocosCreatorTutorial.git
synced 2026-06-04 08:37:28 +08:00
Merge branch 'tmp'
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
"__type__": "cc.SceneAsset",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"_native": "",
|
||||
"_rawFiles": null,
|
||||
"scene": {
|
||||
"__id__": 1
|
||||
}
|
||||
@@ -17,10 +17,11 @@
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 0,
|
||||
"_components": [],
|
||||
"_prefab": null,
|
||||
"_id": "2d2f792f-a40c-49bb-a189-ed176a246e49",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -29,33 +30,22 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_scale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0.3164691272424443,
|
||||
"y": 0.3164691272424443,
|
||||
"z": 1
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_zIndex": 0,
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0,
|
||||
"autoReleaseAssets": false,
|
||||
"_id": "2d2f792f-a40c-49bb-a189-ed176a246e49"
|
||||
"autoReleaseAssets": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -78,8 +68,8 @@
|
||||
"__id__": 21
|
||||
}
|
||||
],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 1,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 23
|
||||
@@ -89,6 +79,7 @@
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "11wMPoqhJINqIuX6w96Z7P",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -97,42 +88,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 720,
|
||||
"height": 1280
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_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
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 720,
|
||||
"height": 1280
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 360,
|
||||
"y": 640
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "11wMPoqhJINqIuX6w96Z7P"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -142,14 +123,15 @@
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 2,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 4
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "9da87m0elFIpzRq8FRD/e2",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -158,42 +140,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_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
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"y": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "9da87m0elFIpzRq8FRD/e2"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Camera",
|
||||
@@ -203,19 +175,8 @@
|
||||
"__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,
|
||||
"_id": "99nUcrOqFDLLt3/3UDuE45"
|
||||
"_targets": [],
|
||||
"zoomRatio": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -225,8 +186,8 @@
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 2,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 6
|
||||
@@ -236,6 +197,7 @@
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "1aQ09HRqdARaEPgtSNfkss",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -244,42 +206,32 @@
|
||||
"b": 114,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 720,
|
||||
"height": 1280
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_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
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 720,
|
||||
"height": 1280
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"y": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "1aQ09HRqdARaEPgtSNfkss"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
@@ -289,8 +241,6 @@
|
||||
"__id__": 5
|
||||
},
|
||||
"_enabled": true,
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "a23235d1-15db-4b95-8439-a2e005bfff91"
|
||||
},
|
||||
@@ -305,9 +255,9 @@
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_state": 0,
|
||||
"_atlas": null,
|
||||
"_id": "c5huKcZEBHGb1USJTTY8vL"
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_atlas": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
@@ -317,7 +267,7 @@
|
||||
"__id__": 5
|
||||
},
|
||||
"_enabled": true,
|
||||
"alignMode": 1,
|
||||
"isAlignOnce": true,
|
||||
"_target": null,
|
||||
"_alignFlags": 45,
|
||||
"_left": 0,
|
||||
@@ -333,8 +283,7 @@
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 100,
|
||||
"_originalHeight": 100,
|
||||
"_id": "33bkm/X/ZD64TH1CoTn+EC"
|
||||
"_originalHeight": 100
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -348,14 +297,15 @@
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 2,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 20
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "9c3kutx0dFaIOjULjZcGey",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -364,42 +314,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_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
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"y": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "9c3kutx0dFaIOjULjZcGey"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -416,14 +356,15 @@
|
||||
"__id__": 13
|
||||
}
|
||||
],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 3,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 17
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "7a1hs8UB9HO4+JV725mtgK",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -432,42 +373,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 500,
|
||||
"height": 800
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_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
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 500,
|
||||
"height": 800
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"y": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "7a1hs8UB9HO4+JV725mtgK"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -481,14 +412,15 @@
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 0,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 12
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "89DW7M+MBCar0ymvPGQdgg",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -497,42 +429,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 500,
|
||||
"height": 800
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_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
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 500,
|
||||
"height": 800
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"y": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "89DW7M+MBCar0ymvPGQdgg"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -542,10 +464,11 @@
|
||||
"__id__": 10
|
||||
},
|
||||
"_children": [],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 0,
|
||||
"_components": [],
|
||||
"_prefab": null,
|
||||
"_id": "aazVaMb4tK4IQxSXbVsMnM",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -554,42 +477,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 500,
|
||||
"height": 800
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 1
|
||||
},
|
||||
"_position": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 398,
|
||||
"z": 0
|
||||
},
|
||||
"_scale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 500,
|
||||
"height": 800
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"y": 398
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "aazVaMb4tK4IQxSXbVsMnM"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Mask",
|
||||
@@ -599,14 +512,11 @@
|
||||
"__id__": 10
|
||||
},
|
||||
"_enabled": true,
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": null,
|
||||
"_type": 0,
|
||||
"_segments": 64,
|
||||
"_segements": 64,
|
||||
"_N$spriteFrame": null,
|
||||
"_N$alphaThreshold": 0,
|
||||
"_N$inverted": false,
|
||||
"_id": "28Yg8DM9hCpqDlBsyEejXu"
|
||||
"_N$inverted": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -620,8 +530,8 @@
|
||||
"__id__": 14
|
||||
}
|
||||
],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 0,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 16
|
||||
@@ -634,6 +544,7 @@
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "eaO+bWvW1KT6NJXHppda3/",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -642,42 +553,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 12,
|
||||
"height": 800
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 1,
|
||||
"y": 0.5
|
||||
},
|
||||
"_position": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 250,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_scale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 12,
|
||||
"height": 800
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 250,
|
||||
"y": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "eaO+bWvW1KT6NJXHppda3/"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -687,14 +588,15 @@
|
||||
"__id__": 13
|
||||
},
|
||||
"_children": [],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 0,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 15
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "a4lj1XN7FDephodOieJShJ",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -703,42 +605,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 10,
|
||||
"height": 30
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 1,
|
||||
"y": 0
|
||||
},
|
||||
"_position": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -1,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_scale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 10,
|
||||
"height": 30
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": -1,
|
||||
"y": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "a4lj1XN7FDephodOieJShJ"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
@@ -748,8 +640,6 @@
|
||||
"__id__": 14
|
||||
},
|
||||
"_enabled": true,
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "5c3bb932-6c3c-468f-88a9-c8c61d458641"
|
||||
},
|
||||
@@ -764,9 +654,9 @@
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_state": 0,
|
||||
"_atlas": null,
|
||||
"_id": "37yw60+ydMvIlEzBZ5L3L4"
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_atlas": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Scrollbar",
|
||||
@@ -786,8 +676,7 @@
|
||||
"_N$handle": {
|
||||
"__id__": 15
|
||||
},
|
||||
"_N$direction": 1,
|
||||
"_id": "fdHfFqM3NEDIr2mK6pftGH"
|
||||
"_N$direction": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ScrollView",
|
||||
@@ -811,8 +700,7 @@
|
||||
"_N$horizontalScrollBar": null,
|
||||
"_N$verticalScrollBar": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_id": "dfObPP8ohILYQjp0mbgF+D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
@@ -822,7 +710,7 @@
|
||||
"__id__": 13
|
||||
},
|
||||
"_enabled": true,
|
||||
"alignMode": 0,
|
||||
"isAlignOnce": true,
|
||||
"_target": null,
|
||||
"_alignFlags": 37,
|
||||
"_left": 350.07654921020657,
|
||||
@@ -838,8 +726,7 @@
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 237,
|
||||
"_id": "b8HWMem/NGAKzrMuNRyoow"
|
||||
"_originalHeight": 237
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
@@ -849,8 +736,6 @@
|
||||
"__id__": 13
|
||||
},
|
||||
"_enabled": true,
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "5fe5dcaa-b513-4dc5-a166-573627b3a159"
|
||||
},
|
||||
@@ -865,12 +750,12 @@
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_state": 0,
|
||||
"_atlas": null,
|
||||
"_id": "46RIP8i/VPM60/5c2q88Z/"
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_atlas": null
|
||||
},
|
||||
{
|
||||
"__type__": "8a20blSjf1FOKuo0wzCpV8A",
|
||||
"__type__": "2a51dYQx7hLjKNhfL6VU6y5",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
@@ -880,12 +765,11 @@
|
||||
"itemTemplate": {
|
||||
"__uuid__": "ee8a03a3-1f23-464b-abf1-1800df851e7e"
|
||||
},
|
||||
"spacing": 5,
|
||||
"spacing": 1,
|
||||
"spawnCount": 2,
|
||||
"scrollView": {
|
||||
"__id__": 17
|
||||
},
|
||||
"_id": "20p8iQiRVBZr5epcRxWS/B"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
@@ -895,14 +779,15 @@
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_tag": -1,
|
||||
"_active": true,
|
||||
"_level": 2,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_id": "240Yj3vf1Ct4NUbczT47fQ",
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
@@ -911,42 +796,32 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 40
|
||||
},
|
||||
"_cascadeOpacityEnabled": true,
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_position": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -509,
|
||||
"z": 0
|
||||
},
|
||||
"_scale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 40
|
||||
},
|
||||
"_rotationX": 0,
|
||||
"_rotationY": 0,
|
||||
"_quat": {
|
||||
"__type__": "cc.Quat",
|
||||
"_scaleX": 1,
|
||||
"_scaleY": 1,
|
||||
"_position": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"y": -509
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_zIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "240Yj3vf1Ct4NUbczT47fQ"
|
||||
"_localZOrder": 0,
|
||||
"_globalZOrder": 0,
|
||||
"_opacityModifyRGB": false,
|
||||
"groupIndex": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
@@ -956,22 +831,19 @@
|
||||
"__id__": 21
|
||||
},
|
||||
"_enabled": true,
|
||||
"_srcBlendFactor": 1,
|
||||
"_dstBlendFactor": 771,
|
||||
"_useOriginalSize": false,
|
||||
"_string": "",
|
||||
"_N$string": "",
|
||||
"_actualFontSize": 40,
|
||||
"_fontSize": 40,
|
||||
"_lineHeight": 40,
|
||||
"_enableWrapText": true,
|
||||
"_N$file": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_N$string": "",
|
||||
"_N$horizontalAlign": 1,
|
||||
"_N$verticalAlign": 1,
|
||||
"_N$fontFamily": "Arial",
|
||||
"_N$overflow": 0,
|
||||
"_id": "c0Y+AeoWtL3Jk9N1qw9neE"
|
||||
"_N$overflow": 0
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Canvas",
|
||||
@@ -987,8 +859,7 @@
|
||||
"height": 1280
|
||||
},
|
||||
"_fitWidth": false,
|
||||
"_fitHeight": true,
|
||||
"_id": "becpQMleZK37N3DzbrU7bD"
|
||||
"_fitHeight": true
|
||||
},
|
||||
{
|
||||
"__type__": "280c3rsZJJKnZ9RqbALVwtK",
|
||||
@@ -1003,7 +874,6 @@
|
||||
},
|
||||
"tipLabel": {
|
||||
"__id__": 22
|
||||
},
|
||||
"_id": "f98aT2FEZJ76PlU13vSybi"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1,6 +1,5 @@
|
||||
import ListView, {AbsAdapter} from "./ListView";
|
||||
|
||||
const ListAdapter = require('./ListAdapter');
|
||||
const ListView = require('ListView');
|
||||
const ListAdapter = require('ListAdapter');
|
||||
|
||||
cc.Class({
|
||||
extends: cc.Component,
|
||||
|
||||
@@ -1,13 +1,39 @@
|
||||
import {AbsAdapter} from "./ListView";
|
||||
|
||||
const ListItem = require('./ListItem');
|
||||
|
||||
cc.Class({
|
||||
extends: AbsAdapter,
|
||||
updateView(item, posIndex) {
|
||||
let comp = item.getComponent(ListItem);
|
||||
if (comp) {
|
||||
comp.setData(this.getItem(posIndex));
|
||||
}
|
||||
class AbsAdapter {
|
||||
constructor() {
|
||||
this.dataSet = [];
|
||||
this.componentName = '';
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} data 数据
|
||||
* @param {*} componentName item的脚本名
|
||||
*/
|
||||
setDataSet(data = [], componentName) {
|
||||
this.dataSet = data;
|
||||
this.componentName = componentName;
|
||||
}
|
||||
|
||||
getCount() {
|
||||
return this.dataSet.length;
|
||||
}
|
||||
|
||||
getItem(posIndex) {
|
||||
return this.dataSet[posIndex];
|
||||
}
|
||||
|
||||
_getView(item, posIndex) {
|
||||
this.updateView(item, posIndex);
|
||||
return item;
|
||||
}
|
||||
|
||||
updateView(item, posIndex) {
|
||||
let comp = item.getComponent(this.componentName);
|
||||
if (comp) {
|
||||
comp.setData(this.getItem(posIndex));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = AbsAdapter;
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"ver": "1.0.5",
|
||||
"uuid": "9ec2acad-d240-4e35-9106-069a09c2f73d",
|
||||
"uuid": "1bb1a322-40fe-41bd-b935-8b7979d1974a",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
|
||||
304
ListViewJsDemo/assets/Script/ListView.js
Normal file
304
ListViewJsDemo/assets/Script/ListView.js
Normal file
@@ -0,0 +1,304 @@
|
||||
cc.Class({
|
||||
extends: cc.Component,
|
||||
|
||||
properties: {
|
||||
itemTemplate: cc.Prefab,
|
||||
spacing: 1,
|
||||
spawnCount: 2,
|
||||
scrollView: cc.ScrollView,
|
||||
},
|
||||
|
||||
initProperties() {
|
||||
this.content = null;
|
||||
this.adapter = null;
|
||||
this._items = new cc.NodePool();
|
||||
// 记录当前填充在树上的索引. 用来快速查找哪些位置缺少item了.
|
||||
this._filledIds = {};
|
||||
this.horizontal = false;
|
||||
// 初始时即计算item的高度.因为布局时要用到.
|
||||
this._itemHeight = 1;
|
||||
this._itemWidth = 1;
|
||||
this._itemsVisible = 1;
|
||||
this.lastStartIndex = -1;
|
||||
this.scrollTopNotifyed = false;
|
||||
this.scrollBottomNotifyed = false;
|
||||
this.pullDownCallback = () => {};
|
||||
this.pullUpCallback = () => {};
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
this.registerEvent();
|
||||
this.init();
|
||||
},
|
||||
|
||||
registerEvent() {
|
||||
|
||||
},
|
||||
|
||||
init(data) {
|
||||
this.initProperties();
|
||||
if (this.scrollView) {
|
||||
this.content = this.scrollView.content;
|
||||
this.horizontal = this.scrollView.horizontal;
|
||||
if (this.horizontal) {
|
||||
this.scrollView.vertical = false;
|
||||
this.content.anchorX = 0;
|
||||
this.content.x = this.content.parent.width * this.content.parent.anchorX;
|
||||
} else {
|
||||
this.scrollView.vertical = true;
|
||||
this.content.anchorY = 1;
|
||||
this.content.y = this.content.parent.height * this.content.parent.anchorY;
|
||||
}
|
||||
} else {
|
||||
console.error('ListView need a scrollView for showing.');
|
||||
}
|
||||
let itemOne = this._items.get() || cc.instantiate(this.itemTemplate);
|
||||
this._items.put(itemOne);
|
||||
this._itemHeight = itemOne.height || 10;
|
||||
this._itemWidth = itemOne.width || 10;
|
||||
|
||||
if (this.horizontal) {
|
||||
this._itemsVisible = Math.ceil(this.content.parent.width / this._itemWidth);
|
||||
} else {
|
||||
this._itemsVisible = Math.ceil(this.content.parent.height / this._itemHeight);
|
||||
}
|
||||
console.log('可见区域的item数量为:', this._itemsVisible);
|
||||
this.adjustEvent();
|
||||
},
|
||||
|
||||
setAdapter(adapter) {
|
||||
this.adapter = adapter;
|
||||
if (this.adapter == null) {
|
||||
console.warn('adapter 为空.');
|
||||
return;
|
||||
}
|
||||
if (this.itemTemplate == null) {
|
||||
console.error('Listview 未设置待显示的Item模板.');
|
||||
return;
|
||||
}
|
||||
this.clearState();
|
||||
this.notifyUpdate();
|
||||
},
|
||||
|
||||
clearState() {
|
||||
this.content.removeAllChildren();
|
||||
this.scrollTopNotifyed = false;
|
||||
this.scrollBottomNotifyed = false;
|
||||
},
|
||||
|
||||
getItemIndex(height) {
|
||||
return Math.floor(Math.abs(height / ((this._itemHeight + this.spacing))));
|
||||
},
|
||||
|
||||
getPositionInView(item) {
|
||||
let worldPos = item.parent.convertToWorldSpaceAR(item.position);
|
||||
let viewPos = this.scrollView.node.convertToNodeSpaceAR(worldPos);
|
||||
return viewPos;
|
||||
},
|
||||
|
||||
// 数据变更了需要进行更新UI显示, 可只更新某一条.
|
||||
notifyUpdate(updateIndex) {
|
||||
if (this.adapter == null) {
|
||||
return;
|
||||
}
|
||||
if (updateIndex && updateIndex.length > 0) {
|
||||
updateIndex.forEach(i => {
|
||||
if (this._filledIds.hasOwnProperty(i)) {
|
||||
delete this._filledIds[i];
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Object.keys(this._filledIds).forEach(key => {
|
||||
delete this._filledIds[key];
|
||||
});
|
||||
}
|
||||
this.lastStartIndex = -1;
|
||||
if (this.horizontal) {
|
||||
this.content.width = this.adapter.getCount() * (this._itemWidth + this.spacing) + this.spacing;
|
||||
} else {
|
||||
this.content.height = this.adapter.getCount() * (this._itemHeight + this.spacing) + this.spacing; // get total content height
|
||||
}
|
||||
// this.content.removeAllChildren();
|
||||
|
||||
this.scrollView.scrollToTop();
|
||||
},
|
||||
scrollToTop(anim = false) {
|
||||
this.scrollView.scrollToTop(anim ? 1 : 0);
|
||||
},
|
||||
|
||||
scrollToBottom(anim = false) {
|
||||
this.scrollView.scrollToBottom(anim ? 1 : 0);
|
||||
},
|
||||
|
||||
scrollToLeft(anim = false) {
|
||||
this.scrollView.scrollToLeft(anim ? 1 : 0);
|
||||
},
|
||||
|
||||
scrollToRight(anim = false) {
|
||||
this.scrollView.scrollToRight(anim ? 1 : 0);
|
||||
},
|
||||
|
||||
// 下拉事件.
|
||||
pullDown(callback, this$) {
|
||||
this.pullDownCallback = callback.bind(this$);
|
||||
},
|
||||
|
||||
// 上拉事件.
|
||||
pullUp(callback, this$) {
|
||||
this.pullUpCallback = callback.bind(this$);
|
||||
},
|
||||
|
||||
update(dt) {
|
||||
const startIndex = this.checkNeedUpdate();
|
||||
// console.log('startIdx=', startIndex);
|
||||
if (startIndex >= 0) {
|
||||
this.updateView(startIndex);
|
||||
}
|
||||
},
|
||||
|
||||
// 向某位置添加一个item.
|
||||
_layoutVertical(child, posIndex) {
|
||||
this.content.addChild(child);
|
||||
// 增加一个tag 属性用来存储child的位置索引.
|
||||
child['_tag'] = posIndex;
|
||||
this._filledIds[posIndex] = posIndex;
|
||||
child.setPosition(0, -child.height * (0.5 + posIndex) - this.spacing * (posIndex + 1));
|
||||
},
|
||||
|
||||
// 向某位置添加一个item.
|
||||
_layoutHorizontal(child, posIndex) {
|
||||
this.content.addChild(child);
|
||||
// 增加一个tag 属性用来存储child的位置索引.
|
||||
child['_tag'] = posIndex;
|
||||
this._filledIds[posIndex] = posIndex;
|
||||
child.setPosition(-child.width * (0.5 + posIndex) - this.spacing * (posIndex + 1), 0);
|
||||
},
|
||||
|
||||
// 获取可回收item
|
||||
getRecycleItems(beginIndex, endIndex) {
|
||||
const children = this.content.children;
|
||||
const recycles = [];
|
||||
children.forEach(item => {
|
||||
if (item['_tag'] < beginIndex || item['_tag'] > endIndex) {
|
||||
recycles.push(item);
|
||||
delete this._filledIds[item['_tag']];
|
||||
}
|
||||
});
|
||||
return recycles;
|
||||
},
|
||||
|
||||
// 填充View.
|
||||
updateView(startIndex) {
|
||||
let itemStartIndex = startIndex;
|
||||
// 比实际元素多3个.
|
||||
let itemEndIndex = itemStartIndex + this._itemsVisible + (this.spawnCount || 2);
|
||||
const totalCount = this.adapter.getCount();
|
||||
if (itemStartIndex >= totalCount) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (itemEndIndex > totalCount) {
|
||||
itemEndIndex = totalCount;
|
||||
if (!this.scrollBottomNotifyed) {
|
||||
this.notifyScrollToBottom();
|
||||
this.scrollBottomNotifyed = true;
|
||||
}
|
||||
} else {
|
||||
this.scrollBottomNotifyed = false;
|
||||
}
|
||||
|
||||
// 回收需要回收的元素位置.向上少收一个.向下少收2两.
|
||||
const recyles = this.getRecycleItems(itemStartIndex - (this.spawnCount || 2), itemEndIndex);
|
||||
recyles.forEach(item => {
|
||||
this._items.put(item);
|
||||
});
|
||||
|
||||
// 查找需要更新的元素位置.
|
||||
const updates = this.findUpdateIndex(itemStartIndex, itemEndIndex);
|
||||
|
||||
// 更新相应位置.
|
||||
for (let index of updates) {
|
||||
let child = this.adapter._getView(this._items.get() || cc.instantiate(this.itemTemplate), index);
|
||||
this.horizontal ?
|
||||
this._layoutHorizontal(child, index) :
|
||||
this._layoutVertical(child, index);
|
||||
}
|
||||
},
|
||||
|
||||
// 检测是否需要更新UI.
|
||||
checkNeedUpdate() {
|
||||
if (this.adapter == null) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
let scroll = this.horizontal ? (this.content.x - this.content.parent.width * this.content.parent.anchorX) :
|
||||
(this.content.y - this.content.parent.height * this.content.parent.anchorY);
|
||||
if (scroll < 0) { //为负有bug
|
||||
scroll = 0;
|
||||
}
|
||||
let itemStartIndex = Math.floor(scroll / ((this.horizontal ? this._itemWidth : this._itemHeight) + this.spacing));
|
||||
if (itemStartIndex < 0 && !this.scrollTopNotifyed) {
|
||||
this.notifyScrollToTop();
|
||||
this.scrollTopNotifyed = true;
|
||||
return itemStartIndex;
|
||||
}
|
||||
// 防止重复触发topNotify.仅当首item不可见后才能再次触发
|
||||
if (itemStartIndex > 0) {
|
||||
this.scrollTopNotifyed = false;
|
||||
}
|
||||
|
||||
if (this.lastStartIndex != itemStartIndex) {
|
||||
this.lastStartIndex = itemStartIndex;
|
||||
return itemStartIndex;
|
||||
}
|
||||
|
||||
return -1;
|
||||
},
|
||||
|
||||
// 查找需要补充的元素索引.
|
||||
findUpdateIndex(itemStartIndex, itemEndIndex) {
|
||||
const d = [];
|
||||
for (let i = itemStartIndex; i < itemEndIndex; i++) {
|
||||
if (this._filledIds.hasOwnProperty(i)) {
|
||||
continue;
|
||||
}
|
||||
d.push(i);
|
||||
}
|
||||
return d;
|
||||
},
|
||||
|
||||
notifyScrollToTop() {
|
||||
if (!this.adapter || this.adapter.getCount() <= 0) {
|
||||
return;
|
||||
}
|
||||
if (this.pullDownCallback) {
|
||||
this.pullDownCallback();
|
||||
}
|
||||
},
|
||||
|
||||
notifyScrollToBottom() {
|
||||
if (!this.adapter || this.adapter.getCount() <= 0) {
|
||||
return;
|
||||
}
|
||||
if (this.pullUpCallback) {
|
||||
this.pullUpCallback();
|
||||
}
|
||||
},
|
||||
|
||||
adjustEvent() {
|
||||
this.content.on(this.isMobile() ? cc.Node.EventType.TOUCH_END : cc.Node.EventType.MOUSE_UP, () => {
|
||||
this.scrollTopNotifyed = false;
|
||||
this.scrollBottomNotifyed = false;
|
||||
}, this);
|
||||
this.content.on(this.isMobile() ? cc.Node.EventType.TOUCH_CANCEL : cc.Node.EventType.MOUSE_LEAVE, () => {
|
||||
this.scrollTopNotifyed = false;
|
||||
this.scrollBottomNotifyed = false;
|
||||
}, this);
|
||||
},
|
||||
|
||||
isMobile() {
|
||||
return (cc.sys.isMobile || cc.sys.platform === cc.sys.WECHAT_GAME || cc.sys.platform === cc.sys.QQ_PLAY);
|
||||
},
|
||||
|
||||
onDestroy() {}
|
||||
});
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"ver": "1.0.5",
|
||||
"uuid": "8a20b952-8dfd-4538-aba8-d30cc2a55f00",
|
||||
"uuid": "2a51d610-c7b8-4b8c-a361-7cbe9553acb9",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
@@ -1,321 +0,0 @@
|
||||
const {ccclass, property} = cc._decorator;
|
||||
|
||||
@ccclass
|
||||
export default class ListView extends cc.Component {
|
||||
|
||||
@property(cc.Prefab)
|
||||
private itemTemplate: cc.Prefab = null;
|
||||
|
||||
@property
|
||||
private spacing: number = 1;
|
||||
|
||||
// 比可见元素多缓存3个, 缓存越多,快速滑动越流畅,但同时初始化越慢.
|
||||
@property
|
||||
private spawnCount: number = 2;
|
||||
|
||||
@property(cc.ScrollView)
|
||||
private scrollView: cc.ScrollView = null;
|
||||
|
||||
private content: cc.Node = null;
|
||||
|
||||
private adapter: AbsAdapter = null;
|
||||
|
||||
private readonly _items: cc.NodePool = new cc.NodePool();
|
||||
// 记录当前填充在树上的索引. 用来快速查找哪些位置缺少item了.
|
||||
private readonly _filledIds: { [key: number]: number } = {};
|
||||
|
||||
private horizontal: boolean = false;
|
||||
|
||||
// 初始时即计算item的高度.因为布局时要用到.
|
||||
private _itemHeight: number = 1;
|
||||
|
||||
private _itemWidth: number = 1;
|
||||
|
||||
private _itemsVisible: number = 1;
|
||||
|
||||
private lastStartIndex: number = -1;
|
||||
|
||||
private scrollTopNotifyed: boolean = false;
|
||||
private scrollBottomNotifyed: boolean = false;
|
||||
|
||||
private pullDownCallback: () => void = null;
|
||||
private pullUpCallback: () => void = null;
|
||||
|
||||
public onLoad() {
|
||||
if (this.scrollView) {
|
||||
this.content = this.scrollView.content;
|
||||
this.horizontal = this.scrollView.horizontal;
|
||||
if (this.horizontal) {
|
||||
this.scrollView.vertical = false
|
||||
this.content.anchorX = 0;
|
||||
this.content.x = this.content.parent.width * this.content.parent.anchorX;
|
||||
} else {
|
||||
this.scrollView.vertical = true;
|
||||
this.content.anchorY = 1;
|
||||
this.content.y = this.content.parent.height * this.content.parent.anchorY;
|
||||
}
|
||||
} else {
|
||||
console.error("ListView need a scrollView for showing.")
|
||||
}
|
||||
let itemOne = this._items.get() || cc.instantiate(this.itemTemplate);
|
||||
this._items.put(itemOne);
|
||||
this._itemHeight = itemOne.height || 10;
|
||||
this._itemWidth = itemOne.width || 10;
|
||||
|
||||
if (this.horizontal) {
|
||||
this._itemsVisible = Math.ceil(this.content.parent.width / this._itemWidth);
|
||||
} else {
|
||||
this._itemsVisible = Math.ceil(this.content.parent.height / this._itemHeight);
|
||||
}
|
||||
console.log("可见区域的item数量为:", this._itemsVisible);
|
||||
this.adjustEvent();
|
||||
}
|
||||
|
||||
public async setAdapter(adapter: AbsAdapter) {
|
||||
this.adapter = adapter;
|
||||
if (this.adapter == null) {
|
||||
console.warn("adapter 为空.")
|
||||
return
|
||||
}
|
||||
if (this.itemTemplate == null) {
|
||||
console.error("Listview 未设置待显示的Item模板.");
|
||||
return;
|
||||
}
|
||||
|
||||
this.notifyUpdate();
|
||||
}
|
||||
|
||||
public getItemIndex(height: number): number {
|
||||
return Math.floor(Math.abs(height / ((this._itemHeight + this.spacing))));
|
||||
}
|
||||
|
||||
public getPositionInView(item: cc.Node) {
|
||||
let worldPos = item.parent.convertToWorldSpaceAR(item.position);
|
||||
let viewPos = this.scrollView.node.convertToNodeSpaceAR(worldPos);
|
||||
return viewPos;
|
||||
}
|
||||
|
||||
// 数据变更了需要进行更新UI显示, 可只更新某一条.
|
||||
public notifyUpdate(updateIndex?: number[]) {
|
||||
if (this.adapter == null) {
|
||||
return;
|
||||
}
|
||||
if (updateIndex && updateIndex.length > 0) {
|
||||
updateIndex.forEach(i => {
|
||||
if (this._filledIds.hasOwnProperty(i)) {
|
||||
delete this._filledIds[i];
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Object.keys(this._filledIds).forEach(key => {
|
||||
delete this._filledIds[key];
|
||||
})
|
||||
}
|
||||
this.lastStartIndex = -1;
|
||||
if (this.horizontal) {
|
||||
this.content.width = this.adapter.getCount() * (this._itemWidth + this.spacing) + this.spacing;
|
||||
} else {
|
||||
this.content.height = this.adapter.getCount() * (this._itemHeight + this.spacing) + this.spacing; // get total content height
|
||||
}
|
||||
this.scrollView.scrollToTop()
|
||||
}
|
||||
|
||||
public scrollToTop(anim: boolean = false) {
|
||||
this.scrollView.scrollToTop(anim ? 1 : 0);
|
||||
}
|
||||
|
||||
public scrollToBottom(anim: boolean = false) {
|
||||
this.scrollView.scrollToBottom(anim ? 1 : 0);
|
||||
}
|
||||
|
||||
public scrollToLeft(anim: boolean = false) {
|
||||
this.scrollView.scrollToLeft(anim ? 1 : 0);
|
||||
}
|
||||
|
||||
public scrollToRight(anim: boolean = false) {
|
||||
this.scrollView.scrollToRight(anim ? 1 : 0);
|
||||
}
|
||||
|
||||
// 下拉事件.
|
||||
public pullDown(callback: () => void, this$: any) {
|
||||
this.pullDownCallback = callback.bind(this$);
|
||||
}
|
||||
|
||||
// 上拉事件.
|
||||
public pullUp(callback: () => void, this$: any) {
|
||||
this.pullUpCallback = callback.bind(this$);
|
||||
}
|
||||
|
||||
protected update(dt) {
|
||||
const startIndex = this.checkNeedUpdate();
|
||||
if (startIndex >= 0) {
|
||||
this.updateView(startIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// 向某位置添加一个item.
|
||||
private _layoutVertical(child: cc.Node, posIndex: number) {
|
||||
this.content.addChild(child);
|
||||
// 增加一个tag 属性用来存储child的位置索引.
|
||||
child["_tag"] = posIndex;
|
||||
this._filledIds[posIndex] = posIndex;
|
||||
child.setPosition(0, -child.height * (0.5 + posIndex) - this.spacing * (posIndex + 1));
|
||||
}
|
||||
|
||||
// 向某位置添加一个item.
|
||||
private _layoutHorizontal(child: cc.Node, posIndex: number) {
|
||||
this.content.addChild(child);
|
||||
// 增加一个tag 属性用来存储child的位置索引.
|
||||
child["_tag"] = posIndex;
|
||||
this._filledIds[posIndex] = posIndex;
|
||||
child.setPosition(-child.width * (0.5 + posIndex) - this.spacing * (posIndex + 1), 0);
|
||||
}
|
||||
|
||||
// 获取可回收item
|
||||
private getRecycleItems(beginIndex: number, endIndex: number): cc.Node[] {
|
||||
const children = this.content.children;
|
||||
const recycles = []
|
||||
children.forEach(item => {
|
||||
if (item["_tag"] < beginIndex || item["_tag"] > endIndex) {
|
||||
recycles.push(item);
|
||||
delete this._filledIds[item["_tag"]];
|
||||
}
|
||||
})
|
||||
return recycles;
|
||||
}
|
||||
|
||||
// 填充View.
|
||||
private updateView(startIndex) {
|
||||
let itemStartIndex = startIndex;
|
||||
// 比实际元素多3个.
|
||||
let itemEndIndex = itemStartIndex + this._itemsVisible + (this.spawnCount || 2);
|
||||
const totalCount = this.adapter.getCount();
|
||||
if (itemStartIndex >= totalCount) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (itemEndIndex > totalCount) {
|
||||
itemEndIndex = totalCount;
|
||||
if (!this.scrollBottomNotifyed) {
|
||||
this.notifyScrollToBottom()
|
||||
this.scrollBottomNotifyed = true;
|
||||
}
|
||||
} else {
|
||||
this.scrollBottomNotifyed = false;
|
||||
}
|
||||
|
||||
// 回收需要回收的元素位置.向上少收一个.向下少收2两.
|
||||
const recyles = this.getRecycleItems(itemStartIndex - (this.spawnCount || 2), itemEndIndex);
|
||||
recyles.forEach(item => {
|
||||
this._items.put(item);
|
||||
})
|
||||
|
||||
// 查找需要更新的元素位置.
|
||||
const updates = this.findUpdateIndex(itemStartIndex, itemEndIndex)
|
||||
|
||||
// 更新相应位置.
|
||||
for (let index of updates) {
|
||||
let child = this.adapter._getView(this._items.get() || cc.instantiate(this.itemTemplate), index);
|
||||
this.horizontal ?
|
||||
this._layoutHorizontal(child, index) :
|
||||
this._layoutVertical(child, index);
|
||||
}
|
||||
}
|
||||
|
||||
// 检测是否需要更新UI.
|
||||
private checkNeedUpdate(): number {
|
||||
if (this.adapter == null) {
|
||||
return -1
|
||||
}
|
||||
|
||||
let scroll = this.horizontal ? (this.content.x - this.content.parent.width * this.content.parent.anchorX)
|
||||
: (this.content.y - this.content.parent.height * this.content.parent.anchorY);
|
||||
let itemStartIndex = Math.floor(scroll / ((this.horizontal ? this._itemWidth : this._itemHeight) + this.spacing));
|
||||
if (itemStartIndex < 0 && !this.scrollTopNotifyed) {
|
||||
this.notifyScrollToTop();
|
||||
this.scrollTopNotifyed = true;
|
||||
return itemStartIndex;
|
||||
}
|
||||
// 防止重复触发topNotify.仅当首item不可见后才能再次触发
|
||||
if (itemStartIndex > 0) {
|
||||
this.scrollTopNotifyed = false;
|
||||
}
|
||||
|
||||
if (this.lastStartIndex != itemStartIndex) {
|
||||
this.lastStartIndex = itemStartIndex;
|
||||
return itemStartIndex;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 查找需要补充的元素索引.
|
||||
private findUpdateIndex(itemStartIndex: number, itemEndIndex: number): number[] {
|
||||
const d = [];
|
||||
for (let i = itemStartIndex; i < itemEndIndex; i++) {
|
||||
if (this._filledIds.hasOwnProperty(i)) {
|
||||
continue;
|
||||
}
|
||||
d.push(i);
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
private notifyScrollToTop() {
|
||||
if (!this.adapter || this.adapter.getCount() <= 0) {
|
||||
return;
|
||||
}
|
||||
if (this.pullDownCallback) {
|
||||
this.pullDownCallback();
|
||||
}
|
||||
}
|
||||
|
||||
private notifyScrollToBottom() {
|
||||
if (!this.adapter || this.adapter.getCount() <= 0) {
|
||||
return;
|
||||
}
|
||||
if (this.pullUpCallback) {
|
||||
this.pullUpCallback();
|
||||
}
|
||||
}
|
||||
|
||||
private adjustEvent() {
|
||||
this.content.on(this.isMobile() ? cc.Node.EventType.TOUCH_END : cc.Node.EventType.MOUSE_UP, () => {
|
||||
this.scrollTopNotifyed = false;
|
||||
this.scrollBottomNotifyed = false;
|
||||
}, this)
|
||||
this.content.on(this.isMobile() ? cc.Node.EventType.TOUCH_CANCEL : cc.Node.EventType.MOUSE_LEAVE, () => {
|
||||
this.scrollTopNotifyed = false;
|
||||
this.scrollBottomNotifyed = false;
|
||||
}, this);
|
||||
}
|
||||
|
||||
private isMobile(): boolean {
|
||||
return (cc.sys.isMobile || cc.sys.platform === cc.sys.WECHAT_GAME || cc.sys.platform === cc.sys.QQ_PLAY)
|
||||
}
|
||||
}
|
||||
|
||||
// 数据绑定的辅助适配器
|
||||
export abstract class AbsAdapter {
|
||||
|
||||
private dataSet: any[] = [];
|
||||
|
||||
public setDataSet(data: any[]) {
|
||||
this.dataSet = data;
|
||||
}
|
||||
|
||||
public getCount(): number {
|
||||
return this.dataSet.length;
|
||||
}
|
||||
|
||||
public getItem(posIndex: number): any {
|
||||
return this.dataSet[posIndex];
|
||||
}
|
||||
|
||||
public _getView(item: cc.Node, posIndex: number): cc.Node {
|
||||
this.updateView(item, posIndex);
|
||||
return item;
|
||||
}
|
||||
|
||||
public abstract updateView(item: cc.Node, posIndex: number);
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
{
|
||||
"ver": "2.2.0",
|
||||
"ver": "1.0.0",
|
||||
"uuid": "6aa0aa6a-ebee-4155-a088-a687a6aadec4",
|
||||
"type": "sprite",
|
||||
"wrapMode": "clamp",
|
||||
"filterMode": "bilinear",
|
||||
"premultiplyAlpha": false,
|
||||
"subMetas": {
|
||||
"HelloWorld": {
|
||||
"ver": "1.0.3",
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
{
|
||||
"ver": "2.2.0",
|
||||
"ver": "1.0.0",
|
||||
"uuid": "a8027877-d8d6-4645-97a0-52d4a0123dba",
|
||||
"type": "sprite",
|
||||
"wrapMode": "clamp",
|
||||
"filterMode": "bilinear",
|
||||
"premultiplyAlpha": false,
|
||||
"subMetas": {
|
||||
"singleColor": {
|
||||
"ver": "1.0.3",
|
||||
|
||||
@@ -3,10 +3,11 @@ cc.Class({
|
||||
|
||||
properties: {
|
||||
nodeBoxBg: cc.Node,
|
||||
total: 6,//几项奖品
|
||||
section: 0,//一项奖品切多少份
|
||||
resultIdx: 0,//显示的结果id
|
||||
delayTime: 0,//延期多少才开始显示结果
|
||||
total: 6, //几项奖品
|
||||
section: 0, //一项奖品切多少份
|
||||
// resultIdx: 0, //显示的结果id
|
||||
delayTime: 0, //延期多少才开始显示结果
|
||||
isRandom: false,
|
||||
},
|
||||
|
||||
initProperties() {
|
||||
@@ -32,37 +33,43 @@ cc.Class({
|
||||
}
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
this.initProperties();
|
||||
this.initSection();
|
||||
},
|
||||
|
||||
start() {
|
||||
this.init();
|
||||
this.init({
|
||||
resultIdx: 2,
|
||||
delayTime: 3,
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {*} data
|
||||
*/
|
||||
init(data) {
|
||||
this.initProperties();
|
||||
this.resultIdx = (data.resultIdx - 1 + this.total) % this.total;
|
||||
this.delayTime = data.delayTime;
|
||||
this.onEnd = data.onFinish;
|
||||
let totalIdx = this.total - 1;
|
||||
this.onAccelerate();
|
||||
this.node.runAction(cc.sequence(cc.delayTime(1 + this.delayTime), cc.callFunc(() => {
|
||||
console.log('已经选择了');
|
||||
this.choiceIdx = (this.total - this.resultIdx) * this.section;
|
||||
this.choiceIdx = this.randomChoiceIdx(this.choiceIdx);
|
||||
this.choiceIdx = (totalIdx - this.resultIdx) * this.section;
|
||||
if (this.isRandom) {
|
||||
this.choiceIdx = this.randomChoiceIdx(this.choiceIdx);
|
||||
}
|
||||
})));
|
||||
},
|
||||
|
||||
onFinish() {
|
||||
console.log('结束了');
|
||||
this.onEnd && this.onEnd();
|
||||
},
|
||||
|
||||
randomChoiceIdx(idx) {
|
||||
console.log('randomChoiceIdx');
|
||||
let randomIdx = Math.floor(Math.random() * (this.section - 1));
|
||||
if (randomIdx == 0) {//不能是上边
|
||||
if (randomIdx == 0) { //不能是上边
|
||||
randomIdx++;
|
||||
} else if (randomIdx == this.section) {////不能是下边
|
||||
} else if (randomIdx == this.section) { ////不能是下边
|
||||
randomIdx--;
|
||||
}
|
||||
let temp = Math.floor(this.section / 2);
|
||||
@@ -90,7 +97,6 @@ cc.Class({
|
||||
console.log(rotation, this.rotationSpeed);
|
||||
this.showResult = true;
|
||||
}
|
||||
console.log('rotation=', rotation, this.rotationSpeed, idx);
|
||||
if (this.rotationSpeed <= 0) {
|
||||
this.onFinish();
|
||||
}
|
||||
@@ -151,6 +157,8 @@ cc.Class({
|
||||
* @param {*} dt
|
||||
*/
|
||||
update(dt) {
|
||||
// console.log('dt=', dt);
|
||||
dt = 0.016;
|
||||
if (this.rotationSpeed >= 0) {
|
||||
this.nodeBoxBg.rotation += this.rotationSpeed * dt;
|
||||
}
|
||||
@@ -160,6 +168,5 @@ cc.Class({
|
||||
/**
|
||||
* 统一回收组件
|
||||
*/
|
||||
onDestroy() {
|
||||
}
|
||||
onDestroy() { }
|
||||
});
|
||||
Reference in New Issue
Block a user