引导 基本完成

This commit is contained in:
2025-08-25 17:28:02 +08:00
parent 6a29821a7b
commit 6c95b3acc3
17 changed files with 1085 additions and 508 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -16,13 +16,19 @@
"_tracks": [
{
"__id__": 1
},
{
"__id__": 12
},
{
"__id__": 23
}
],
"_exoticAnimation": null,
"_events": [],
"_embeddedPlayers": [],
"_additiveSettings": {
"__id__": 12
"__id__": 35
},
"_auxiliaryCurveEntries": []
},
@@ -62,7 +68,7 @@
},
{
"__type__": "cc.animation.HierarchyPath",
"path": "Node"
"path": "Node/Tutorial_Hand"
},
{
"__type__": "cc.animation.Channel",
@@ -74,8 +80,8 @@
"__type__": "cc.RealCurve",
"_times": [
0,
0.3,
0.6
0.30000001192092896,
0.6000000238418579
],
"_values": [
{
@@ -102,7 +108,9 @@
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
"__editorExtras__": {
"broken": null
}
},
{
"__type__": "cc.RealKeyframeValue",
@@ -114,7 +122,9 @@
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
"__editorExtras__": {
"broken": null
}
}
],
"preExtrapolation": 1,
@@ -130,8 +140,8 @@
"__type__": "cc.RealCurve",
"_times": [
0,
0.3,
0.6
0.30000001192092896,
0.6000000238418579
],
"_values": [
{
@@ -158,7 +168,9 @@
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
"__editorExtras__": {
"broken": null
}
},
{
"__type__": "cc.RealKeyframeValue",
@@ -170,7 +182,9 @@
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
"__editorExtras__": {
"broken": null
}
}
],
"preExtrapolation": 1,
@@ -186,7 +200,7 @@
"__type__": "cc.RealCurve",
"_times": [
0,
0.3
0.30000001192092896
],
"_values": [
{
@@ -213,7 +227,9 @@
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
"__editorExtras__": {
"broken": null
}
}
],
"preExtrapolation": 1,
@@ -232,6 +248,500 @@
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.VectorTrack",
"_binding": {
"__type__": "cc.animation.TrackBinding",
"path": {
"__id__": 13
},
"proxy": null
},
"_channels": [
{
"__id__": 15
},
{
"__id__": 17
},
{
"__id__": 19
},
{
"__id__": 21
}
],
"_nComponents": 3
},
{
"__type__": "cc.animation.TrackPath",
"_paths": [
{
"__id__": 14
},
"scale"
]
},
{
"__type__": "cc.animation.HierarchyPath",
"path": "Node/Node"
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 16
}
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
0.6000000238418579
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 0.30000001192092896,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 3,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 18
}
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
0.6000000238418579
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 0.30000001192092896,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 3,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 20
}
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
0.6000000238418579
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 1,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 1,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 22
}
},
{
"__type__": "cc.RealCurve",
"_times": [],
"_values": [],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.ColorTrack",
"_binding": {
"__type__": "cc.animation.TrackBinding",
"path": {
"__id__": 24
},
"proxy": null
},
"_channels": [
{
"__id__": 27
},
{
"__id__": 29
},
{
"__id__": 31
},
{
"__id__": 33
}
]
},
{
"__type__": "cc.animation.TrackPath",
"_paths": [
{
"__id__": 25
},
{
"__id__": 26
},
"color"
]
},
{
"__type__": "cc.animation.HierarchyPath",
"path": "Node/Node"
},
{
"__type__": "cc.animation.ComponentPath",
"component": "cc.Sprite"
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 28
}
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
0.10000000149011612,
0.30000001192092896,
0.6000000238418579
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 253,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": {
"tangentMode": 0
}
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 30
}
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
0.10000000149011612,
0.30000001192092896,
0.6000000238418579
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 233,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": {
"tangentMode": 0
}
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 32
}
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
0.10000000149011612,
0.30000001192092896,
0.6000000238418579
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 0,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": {
"tangentMode": 0
}
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.animation.Channel",
"_curve": {
"__id__": 34
}
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
0.10000000149011612,
0.30000001192092896,
0.6000000238418579
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": {
"tangentMode": 0
}
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 255,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 0,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
"leftTangentWeight": 1,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.AnimationClipAdditiveSettings",
"enabled": false,

View File

@@ -25,11 +25,11 @@
"_active": true,
"_components": [
{
"__id__": 34
"__id__": 40
}
],
"_prefab": {
"__id__": 36
"__id__": 42
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -79,17 +79,17 @@
"_active": true,
"_components": [
{
"__id__": 27
"__id__": 33
},
{
"__id__": 29
"__id__": 35
},
{
"__id__": 31
"__id__": 37
}
],
"_prefab": {
"__id__": 33
"__id__": 39
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -133,7 +133,7 @@
"__id__": 4
}
],
"_active": true,
"_active": false,
"_components": [
{
"__id__": 10
@@ -435,16 +435,19 @@
"_children": [
{
"__id__": 18
},
{
"__id__": 24
}
],
"_active": true,
"_components": [
{
"__id__": 24
"__id__": 30
}
],
"_prefab": {
"__id__": 26
"__id__": 32
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -477,7 +480,7 @@
},
{
"__type__": "cc.Node",
"_name": "Tutorial_Hand",
"_name": "Node",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
@@ -498,8 +501,8 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"x": -33.709,
"y": 37.795,
"z": 0
},
"_lrot": {
@@ -537,6 +540,145 @@
"__prefab": {
"__id__": 20
},
"_contentSize": {
"__type__": "cc.Size",
"width": 48,
"height": 48
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "230/0ISslFLa5eThDzg8zs"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 18
},
"_enabled": true,
"__prefab": {
"__id__": 22
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 252,
"g": 216,
"b": 32,
"a": 255
},
"_spriteFrame": {
"__uuid__": "49c583b3-d566-4c79-9e4c-bd0ca4a4b717@27a21",
"__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": {
"__uuid__": "49c583b3-d566-4c79-9e4c-bd0ca4a4b717",
"__expectedType__": "cc.SpriteAtlas"
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "b8RnhodWtNZ6pA5oBXEJjS"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "90t2JlWMZC2r8RltTsPk4I",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Tutorial_Hand",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 17
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 25
},
{
"__id__": 27
}
],
"_prefab": {
"__id__": 29
},
"_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": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 24
},
"_enabled": true,
"__prefab": {
"__id__": 26
},
"_contentSize": {
"__type__": "cc.Size",
"width": 82,
@@ -559,11 +701,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 18
"__id__": 24
},
"_enabled": true,
"__prefab": {
"__id__": 22
"__id__": 28
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -621,7 +763,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 25
"__id__": 31
},
"_contentSize": {
"__type__": "cc.Size",
@@ -662,7 +804,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 28
"__id__": 34
},
"_contentSize": {
"__type__": "cc.Size",
@@ -690,7 +832,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 30
"__id__": 36
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -732,7 +874,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 32
"__id__": 38
},
"playOnLoad": true,
"_clips": [
@@ -774,7 +916,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 35
"__id__": 41
},
"_contentSize": {
"__type__": "cc.Size",

View File

@@ -28,20 +28,20 @@
"_active": true,
"_components": [
{
"__id__": 63
"__id__": 66
},
{
"__id__": 65
"__id__": 68
},
{
"__id__": 75
"__id__": 78
},
{
"__id__": 77
"__id__": 80
}
],
"_prefab": {
"__id__": 79
"__id__": 82
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -333,6 +333,12 @@
},
{
"__id__": 61
},
{
"__id__": 63
},
{
"__id__": 65
}
],
"removedComponents": []
@@ -693,7 +699,7 @@
"b": 255,
"a": 255
},
"_string": "跳过引导",
"_string": "关闭引导",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 25,
@@ -926,7 +932,7 @@
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 700,
"y": 780,
"z": 0
}
},
@@ -972,7 +978,7 @@
"value": {
"__type__": "cc.Size",
"width": 720,
"height": 200
"height": 300
}
},
{
@@ -989,7 +995,7 @@
"propertyPath": [
"_alignFlags"
],
"value": 16
"value": 17
},
{
"__type__": "cc.TargetInfo",
@@ -1018,7 +1024,7 @@
"value": {
"__type__": "cc.Size",
"width": 680,
"height": 200
"height": 300
}
},
{
@@ -1038,7 +1044,7 @@
"value": {
"__type__": "cc.Vec3",
"x": 360,
"y": 100,
"y": 150,
"z": 0
}
},
@@ -1059,7 +1065,7 @@
"value": {
"__type__": "cc.Size",
"width": 680,
"height": 213
"height": 313
}
},
{
@@ -1079,7 +1085,7 @@
"value": {
"__type__": "cc.Vec3",
"x": 460,
"y": 100,
"y": 150,
"z": 0
}
},
@@ -1089,6 +1095,37 @@
"79YIQDtXNBi4+Fe9c3EQNE"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 64
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": -212.573,
"y": -101.674,
"z": 0
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"8f5EdzC05FhrFO3eJrVhes"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 53
},
"propertyPath": [
"_top"
],
"value": 200
},
{
"__type__": "cc.UITransform",
"_name": "",
@@ -1099,7 +1136,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 64
"__id__": 67
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1127,10 +1164,10 @@
},
"_enabled": true,
"__prefab": {
"__id__": 66
"__id__": 69
},
"tipLabel": {
"__id__": 67
"__id__": 70
},
"tipNode": {
"__id__": 17
@@ -1153,11 +1190,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 68
"__id__": 71
},
"_enabled": true,
"__prefab": {
"__id__": 74
"__id__": 77
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -1223,22 +1260,22 @@
"_active": true,
"_components": [
{
"__id__": 69
"__id__": 72
},
{
"__id__": 67
"__id__": 70
},
{
"__id__": 71
"__id__": 74
}
],
"_prefab": {
"__id__": 73
"__id__": 76
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 460,
"y": 100,
"y": 150,
"z": 0
},
"_lrot": {
@@ -1270,11 +1307,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 68
"__id__": 71
},
"_enabled": true,
"__prefab": {
"__id__": 70
"__id__": 73
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1298,11 +1335,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 68
"__id__": 71
},
"_enabled": true,
"__prefab": {
"__id__": 72
"__id__": 75
},
"_alignFlags": 18,
"_target": null,
@@ -1355,7 +1392,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 76
"__id__": 79
},
"_alignFlags": 45,
"_target": null,
@@ -1391,7 +1428,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 78
"__id__": 81
},
"_id": ""
},
@@ -1411,7 +1448,7 @@
"instance": null,
"targetOverrides": [
{
"__id__": 80
"__id__": 83
}
],
"nestedPrefabInstanceRoots": [
@@ -1426,7 +1463,7 @@
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 65
"__id__": 68
},
"sourceInfo": null,
"propertyPath": [
@@ -1436,7 +1473,7 @@
"__id__": 17
},
"targetInfo": {
"__id__": 81
"__id__": 84
}
},
{

View File

@@ -15,12 +15,18 @@ export enum GuideStepType {
WAIT = "wait",
}
export const finishCurrGuide=(key:number)=>{
if(smc.guides[key]==0){
if(key==0){
oops.message.dispatchEvent(GameEvent.GuideEnd,key)
}else{
if(smc.guides[key-1]===1&&smc.guides[key]===0){
oops.message.dispatchEvent(GameEvent.GuideEnd,key)
}
}
}
export const startGuide=(key:number)=>{
if(smc.guides[key-1]==1&&smc.guides[key]==0){
if(smc.guides[key-1]===1&&smc.guides[key]===0){
oops.message.dispatchEvent(GameEvent.GuideStart,key)
}
}
@@ -33,6 +39,7 @@ export interface IGuideStep {
/** 目标节点路径(用于查找目标节点) */
key: number;
targetPath?: string;
tipParent?: string;
/** 提示文本 */
tipText?: string;
/** 提示文本偏移 */
@@ -61,8 +68,9 @@ export const GuideConfig: { [key: number]: IGuideStep } = {
id: "welcome", type: GuideStepType.WAIT,key:0,
targetPath: "root/gui/LayerUI/role_controller/mission_home/start/name",
tipText: "欢迎来到游戏",
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 },
nextStep: "start_battle", end_event: "click", noInput: true,
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 600 },
nextStep: "start_battle", waitTime: 2, end_event: "click", noInput: true,
},
1: {
id: "start_battle", type: GuideStepType.CLICK,key:1,
@@ -74,30 +82,65 @@ export const GuideConfig: { [key: number]: IGuideStep } = {
2: {
id: "hero_page", type: GuideStepType.CLICK,key:2,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/role_controller/mission_home/hero_page",
targetPath: "root/gui/LayerUI/role_controller/mission_home/btns/heros",
tipText: "去招募更多英雄增强队伍吧",
handOffset: { x: 42, y: -45 }, // 向上偏移50像素避免遮挡
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 },
},
3: {
id: "hero_info", type: GuideStepType.CLICK,key:3,
id: "to_hero_info", type: GuideStepType.CLICK,key:3,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/role_controller/mission_home/hero_page",
targetPath: "root/gui/LayerUI/role_controller/mission_home/heros_page",
tipText: "选择可以解锁的英雄吧",
handOffset: { x: 42, y: -45 }, // 向上偏移50像素避免遮挡
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 } // 向上偏移50像素避免遮挡
},
4: {
id: "re_battle", type: GuideStepType.CLICK,key:4,
id: "do_hero_info", type: GuideStepType.CLICK,key:4,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/hero_select/main/view/heros/hero2",
tipText: "点击这里选择你的第一个英雄",
handOffset: { x: 42, y: -45 }, // 向上偏移50像素避免遮挡
targetPath: "root/gui/LayerUI/Hinfo/unLock",
tipText: "招募这个英雄",
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 }// 向上偏移50像素避免遮挡
},
5: {
id: "up_lv_hero", type: GuideStepType.CLICK,key:5,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/Hinfo/upBtn",
tipText: "升级强化这个英雄",
handOffset: { x: 42, y: -45 },tipOffset: { x: 0, y: 200 } // 向上偏移50像素避免遮挡
},
6: {
id: "close_hinfo", type: GuideStepType.CLICK,key:6,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/Hinfo/back",
tipText: "返回",
handOffset: { x: 42, y: -45 },tipOffset: { x: 0, y: 200 } // 向上偏移50像素避免遮挡
},
7: {
id: "to_mission", type: GuideStepType.CLICK,key:7,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/role_controller/mission_home/btns/fight",
tipText: "再次进入战斗",
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 },
},
8: {
id: "to_add_hero", type: GuideStepType.CLICK,key:8,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/role_controller/mission_home/readyheros/hero3",
tipText: "添加上阵英雄",
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 },
},
9: {
id: "to_hero_select", type: GuideStepType.CLICK,key:9,
// 使用相对路径,从场景根节点开始查找
targetPath: "root/gui/LayerUI/hero_select/main/view/heros/hero2",
tipText: "点击这里选择你的第一个英雄",
handOffset: { x: 42, y: -45 }, // 向上偏移50像素避免遮挡
tipText: "选择英雄",
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 },
},
10: {
id: "start_battle", type: GuideStepType.CLICK,key:10,
targetPath: "root/gui/LayerUI/role_controller/mission_home/start/name",
tipText: "享受你的游戏!",
handOffset: { x: 42, y: -45 }, tipOffset: { x: 0, y: 200 },
// 42 45是手指的偏移量 0 0是提示的偏移量
},
};

View File

@@ -39,10 +39,10 @@ export enum HType {
* 橙色:金钥匙*100 item:1009 num:100
*/
export const unlockHeroCost={
[QualitySet.GREEN]:{i_uuid:Items[1006].uuid,num:100},
[QualitySet.BLUE]:{i_uuid:Items[1006].uuid,num:200},
[QualitySet.PURPLE]:{i_uuid:Items[1007].uuid,num:100},
[QualitySet.ORANGE]:{i_uuid:Items[1008].uuid,num:100},
[QualitySet.GREEN]:{i_uuid:Items[1006].uuid,num:1},
[QualitySet.BLUE]:{i_uuid:Items[1006].uuid,num:1},
[QualitySet.PURPLE]:{i_uuid:Items[1007].uuid,num:1},
[QualitySet.ORANGE]:{i_uuid:Items[1008].uuid,num:1},
}
//fac:FacSet.HERO
export const getHeroList = (quality:number=0)=>{
@@ -128,7 +128,7 @@ export const HeroInfo = {
type:HType.mage,hp:100,ap:15,dis:400,cd:1.5,speed:100,skills:[6006],
buff:[],info:"说明"},
5010:{uuid:5010,name:"战争祭祀",path:"hk1", fac:FacSet.HERO, quality:QualitySet.BLUE,lv:1,kind:2,
5010:{uuid:5010,name:"战争祭祀",path:"hk1", fac:FacSet.HERO, quality:QualitySet.ORANGE,lv:1,kind:2,
type:HType.mage,hp:100,ap:15,dis:400,cd:1.5,speed:100,skills:[6007],
buff:[],info:"说明"},

View File

@@ -273,7 +273,6 @@ export class HeroViewComp extends CCComp {
}
do_drop(){
let drop_item=MonsterDropManager.calculateMonsterDrops(this.hero_uuid,smc.data.mission,1)
startGuide(2)
this.scheduleOnce(()=>{
if(smc.guides[2]==0&&smc.current_guide==2&&smc.guides[1]==1) {
drop_item.push({item_uuid:Items[1008].uuid,count:20})

View File

@@ -83,19 +83,24 @@ export class GuideConComp extends CCComp {
/** 点击引导 */
private showClickGuide(step: IGuideStep) {
console.log("[Tutorial] 显示点击引导", step);
if (!step.targetPath) {
console.error("[Tutorial] 点击引导缺少目标路径");
return;
}
// if (!step.targetPath) {
// console.error("[Tutorial] 点击引导缺少目标路径");
// return;
// }
const targetNode = this.findTargetNode(step.targetPath);
if (!targetNode) {
console.error(`[Tutorial] 找不到目标节点: ${step.targetPath}`);
return;
}
console.log("[Tutorial] 开始点击引导UI", step.targetPath);
this.showGuideStepUI(step, targetNode);
// const targetNode = this.findTargetNode(step.targetPath);
// if (!targetNode) {
// console.error(`[Tutorial] 找不到目标节点: ${step.targetPath}`);
// return;
// }
// let tipParent:Node|null=null;
// if(step.tipParent){
// tipParent = this.findTargetNode(step.tipParent);
// }else{
// tipParent=targetNode;
// }
// console.log("[Tutorial] 开始点击引导UI", step.targetPath);
this.showGuideStepUI(step);
}
/** 显示拖拽引导 */
@@ -107,6 +112,9 @@ export class GuideConComp extends CCComp {
private showWaitGuide(step: IGuideStep) {
console.log("[Tutorial] 显示等待引导:", step.id);
this.showGuideStepUI(step);
this.scheduleOnce(() => {
this.onStepCompleted(step);
}, step.waitTime ?? 2);
// 触摸监听器现在由 GuideSetpComp 管理
}
@@ -135,6 +143,7 @@ export class GuideConComp extends CCComp {
/** 完成指定引导 */
private completeGuide(key:any) {
smc.finishGuide(key);
this.closeGuideStepUI()
console.log(`[GuideCon] 引导 ${key} 已完成,进度数组: ${JSON.stringify(smc.guides)}`);
}
@@ -155,7 +164,7 @@ export class GuideConComp extends CCComp {
/** 打开引导UI */
private showGuideStepUI(step: IGuideStep, targetNode?: Node) {
private showGuideStepUI(step: IGuideStep) {
console.log(`[GuideCon] 开始打开UI: ${step.id}, uiId: ${UIID.Guide}`);
// 关闭之前的引导UI
@@ -164,17 +173,16 @@ export class GuideConComp extends CCComp {
console.log("[Tutorial] 关闭之前的引导UI", UIID.Guide);
}
this.doOpenGuideStepUI(step, targetNode);
this.doOpenGuideStepUI(step);
}
doOpenGuideStepUI(step: IGuideStep, targetNode?: Node) {
doOpenGuideStepUI(step: IGuideStep) {
try {
console.log("[Tutorial] 打开新的引导UI", UIID.Guide);
oops.gui.open(UIID.Guide, {
step: step,
stepIndex: 0,
totalSteps: 1,
targetNode: targetNode,
callbacks: {
onStepComplete: this.onStepCompleted.bind(this),
onComplete: this.completeAllGuide.bind(this)
@@ -194,37 +202,7 @@ export class GuideConComp extends CCComp {
oops.gui.remove(UIID.Guide);
}
/** 查找目标节点 */
private findTargetNode(path: string): Node | null {
console.log(`[GuideCon] 开始查找目标节点: ${path}`);
const pathParts = path.split('/');
let currentNode: any = director.getScene();
for (const part of pathParts) {
if (!currentNode || !currentNode.getChildByName) {
console.error(`[GuideCon] 节点 ${part} 不存在或没有getChildByName方法`);
break;
}
const childNode = currentNode.getChildByName(part);
if (!childNode) {
console.error(`[GuideCon] 找不到子节点: ${part}`);
console.log(`[GuideCon] 当前节点 ${currentNode.name} 的子节点:`, currentNode.children.map(c => c.name));
break;
}
currentNode = childNode;
}
if (currentNode) {
console.log(`[GuideCon] 目标节点查找成功:`, currentNode.position, currentNode.getWorldPosition());
return currentNode as Node;
} else {
console.error(`[GuideCon] 目标节点查找失败: ${path}`);
return null;
}
}
/** 重置引导 */
resetGuide() {

View File

@@ -1,4 +1,4 @@
import { _decorator, BlockInputEvents, Button, Label, Node, UITransform, Vec3 } from "cc";
import { _decorator, BlockInputEvents, Button, director, Label, Node, UITransform, Vec3 } from "cc";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { IGuideStep, GuideStepType } from "../common/config/Guide";
@@ -33,6 +33,8 @@ export class GuideSetpComp extends CCComp {
private totalSteps: number = 0;
/** 目标节点 */
private _targetNode: Node | null = null;
/** 提示父节点 */
private _tipParent: Node | null = null;
private _showTip: boolean = false;
private _showHand: boolean = false;
private _callback: any = null;
@@ -104,7 +106,8 @@ export class GuideSetpComp extends CCComp {
}
/** 处理步骤信息 */
private handleStepInfo(data: any) {
const { step, stepIndex, totalSteps, targetNode,callbacks } = data;
const { step, stepIndex, totalSteps,callbacks } = data;
const targetNode=this.findTargetNode(step.targetPath);
this._noInput.enabled=step.noInput??false;
this._callback=callbacks;
if(targetNode){
@@ -116,10 +119,15 @@ export class GuideSetpComp extends CCComp {
this._showTip=true;
this._showHand=false;
}
if(step.tipParent){
this._tipParent=this.findTargetNode(step.tipParent);
}else{
this._tipParent=this._targetNode;
}
console.log("[GuideSetpComp] 处理步骤信息:", step);
// 显示步骤
this.showStep(step, stepIndex, totalSteps,targetNode);
this.showStep(step, stepIndex, totalSteps,targetNode,this._tipParent);
// 如果有手指位置,直接设置
// this.setHandPosition(this._targetNode);
@@ -137,18 +145,22 @@ export class GuideSetpComp extends CCComp {
}
/** 显示引导步骤 */
showStep(step: IGuideStep, stepIndex: number, totalSteps: number,targetNode: Node) {
showStep(step: IGuideStep, stepIndex: number, totalSteps: number,targetNode: Node,tipParent: Node) {
this.currentStep = step;
this.currentStepIndex = stepIndex;
this.totalSteps = totalSteps;
// 将handNode和tipNode从当前父节点移除
this.handNode.parent=this._targetNode;
this.tipNode.parent=this._targetNode;
// if(this._tipParent){
// this.tipNode.parent=this._tipParent;
// }else{
// this.tipNode.parent=this._targetNode;
// }
this.handNode.setPosition(this.currentStep?.handOffset?.x || 0, this.currentStep?.handOffset?.y || 0);
this.tipNode.setPosition(this.currentStep?.tipOffset?.x || 0, this.currentStep?.tipOffset?.y || 0);
// this.tipNode.setPosition(this.currentStep?.tipOffset?.x || 0, this.currentStep?.tipOffset?.y || 0);
// 设置setSiblingIndex最大
this.handNode.setSiblingIndex(this._targetNode.children.length - 1);
this.tipNode.setSiblingIndex(this._targetNode.children.length - 1);
// this.tipNode.setSiblingIndex(this._targetNode.children.length - 1);
// 更新UI内容
this.updateStepContent()
// 显示组件
@@ -185,7 +197,38 @@ export class GuideSetpComp extends CCComp {
}
}
/** 查找目标节点 */
private findTargetNode(path: string): Node | null {
console.log(`[GuideCon] 开始查找目标节点: ${path}`);
const pathParts = path.split('/');
let currentNode: any = director.getScene();
for (const part of pathParts) {
if (!currentNode || !currentNode.getChildByName) {
console.error(`[GuideCon] 节点 ${part} 不存在或没有getChildByName方法`);
break;
}
const childNode = currentNode.getChildByName(part);
if (!childNode) {
console.error(`[GuideCon] 找不到子节点: ${part}`);
console.log(`[GuideCon] 当前节点 ${currentNode.name} 的子节点:`, currentNode.children.map(c => c.name));
break;
}
currentNode = childNode;
console.log("[GuideCon] 当前节点:", currentNode)
}
if (currentNode) {
console.log(`[GuideCon] 目标节点查找成功:`, currentNode.position, currentNode.getWorldPosition());
return currentNode as Node;
} else {
console.error(`[GuideCon] 目标节点查找失败: ${path}`);
return null;
}
}
/** 跳过按钮点击事件 */
@@ -220,5 +263,6 @@ export class GuideSetpComp extends CCComp {
this.removeTouchListener();
this.tipNode.destroy();
this.handNode.destroy();
console.log("[GuideSetpComp] 监听onDestroy", this.node);
}
}

View File

@@ -8,6 +8,7 @@ import { HttpReturn } from 'db://oops-framework/libs/network/HttpRequest';
import { GameEvent } from '../common/config/GameEvent';
import { ecs } from 'db://oops-framework/libs/ecs/ECS';
import { CCComp } from 'db://oops-framework/module/common/CCComp';
import { finishCurrGuide, startGuide } from '../common/config/Guide';
const { ccclass, property } = _decorator;
@ccclass('HCardUICom')
@@ -75,6 +76,8 @@ export class HCardUICom extends CCComp {
oops.gui.open(UIID.HeroInfo,this.h_uuid)
break
case HeroConSet.SELECT:
finishCurrGuide(9)
startGuide(10)
if(oops.gui.has(UIID.HeroSelect)) {
this.check_in_slot()
smc.setFightHero(this.slot,this.h_uuid,true)

View File

@@ -6,35 +6,19 @@ import { smc } from '../common/SingletonModuleComp';
import { GameEvent } from '../common/config/GameEvent';
import { NumberFormatter } from '../common/config/BoxSet';
import { Items } from '../common/config/Items';
import { finishCurrGuide, GuideConfig } from '../common/config/Guide';
import { finishCurrGuide, GuideConfig, startGuide } from '../common/config/Guide';
const { ccclass, property } = _decorator;
@ccclass('HInfoComp')
export class HInfoComp extends Component {
h_uuid:number=0
private guides:any=[0,1]
private guideends:any=[3,5]
start() {
}
onAdded(args: any) {
// console.log("[HInfoComp]:onAdded",args)
this.endGuide()
this.startNextGuide()
console.log("[HInfoComp]:onAdded",this.node)
this.update_data(args)
}
startNextGuide(){
this.guides.forEach(guide_key=>{
if(smc.guides[guide_key]==0){
console.log("[HInfoComp]:推送启动引导:key",guide_key)
oops.message.dispatchEvent(GameEvent.GuideStart, guide_key)
return
}
})
}
endGuide(){
finishCurrGuide(3)
startGuide(5)
}
update(deltaTime: number) {
@@ -74,6 +58,12 @@ export class HInfoComp extends Component {
need_node.getChildByName("gold").getChildByName("has").getComponent(Label).string=NumberFormatter.formatNumber(smc.data.gold)
}
show_lock(lv:number){
if(lv==0){
console.log("[HInfoComp]:show_lock lv==0",this.node)
finishCurrGuide(3)
startGuide(4)
}
this.node.getChildByName("upBtn").active=lv > 0
this.node.getChildByName("upNeed").active=lv > 0
this.node.getChildByName("lock").active=lv == 0
@@ -105,8 +95,9 @@ export class HInfoComp extends Component {
return
}
oops.gui.toast("英雄< "+HeroInfo[this.h_uuid].name+" >解锁成功")
finishCurrGuide(4)
startGuide(5)
this.update_data(this.h_uuid)
oops.message.dispatchEvent(GameEvent.GuideEnd,GuideConfig[3].key)
oops.message.dispatchEvent(GameEvent.HeroUnlock, {uuid:this.h_uuid})
}
uplevel(){
@@ -127,6 +118,8 @@ export class HInfoComp extends Component {
return
}
this.update_data(this.h_uuid)
finishCurrGuide(5)
startGuide(6)
oops.gui.toast(`英雄< ${HeroInfo[this.h_uuid].name} >升级成功`)
oops.message.dispatchEvent(GameEvent.HeroLvUp, {uuid:this.h_uuid})
}
@@ -147,6 +140,8 @@ export class HInfoComp extends Component {
this.update_data(prevHero)
}
close(){
finishCurrGuide(6)
startGuide(7)
oops.gui.removeByNode(this.node)
}
reset() {

View File

@@ -4,6 +4,7 @@ import { oops } from 'db://oops-framework/core/Oops';
import { HCardUICom } from './HCardUICom';
import { HeroConSet } from '../common/config/BoxSet';
import { getHeroList } from '../common/config/heroSet';
import { finishCurrGuide, startGuide } from '../common/config/Guide';
const { ccclass, property } = _decorator;
@ccclass('HeroPageComp')
@@ -14,6 +15,11 @@ export class HeroPageComp extends Component {
update(deltaTime: number) {
}
onEnable(){
this.update_heros()
startGuide(3)
}
update_heros(){
let heros=getHeroList()

View File

@@ -5,6 +5,7 @@ import { GameEvent } from '../common/config/GameEvent';
import { oops } from 'db://oops-framework/core/Oops';
import { UIID } from '../common/config/GameUIConfig';
import { GameSet } from '../common/config/BoxSet';
import { finishCurrGuide } from '../common/config/Guide';
const { ccclass, property } = _decorator;
@ccclass('HeroReadyCom')
@@ -50,7 +51,10 @@ export class HeroReadyCom extends Component {
this.node.getChildByName("icon").active=false
}
select_hero(){
if(oops.gui.has(UIID.HeroSelect)) return
if(oops.gui.has(UIID.HeroSelect)) return
if(smc.fight_heros[this.slot]==0) {
finishCurrGuide(8)
}
oops.gui.open(UIID.HeroSelect,{slot:this.slot})
}
reset() {

View File

@@ -3,6 +3,7 @@ import { oops } from 'db://oops-framework/core/Oops';
import { HCardUICom } from './HCardUICom';
import { smc } from '../common/SingletonModuleComp';
import { HeroConSet } from '../common/config/BoxSet';
import { startGuide } from '../common/config/Guide';
const { ccclass, property } = _decorator;
@ccclass('HeroSelectCom')
@@ -14,6 +15,7 @@ export class HeroSelectCom extends Component {
onAdded(args: any) {
// console.log("[HeroSelectCom]:onAdded",args)
this.slot=args.slot
startGuide(9)
this.update_heros()
}
protected onDisable(): void {

View File

@@ -22,7 +22,6 @@ export class MissionHomeComp extends CCComp {
this.home_active()
}
onEnable(){
this.endGuide()
this.startNextGuide(); // 启动第一个引导
startGuide(1)
startGuide(2)
@@ -36,11 +35,10 @@ export class MissionHomeComp extends CCComp {
}
}
private endGuide(){
// finishCurrGuide(0)
}
start_mission() {
finishCurrGuide(1)
finishCurrGuide(10)
oops.message.dispatchEvent(GameEvent.MissionStart, {})
this.node.active=false;
}
@@ -86,13 +84,13 @@ export class MissionHomeComp extends CCComp {
btn_shop.getChildByName("act").active=true
break
case "heros":
page_heros.active=true
finishCurrGuide(2)
let page_heros_com=page_heros.getComponent(HeroPageComp)!
page_heros_com.update_heros()
page_heros.active=true
btn_heros.getChildByName("act").active=true
break
case "fight":
finishCurrGuide(7)
startGuide(8)
btn_fight.getChildByName("act").active=true
break
case "skill":

View File

@@ -5,6 +5,7 @@ import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/O
import { smc } from "../common/SingletonModuleComp";
import { GameEvent } from "../common/config/GameEvent";
import { ItemComp } from "./ItemComp";
import { startGuide } from "../common/config/Guide";
const { ccclass, property } = _decorator;
@@ -64,6 +65,7 @@ export class VictoryComp extends CCComp {
}
victory_end(){
this.clear_data()
// startGuide(2)
oops.message.dispatchEvent(GameEvent.MissionEnd)
oops.gui.removeByNode(this.node)
}

View File

@@ -19,5 +19,5 @@
"services": []
}
],
"__version__": "3.0.7"
"__version__": "3.0.9"
}