mirror of
				https://gitee.com/ruanwujing/green-pack-cocos
				synced 2025-10-30 19:06:24 +00:00 
			
		
		
		
	圆角矩形
This commit is contained in:
		
							
								
								
									
										971
									
								
								assets/resources/scenes/roundbox.scene
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										971
									
								
								assets/resources/scenes/roundbox.scene
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,971 @@ | |||||||
|  | [ | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.SceneAsset", | ||||||
|  |     "_name": "roundbox", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_native": "", | ||||||
|  |     "scene": { | ||||||
|  |       "__id__": 1 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Scene", | ||||||
|  |     "_name": "roundbox", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": null, | ||||||
|  |     "_children": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 2 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 5 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 7 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_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 | ||||||
|  |     }, | ||||||
|  |     "autoReleaseAssets": false, | ||||||
|  |     "_globals": { | ||||||
|  |       "__id__": 22 | ||||||
|  |     }, | ||||||
|  |     "_id": "64bd0402-59ce-4670-ae7d-24b450f09bb9" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Node", | ||||||
|  |     "_name": "Main Light", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": { | ||||||
|  |       "__id__": 1 | ||||||
|  |     }, | ||||||
|  |     "_children": [], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 3 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_lpos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_lrot": { | ||||||
|  |       "__type__": "cc.Quat", | ||||||
|  |       "x": -0.06397656665577071, | ||||||
|  |       "y": -0.44608233363525845, | ||||||
|  |       "z": -0.8239028751062036, | ||||||
|  |       "w": -0.3436591377065261 | ||||||
|  |     }, | ||||||
|  |     "_lscale": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 1, | ||||||
|  |       "y": 1, | ||||||
|  |       "z": 1 | ||||||
|  |     }, | ||||||
|  |     "_mobility": 0, | ||||||
|  |     "_layer": 1073741824, | ||||||
|  |     "_euler": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": -117.894, | ||||||
|  |       "y": -194.909, | ||||||
|  |       "z": 38.562 | ||||||
|  |     }, | ||||||
|  |     "_id": "c0y6F5f+pAvI805TdmxIjx" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.DirectionalLight", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 2 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_color": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 255, | ||||||
|  |       "g": 250, | ||||||
|  |       "b": 240, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_useColorTemperature": false, | ||||||
|  |     "_colorTemperature": 6550, | ||||||
|  |     "_staticSettings": { | ||||||
|  |       "__id__": 4 | ||||||
|  |     }, | ||||||
|  |     "_visibility": -325058561, | ||||||
|  |     "_illuminanceHDR": 65000, | ||||||
|  |     "_illuminance": 65000, | ||||||
|  |     "_illuminanceLDR": 1.6927083333333335, | ||||||
|  |     "_shadowEnabled": false, | ||||||
|  |     "_shadowPcf": 0, | ||||||
|  |     "_shadowBias": 0.00001, | ||||||
|  |     "_shadowNormalBias": 0, | ||||||
|  |     "_shadowSaturation": 1, | ||||||
|  |     "_shadowDistance": 50, | ||||||
|  |     "_shadowInvisibleOcclusionRange": 200, | ||||||
|  |     "_csmLevel": 4, | ||||||
|  |     "_csmLayerLambda": 0.75, | ||||||
|  |     "_csmOptimizationMode": 2, | ||||||
|  |     "_csmAdvancedOptions": false, | ||||||
|  |     "_csmLayersTransition": false, | ||||||
|  |     "_csmTransitionRange": 0.05, | ||||||
|  |     "_shadowFixedArea": false, | ||||||
|  |     "_shadowNear": 0.1, | ||||||
|  |     "_shadowFar": 10, | ||||||
|  |     "_shadowOrthoSize": 5, | ||||||
|  |     "_id": "597uMYCbhEtJQc0ffJlcgA" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.StaticLightSettings", | ||||||
|  |     "_baked": false, | ||||||
|  |     "_editorOnly": false, | ||||||
|  |     "_castShadow": false | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Node", | ||||||
|  |     "_name": "Main Camera", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": { | ||||||
|  |       "__id__": 1 | ||||||
|  |     }, | ||||||
|  |     "_children": [], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 6 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_lpos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": -10, | ||||||
|  |       "y": 10, | ||||||
|  |       "z": 10 | ||||||
|  |     }, | ||||||
|  |     "_lrot": { | ||||||
|  |       "__type__": "cc.Quat", | ||||||
|  |       "x": -0.27781593346944056, | ||||||
|  |       "y": -0.36497167621709875, | ||||||
|  |       "z": -0.11507512748638377, | ||||||
|  |       "w": 0.8811195706053617 | ||||||
|  |     }, | ||||||
|  |     "_lscale": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 1, | ||||||
|  |       "y": 1, | ||||||
|  |       "z": 1 | ||||||
|  |     }, | ||||||
|  |     "_mobility": 0, | ||||||
|  |     "_layer": 1073741824, | ||||||
|  |     "_euler": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": -35, | ||||||
|  |       "y": -45, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_id": "c9DMICJLFO5IeO07EPon7U" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Camera", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 5 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_projection": 1, | ||||||
|  |     "_priority": 0, | ||||||
|  |     "_fov": 45, | ||||||
|  |     "_fovAxis": 0, | ||||||
|  |     "_orthoHeight": 10, | ||||||
|  |     "_near": 1, | ||||||
|  |     "_far": 1000, | ||||||
|  |     "_color": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 51, | ||||||
|  |       "g": 51, | ||||||
|  |       "b": 51, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_depth": 1, | ||||||
|  |     "_stencil": 0, | ||||||
|  |     "_clearFlags": 14, | ||||||
|  |     "_rect": { | ||||||
|  |       "__type__": "cc.Rect", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "width": 1, | ||||||
|  |       "height": 1 | ||||||
|  |     }, | ||||||
|  |     "_aperture": 19, | ||||||
|  |     "_shutter": 7, | ||||||
|  |     "_iso": 0, | ||||||
|  |     "_screenScale": 1, | ||||||
|  |     "_visibility": 1822425087, | ||||||
|  |     "_targetTexture": null, | ||||||
|  |     "_postProcess": null, | ||||||
|  |     "_usePostProcess": false, | ||||||
|  |     "_cameraType": -1, | ||||||
|  |     "_trackingType": 0, | ||||||
|  |     "_id": "7dWQTpwS5LrIHnc1zAPUtf" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Node", | ||||||
|  |     "_name": "Canvas", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": { | ||||||
|  |       "__id__": 1 | ||||||
|  |     }, | ||||||
|  |     "_children": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 8 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 10 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 13 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 16 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 19 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 20 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 21 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_lpos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 640, | ||||||
|  |       "y": 360, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_lrot": { | ||||||
|  |       "__type__": "cc.Quat", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0, | ||||||
|  |       "w": 1 | ||||||
|  |     }, | ||||||
|  |     "_lscale": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 1, | ||||||
|  |       "y": 1, | ||||||
|  |       "z": 1 | ||||||
|  |     }, | ||||||
|  |     "_mobility": 0, | ||||||
|  |     "_layer": 33554432, | ||||||
|  |     "_euler": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_id": "5fT/Uf85lJJZpgroGvWOUP" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Node", | ||||||
|  |     "_name": "Camera", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": { | ||||||
|  |       "__id__": 7 | ||||||
|  |     }, | ||||||
|  |     "_children": [], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 9 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_lpos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 1000 | ||||||
|  |     }, | ||||||
|  |     "_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": "53wshulJZJKanZ/cnTuKZX" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Camera", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 8 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_projection": 0, | ||||||
|  |     "_priority": 1073741824, | ||||||
|  |     "_fov": 45, | ||||||
|  |     "_fovAxis": 0, | ||||||
|  |     "_orthoHeight": 459.1304347826087, | ||||||
|  |     "_near": 1, | ||||||
|  |     "_far": 2000, | ||||||
|  |     "_color": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 0, | ||||||
|  |       "g": 0, | ||||||
|  |       "b": 0, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_depth": 1, | ||||||
|  |     "_stencil": 0, | ||||||
|  |     "_clearFlags": 6, | ||||||
|  |     "_rect": { | ||||||
|  |       "__type__": "cc.Rect", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "width": 1, | ||||||
|  |       "height": 1 | ||||||
|  |     }, | ||||||
|  |     "_aperture": 19, | ||||||
|  |     "_shutter": 7, | ||||||
|  |     "_iso": 0, | ||||||
|  |     "_screenScale": 1, | ||||||
|  |     "_visibility": 41943040, | ||||||
|  |     "_targetTexture": null, | ||||||
|  |     "_postProcess": null, | ||||||
|  |     "_usePostProcess": false, | ||||||
|  |     "_cameraType": -1, | ||||||
|  |     "_trackingType": 0, | ||||||
|  |     "_id": "dd4qeuIZxNC6uH61NhldHf" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Node", | ||||||
|  |     "_name": "Sprite", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": { | ||||||
|  |       "__id__": 7 | ||||||
|  |     }, | ||||||
|  |     "_children": [], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 11 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 12 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_lpos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": -354.815, | ||||||
|  |       "y": -45.319, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_lrot": { | ||||||
|  |       "__type__": "cc.Quat", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0, | ||||||
|  |       "w": 1 | ||||||
|  |     }, | ||||||
|  |     "_lscale": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 1, | ||||||
|  |       "y": 1, | ||||||
|  |       "z": 1 | ||||||
|  |     }, | ||||||
|  |     "_mobility": 0, | ||||||
|  |     "_layer": 33554432, | ||||||
|  |     "_euler": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_id": "f9ysfwe4ZLTYYFY8wC/Jts" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.UITransform", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 10 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_contentSize": { | ||||||
|  |       "__type__": "cc.Size", | ||||||
|  |       "width": 140, | ||||||
|  |       "height": 140 | ||||||
|  |     }, | ||||||
|  |     "_anchorPoint": { | ||||||
|  |       "__type__": "cc.Vec2", | ||||||
|  |       "x": 0.5, | ||||||
|  |       "y": 0.5 | ||||||
|  |     }, | ||||||
|  |     "_id": "92G9/yRZNHiKLCK8lou2cg" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "99a69kLVh1Ep7wj+z4OSfo/", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 10 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_customMaterial": null, | ||||||
|  |     "_srcBlendFactor": 2, | ||||||
|  |     "_dstBlendFactor": 4, | ||||||
|  |     "_color": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 255, | ||||||
|  |       "g": 255, | ||||||
|  |       "b": 255, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_sizeMode": 1, | ||||||
|  |     "_atlas": null, | ||||||
|  |     "_segments": 10, | ||||||
|  |     "_radius": 20, | ||||||
|  |     "_spriteFrame": { | ||||||
|  |       "__uuid__": "890f043a-8cad-46e4-b5b1-584554c0cad1@f9941", | ||||||
|  |       "__expectedType__": "cc.SpriteFrame" | ||||||
|  |     }, | ||||||
|  |     "_leftTop": true, | ||||||
|  |     "_rightTop": true, | ||||||
|  |     "_leftBottom": true, | ||||||
|  |     "_rightBottom": true, | ||||||
|  |     "_id": "9fP6W2c0JG16NWr95ESiGu" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Node", | ||||||
|  |     "_name": "Sprite-001", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": { | ||||||
|  |       "__id__": 7 | ||||||
|  |     }, | ||||||
|  |     "_children": [], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 14 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 15 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_lpos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": -151.432, | ||||||
|  |       "y": -45.319, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_lrot": { | ||||||
|  |       "__type__": "cc.Quat", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0, | ||||||
|  |       "w": 1 | ||||||
|  |     }, | ||||||
|  |     "_lscale": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 1, | ||||||
|  |       "y": 1, | ||||||
|  |       "z": 1 | ||||||
|  |     }, | ||||||
|  |     "_mobility": 0, | ||||||
|  |     "_layer": 33554432, | ||||||
|  |     "_euler": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_id": "bd/vKa14NAi4pmNiXxAXVK" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.UITransform", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 13 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_contentSize": { | ||||||
|  |       "__type__": "cc.Size", | ||||||
|  |       "width": 140, | ||||||
|  |       "height": 140 | ||||||
|  |     }, | ||||||
|  |     "_anchorPoint": { | ||||||
|  |       "__type__": "cc.Vec2", | ||||||
|  |       "x": 0.5, | ||||||
|  |       "y": 0.5 | ||||||
|  |     }, | ||||||
|  |     "_id": "1a8Pb9CC9N7oGMkNREzGEl" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "99a69kLVh1Ep7wj+z4OSfo/", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 13 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_customMaterial": null, | ||||||
|  |     "_srcBlendFactor": 2, | ||||||
|  |     "_dstBlendFactor": 4, | ||||||
|  |     "_color": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 255, | ||||||
|  |       "g": 255, | ||||||
|  |       "b": 255, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_sizeMode": 1, | ||||||
|  |     "_atlas": null, | ||||||
|  |     "_segments": 10, | ||||||
|  |     "_radius": 41.8, | ||||||
|  |     "_spriteFrame": { | ||||||
|  |       "__uuid__": "890f043a-8cad-46e4-b5b1-584554c0cad1@f9941", | ||||||
|  |       "__expectedType__": "cc.SpriteFrame" | ||||||
|  |     }, | ||||||
|  |     "_leftTop": false, | ||||||
|  |     "_rightTop": true, | ||||||
|  |     "_leftBottom": true, | ||||||
|  |     "_rightBottom": true, | ||||||
|  |     "_id": "abjASJYeZLVLx0NfyXgj19" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Node", | ||||||
|  |     "_name": "Sprite-002", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "_parent": { | ||||||
|  |       "__id__": 7 | ||||||
|  |     }, | ||||||
|  |     "_children": [], | ||||||
|  |     "_active": true, | ||||||
|  |     "_components": [ | ||||||
|  |       { | ||||||
|  |         "__id__": 17 | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "__id__": 18 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "_prefab": null, | ||||||
|  |     "_lpos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 59.689, | ||||||
|  |       "y": -45.319, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_lrot": { | ||||||
|  |       "__type__": "cc.Quat", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0, | ||||||
|  |       "w": 1 | ||||||
|  |     }, | ||||||
|  |     "_lscale": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 1, | ||||||
|  |       "y": 1, | ||||||
|  |       "z": 1 | ||||||
|  |     }, | ||||||
|  |     "_mobility": 0, | ||||||
|  |     "_layer": 33554432, | ||||||
|  |     "_euler": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 0, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_id": "a0WXB1+odOopn63S//VwzS" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.UITransform", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 16 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_contentSize": { | ||||||
|  |       "__type__": "cc.Size", | ||||||
|  |       "width": 140, | ||||||
|  |       "height": 140 | ||||||
|  |     }, | ||||||
|  |     "_anchorPoint": { | ||||||
|  |       "__type__": "cc.Vec2", | ||||||
|  |       "x": 0.5, | ||||||
|  |       "y": 0.5 | ||||||
|  |     }, | ||||||
|  |     "_id": "401TOO479LmbUeYXthL5C2" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "99a69kLVh1Ep7wj+z4OSfo/", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 16 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_customMaterial": null, | ||||||
|  |     "_srcBlendFactor": 2, | ||||||
|  |     "_dstBlendFactor": 4, | ||||||
|  |     "_color": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 255, | ||||||
|  |       "g": 255, | ||||||
|  |       "b": 255, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_sizeMode": 1, | ||||||
|  |     "_atlas": null, | ||||||
|  |     "_segments": 10, | ||||||
|  |     "_radius": 70, | ||||||
|  |     "_spriteFrame": { | ||||||
|  |       "__uuid__": "890f043a-8cad-46e4-b5b1-584554c0cad1@f9941", | ||||||
|  |       "__expectedType__": "cc.SpriteFrame" | ||||||
|  |     }, | ||||||
|  |     "_leftTop": true, | ||||||
|  |     "_rightTop": true, | ||||||
|  |     "_leftBottom": true, | ||||||
|  |     "_rightBottom": true, | ||||||
|  |     "_id": "f2CeSLb09FPaKE976Tc3TG" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.UITransform", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 7 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_contentSize": { | ||||||
|  |       "__type__": "cc.Size", | ||||||
|  |       "width": 1280, | ||||||
|  |       "height": 720 | ||||||
|  |     }, | ||||||
|  |     "_anchorPoint": { | ||||||
|  |       "__type__": "cc.Vec2", | ||||||
|  |       "x": 0.5, | ||||||
|  |       "y": 0.5 | ||||||
|  |     }, | ||||||
|  |     "_id": "86CSOZGUpGVKnT8V8Ci8rW" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Canvas", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 7 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_cameraComponent": { | ||||||
|  |       "__id__": 9 | ||||||
|  |     }, | ||||||
|  |     "_alignCanvasWithScreen": true, | ||||||
|  |     "_id": "0a62p7bzdJsYDJdwyJzFyP" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.Widget", | ||||||
|  |     "_name": "", | ||||||
|  |     "_objFlags": 0, | ||||||
|  |     "__editorExtras__": {}, | ||||||
|  |     "node": { | ||||||
|  |       "__id__": 7 | ||||||
|  |     }, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "__prefab": null, | ||||||
|  |     "_alignFlags": 45, | ||||||
|  |     "_target": null, | ||||||
|  |     "_left": 0, | ||||||
|  |     "_right": 0, | ||||||
|  |     "_top": 0, | ||||||
|  |     "_bottom": 0, | ||||||
|  |     "_horizontalCenter": 0, | ||||||
|  |     "_verticalCenter": 0, | ||||||
|  |     "_isAbsLeft": true, | ||||||
|  |     "_isAbsRight": true, | ||||||
|  |     "_isAbsTop": true, | ||||||
|  |     "_isAbsBottom": true, | ||||||
|  |     "_isAbsHorizontalCenter": true, | ||||||
|  |     "_isAbsVerticalCenter": true, | ||||||
|  |     "_originalWidth": 0, | ||||||
|  |     "_originalHeight": 0, | ||||||
|  |     "_alignMode": 2, | ||||||
|  |     "_lockFlags": 0, | ||||||
|  |     "_id": "091TrFLkFO1aPnT2TxMiSY" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.SceneGlobals", | ||||||
|  |     "ambient": { | ||||||
|  |       "__id__": 23 | ||||||
|  |     }, | ||||||
|  |     "shadows": { | ||||||
|  |       "__id__": 24 | ||||||
|  |     }, | ||||||
|  |     "_skybox": { | ||||||
|  |       "__id__": 25 | ||||||
|  |     }, | ||||||
|  |     "fog": { | ||||||
|  |       "__id__": 26 | ||||||
|  |     }, | ||||||
|  |     "octree": { | ||||||
|  |       "__id__": 27 | ||||||
|  |     }, | ||||||
|  |     "skin": { | ||||||
|  |       "__id__": 28 | ||||||
|  |     }, | ||||||
|  |     "lightProbeInfo": { | ||||||
|  |       "__id__": 29 | ||||||
|  |     }, | ||||||
|  |     "postSettings": { | ||||||
|  |       "__id__": 30 | ||||||
|  |     }, | ||||||
|  |     "bakedWithStationaryMainLight": false, | ||||||
|  |     "bakedWithHighpLightmap": false | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.AmbientInfo", | ||||||
|  |     "_skyColorHDR": { | ||||||
|  |       "__type__": "cc.Vec4", | ||||||
|  |       "x": 0.2, | ||||||
|  |       "y": 0.5, | ||||||
|  |       "z": 0.8, | ||||||
|  |       "w": 0.520833125 | ||||||
|  |     }, | ||||||
|  |     "_skyColor": { | ||||||
|  |       "__type__": "cc.Vec4", | ||||||
|  |       "x": 0.2, | ||||||
|  |       "y": 0.5, | ||||||
|  |       "z": 0.8, | ||||||
|  |       "w": 0.520833125 | ||||||
|  |     }, | ||||||
|  |     "_skyIllumHDR": 20000, | ||||||
|  |     "_skyIllum": 20000, | ||||||
|  |     "_groundAlbedoHDR": { | ||||||
|  |       "__type__": "cc.Vec4", | ||||||
|  |       "x": 0.2, | ||||||
|  |       "y": 0.2, | ||||||
|  |       "z": 0.2, | ||||||
|  |       "w": 1 | ||||||
|  |     }, | ||||||
|  |     "_groundAlbedo": { | ||||||
|  |       "__type__": "cc.Vec4", | ||||||
|  |       "x": 0.2, | ||||||
|  |       "y": 0.2, | ||||||
|  |       "z": 0.2, | ||||||
|  |       "w": 1 | ||||||
|  |     }, | ||||||
|  |     "_skyColorLDR": { | ||||||
|  |       "__type__": "cc.Vec4", | ||||||
|  |       "x": 0.452588, | ||||||
|  |       "y": 0.607642, | ||||||
|  |       "z": 0.755699, | ||||||
|  |       "w": 0 | ||||||
|  |     }, | ||||||
|  |     "_skyIllumLDR": 0.8, | ||||||
|  |     "_groundAlbedoLDR": { | ||||||
|  |       "__type__": "cc.Vec4", | ||||||
|  |       "x": 0.618555, | ||||||
|  |       "y": 0.577848, | ||||||
|  |       "z": 0.544564, | ||||||
|  |       "w": 0 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.ShadowsInfo", | ||||||
|  |     "_enabled": false, | ||||||
|  |     "_type": 0, | ||||||
|  |     "_normal": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 0, | ||||||
|  |       "y": 1, | ||||||
|  |       "z": 0 | ||||||
|  |     }, | ||||||
|  |     "_distance": 0, | ||||||
|  |     "_shadowColor": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 76, | ||||||
|  |       "g": 76, | ||||||
|  |       "b": 76, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_maxReceived": 4, | ||||||
|  |     "_size": { | ||||||
|  |       "__type__": "cc.Vec2", | ||||||
|  |       "x": 1024, | ||||||
|  |       "y": 1024 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.SkyboxInfo", | ||||||
|  |     "_envLightingType": 0, | ||||||
|  |     "_envmapHDR": { | ||||||
|  |       "__uuid__": "d032ac98-05e1-4090-88bb-eb640dcb5fc1@b47c0", | ||||||
|  |       "__expectedType__": "cc.TextureCube" | ||||||
|  |     }, | ||||||
|  |     "_envmap": { | ||||||
|  |       "__uuid__": "d032ac98-05e1-4090-88bb-eb640dcb5fc1@b47c0", | ||||||
|  |       "__expectedType__": "cc.TextureCube" | ||||||
|  |     }, | ||||||
|  |     "_envmapLDR": { | ||||||
|  |       "__uuid__": "6f01cf7f-81bf-4a7e-bd5d-0afc19696480@b47c0", | ||||||
|  |       "__expectedType__": "cc.TextureCube" | ||||||
|  |     }, | ||||||
|  |     "_diffuseMapHDR": null, | ||||||
|  |     "_diffuseMapLDR": null, | ||||||
|  |     "_enabled": true, | ||||||
|  |     "_useHDR": true, | ||||||
|  |     "_editableMaterial": null, | ||||||
|  |     "_reflectionHDR": null, | ||||||
|  |     "_reflectionLDR": null, | ||||||
|  |     "_rotationAngle": 0 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.FogInfo", | ||||||
|  |     "_type": 0, | ||||||
|  |     "_fogColor": { | ||||||
|  |       "__type__": "cc.Color", | ||||||
|  |       "r": 200, | ||||||
|  |       "g": 200, | ||||||
|  |       "b": 200, | ||||||
|  |       "a": 255 | ||||||
|  |     }, | ||||||
|  |     "_enabled": false, | ||||||
|  |     "_fogDensity": 0.3, | ||||||
|  |     "_fogStart": 0.5, | ||||||
|  |     "_fogEnd": 300, | ||||||
|  |     "_fogAtten": 5, | ||||||
|  |     "_fogTop": 1.5, | ||||||
|  |     "_fogRange": 1.2, | ||||||
|  |     "_accurate": false | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.OctreeInfo", | ||||||
|  |     "_enabled": false, | ||||||
|  |     "_minPos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": -1024, | ||||||
|  |       "y": -1024, | ||||||
|  |       "z": -1024 | ||||||
|  |     }, | ||||||
|  |     "_maxPos": { | ||||||
|  |       "__type__": "cc.Vec3", | ||||||
|  |       "x": 1024, | ||||||
|  |       "y": 1024, | ||||||
|  |       "z": 1024 | ||||||
|  |     }, | ||||||
|  |     "_depth": 8 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.SkinInfo", | ||||||
|  |     "_enabled": true, | ||||||
|  |     "_blurRadius": 0.01, | ||||||
|  |     "_sssIntensity": 3 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.LightProbeInfo", | ||||||
|  |     "_giScale": 1, | ||||||
|  |     "_giSamples": 1024, | ||||||
|  |     "_bounces": 2, | ||||||
|  |     "_reduceRinging": 0, | ||||||
|  |     "_showProbe": true, | ||||||
|  |     "_showWireframe": true, | ||||||
|  |     "_showConvex": false, | ||||||
|  |     "_data": null, | ||||||
|  |     "_lightProbeSphereVolume": 1 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "__type__": "cc.PostSettingsInfo", | ||||||
|  |     "_toneMappingType": 0 | ||||||
|  |   } | ||||||
|  | ] | ||||||
							
								
								
									
										11
									
								
								assets/resources/scenes/roundbox.scene.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								assets/resources/scenes/roundbox.scene.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | { | ||||||
|  |   "ver": "1.1.49", | ||||||
|  |   "importer": "scene", | ||||||
|  |   "imported": true, | ||||||
|  |   "uuid": "64bd0402-59ce-4670-ae7d-24b450f09bb9", | ||||||
|  |   "files": [ | ||||||
|  |     ".json" | ||||||
|  |   ], | ||||||
|  |   "subMetas": {}, | ||||||
|  |   "userData": {} | ||||||
|  | } | ||||||
							
								
								
									
										248
									
								
								assets/scripts/components/GPRoundBoxAssembler.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										248
									
								
								assets/scripts/components/GPRoundBoxAssembler.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,248 @@ | |||||||
|  | import { IAssembler, IRenderData, RenderData, dynamicAtlasManager } from "cc"; | ||||||
|  | import { GPRoundBoxSprite } from "./GPRoundBoxSprite"; | ||||||
|  |  | ||||||
|  | export const GPRoundBoxAssembler: IAssembler = { | ||||||
|  |  | ||||||
|  |     // 根据圆角segments参数,构造网格的顶点索引列表 | ||||||
|  |     GetIndexBuffer(sprite:GPRoundBoxSprite) { | ||||||
|  |         let indexBuffer = [ | ||||||
|  |             0, 1, 2, 2, 3, 0, | ||||||
|  |             4, 5, 6, 6, 7, 4, | ||||||
|  |             8, 9, 10, 10, 11, 8 | ||||||
|  |         ] | ||||||
|  |  | ||||||
|  |         // 为四个角的扇形push进索引值 | ||||||
|  |         let index = 12 | ||||||
|  |         let fanIndexBuild = function(center, start, end) { | ||||||
|  |             let last = start; | ||||||
|  |             for (let i = 0; i < sprite.segments - 1; i++) { | ||||||
|  |                 // 左上角 p2为扇形圆心,p1/p5为两个边界 | ||||||
|  |                 let cur = index; | ||||||
|  |                 index++; | ||||||
|  |                 indexBuffer.push(center, last, cur); | ||||||
|  |                 last = cur; | ||||||
|  |             } | ||||||
|  |             indexBuffer.push(center, last, end) | ||||||
|  |         } | ||||||
|  |         if (sprite.leftBottom) | ||||||
|  |             fanIndexBuild(3, 4, 0); | ||||||
|  |         if (sprite.leftTop) | ||||||
|  |             fanIndexBuild(2, 1, 5); | ||||||
|  |         if (sprite.rightTop) | ||||||
|  |             fanIndexBuild(9, 6, 10); | ||||||
|  |         if (sprite.rightBottom) | ||||||
|  |             fanIndexBuild(8, 11, 7); | ||||||
|  |         return indexBuffer | ||||||
|  |     }, | ||||||
|  |     createData (sprite: GPRoundBoxSprite) { | ||||||
|  |         const renderData = sprite.requestRenderData(); | ||||||
|  |         let corner = 0; | ||||||
|  |         corner += sprite.leftBottom ? 1: 0; | ||||||
|  |         corner += sprite.leftTop ? 1: 0; | ||||||
|  |         corner += sprite.rightTop ? 1: 0; | ||||||
|  |         corner += sprite.rightBottom ? 1: 0; | ||||||
|  |  | ||||||
|  |         let vNum = 12 + (sprite.segments - 1) * corner; | ||||||
|  |         renderData.dataLength = vNum; | ||||||
|  |         renderData.resize(vNum, 18 + sprite.segments * 3 * corner); | ||||||
|  |  | ||||||
|  |         let indexBuffer = GPRoundBoxAssembler.GetIndexBuffer(sprite); | ||||||
|  |         renderData.chunk.setIndexBuffer(indexBuffer); | ||||||
|  |         return renderData; | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     // 照抄simple的 | ||||||
|  |     updateRenderData (sprite: GPRoundBoxSprite) { | ||||||
|  |         const frame = sprite.spriteFrame; | ||||||
|  |  | ||||||
|  |         dynamicAtlasManager.packToDynamicAtlas(sprite, frame); | ||||||
|  |         this.updateUVs(sprite);// dirty need | ||||||
|  |         //this.updateColor(sprite);// dirty need | ||||||
|  |  | ||||||
|  |         const renderData = sprite.renderData; | ||||||
|  |         if (renderData && frame) { | ||||||
|  |             if (renderData.vertDirty) { | ||||||
|  |                 this.updateVertexData(sprite); | ||||||
|  |             } | ||||||
|  |             renderData.updateRenderData(sprite, frame); | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     // 局部坐标转世界坐标 照抄的,不用改 | ||||||
|  |     updateWorldVerts (sprite: GPRoundBoxSprite, chunk: { vb: any; }) { | ||||||
|  |         const renderData = sprite.renderData!; | ||||||
|  |         const vData = chunk.vb; | ||||||
|  |  | ||||||
|  |         const dataList: IRenderData[] = renderData.data; | ||||||
|  |         const node = sprite.node; | ||||||
|  |         const m = node.worldMatrix; | ||||||
|  |  | ||||||
|  |         const stride = renderData.floatStride; | ||||||
|  |         let offset = 0; | ||||||
|  |         const length = dataList.length; | ||||||
|  |         for (let i = 0; i < length; i++) { | ||||||
|  |             const curData = dataList[i]; | ||||||
|  |             const x = curData.x; | ||||||
|  |             const y = curData.y; | ||||||
|  |             let rhw = m.m03 * x + m.m07 * y + m.m15; | ||||||
|  |             rhw = rhw ? 1 / rhw : 1; | ||||||
|  |  | ||||||
|  |             offset = i * stride; | ||||||
|  |             vData[offset + 0] = (m.m00 * x + m.m04 * y + m.m12) * rhw; | ||||||
|  |             vData[offset + 1] = (m.m01 * x + m.m05 * y + m.m13) * rhw; | ||||||
|  |             vData[offset + 2] = (m.m02 * x + m.m06 * y + m.m14) * rhw; | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     // 每帧调用的,把数据和到一整个meshbuffer里 | ||||||
|  |     fillBuffers (sprite: GPRoundBoxSprite) { | ||||||
|  |         if (sprite === null) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         const renderData = sprite.renderData!; | ||||||
|  |         const chunk = renderData.chunk; | ||||||
|  |         if (sprite.node.hasChangedFlags || renderData.vertDirty) { | ||||||
|  |             // const vb = chunk.vertexAccessor.getVertexBuffer(chunk.bufferId); | ||||||
|  |             this.updateWorldVerts(sprite, chunk); | ||||||
|  |             renderData.vertDirty = false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // quick version | ||||||
|  |         const bid = chunk.bufferId; | ||||||
|  |         const vidOrigin = chunk.vertexOffset; | ||||||
|  |         const meshBuffer = chunk.meshBuffer; | ||||||
|  |         const ib = chunk.meshBuffer.iData; | ||||||
|  |         let indexOffset = meshBuffer.indexOffset; | ||||||
|  |  | ||||||
|  |         const vid = vidOrigin; | ||||||
|  |         // 沿着当前这个位置往后将我们这个对象的index放进去 | ||||||
|  |         let indexBuffer = GPRoundBoxAssembler.GetIndexBuffer(sprite); | ||||||
|  |         for (let i = 0; i < renderData.indexCount; i++) { | ||||||
|  |             ib[indexOffset++] = vid + indexBuffer[i]; | ||||||
|  |         } | ||||||
|  |         meshBuffer.indexOffset += renderData.indexCount; | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     // 计算每个顶点相对于sprite坐标的位置 | ||||||
|  |     updateVertexData (sprite: GPRoundBoxSprite) { | ||||||
|  |         const renderData: RenderData | null = sprite.renderData; | ||||||
|  |         if (!renderData) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         const uiTrans = sprite.node._uiProps.uiTransformComp!; | ||||||
|  |         const dataList: IRenderData[] = renderData.data; | ||||||
|  |         const cw = uiTrans.width; | ||||||
|  |         const ch = uiTrans.height; | ||||||
|  |         const appX = uiTrans.anchorX * cw; | ||||||
|  |         const appY = uiTrans.anchorY * ch; | ||||||
|  |  | ||||||
|  |         const left = 0 - appX; | ||||||
|  |         const right = cw - appX; | ||||||
|  |         const top = ch - appY; | ||||||
|  |         const bottom = 0 - appY; | ||||||
|  |  | ||||||
|  |         const left_r = left + sprite.radius; | ||||||
|  |         const bottom_r = bottom + sprite.radius; | ||||||
|  |         const top_r = top - sprite.radius; | ||||||
|  |         const right_r = right - sprite.radius; | ||||||
|  |  | ||||||
|  |         // 三个矩形的顶点 | ||||||
|  |         dataList[0].x = left; | ||||||
|  |         dataList[0].y = sprite.leftBottom ? bottom_r: bottom; | ||||||
|  |         dataList[1].x = left; | ||||||
|  |         dataList[1].y = sprite.leftTop ? top_r: top; | ||||||
|  |         dataList[2].x = left_r; | ||||||
|  |         dataList[2].y = sprite.leftTop ? top_r: top; | ||||||
|  |         dataList[3].x = left_r; | ||||||
|  |         dataList[3].y = sprite.leftBottom ? bottom_r: bottom; | ||||||
|  |         dataList[4].x = left_r; | ||||||
|  |         dataList[4].y = bottom; | ||||||
|  |         dataList[5].x = left_r; | ||||||
|  |         dataList[5].y = top; | ||||||
|  |         dataList[6].x = right_r; | ||||||
|  |         dataList[6].y = top; | ||||||
|  |         dataList[7].x = right_r; | ||||||
|  |         dataList[7].y = bottom; | ||||||
|  |         dataList[8].x = right_r; | ||||||
|  |         dataList[8].y = sprite.rightBottom ? bottom_r: bottom; | ||||||
|  |         dataList[9].x = right_r; | ||||||
|  |         dataList[9].y = sprite.rightTop ? top_r: top; | ||||||
|  |         dataList[10].x = right; | ||||||
|  |         dataList[10].y = sprite.rightTop ? top_r: top; | ||||||
|  |         dataList[11].x = right; | ||||||
|  |         dataList[11].y = sprite.rightBottom ? bottom_r: bottom; | ||||||
|  |          | ||||||
|  |         // 扇形圆角的顶点 | ||||||
|  |         let index = 12; | ||||||
|  |         let fanPosBuild = function(center, startAngle) { | ||||||
|  |             for (let i = 1; i < sprite.segments; i++) { | ||||||
|  |                 // 我这里顶点都是按顺时针分配的,所以角度要从开始角度减 | ||||||
|  |                 // 每个扇形都是90度 | ||||||
|  |                 let angle = startAngle * Math.PI / 180 - i / sprite.segments * 0.5 * Math.PI; | ||||||
|  |                 dataList[index].x = center.x + Math.cos(angle) * sprite.radius; | ||||||
|  |                 dataList[index].y = center.y + Math.sin(angle) * sprite.radius; | ||||||
|  |                 index++; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (sprite.leftBottom) | ||||||
|  |             fanPosBuild(dataList[3], 270); | ||||||
|  |         if (sprite.leftTop) | ||||||
|  |             fanPosBuild(dataList[2], 180); | ||||||
|  |         if (sprite.rightTop) | ||||||
|  |             fanPosBuild(dataList[9], 90); | ||||||
|  |         if (sprite.rightBottom) | ||||||
|  |             fanPosBuild(dataList[8], 0); | ||||||
|  |  | ||||||
|  |         renderData.vertDirty = true; | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     // 更新计算uv | ||||||
|  |     updateUVs (sprite: GPRoundBoxSprite) { | ||||||
|  |         if (!sprite.spriteFrame) return; | ||||||
|  |         const renderData = sprite.renderData!; | ||||||
|  |         const vData = renderData.chunk.vb; | ||||||
|  |         const uv = sprite.spriteFrame.uv; | ||||||
|  |  | ||||||
|  |         // 这里我打印了一下uv的值,第一个看上去是左上角,但其实,opengl端的纹理存在上下颠倒问题,所以这里其实还是左下角 | ||||||
|  |         // 左下,右下,左上,右上 | ||||||
|  |         const uv_l = uv[0]; | ||||||
|  |         const uv_b = uv[1]; | ||||||
|  |         const uv_r = uv[2]; | ||||||
|  |         const uv_t = uv[5]; | ||||||
|  |         const uv_w = Math.abs(uv_r - uv_l); | ||||||
|  |         const uv_h = uv_t - uv_b; | ||||||
|  |  | ||||||
|  |         const uiTrans = sprite.node._uiProps.uiTransformComp!; | ||||||
|  |         const dataList: IRenderData[] = renderData.data; | ||||||
|  |         const cw = uiTrans.width; | ||||||
|  |         const ch = uiTrans.height; | ||||||
|  |         const appX = uiTrans.anchorX * cw; | ||||||
|  |         const appY = uiTrans.anchorY * ch; | ||||||
|  |  | ||||||
|  |         // 用相对坐标,计算uv | ||||||
|  |         for (let i = 0; i < renderData.dataLength; i++) { | ||||||
|  |             vData[i * renderData.floatStride + 3] = uv_l + (dataList[i].x + appX) / cw * uv_w; | ||||||
|  |             vData[i * renderData.floatStride + 4] = uv_b + (dataList[i].y + appY) / ch * uv_h; | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     // 照抄,不用改 | ||||||
|  |     updateColor (sprite: GPRoundBoxSprite) { | ||||||
|  |         const renderData = sprite.renderData!; | ||||||
|  |         const vData = renderData.chunk.vb; | ||||||
|  |         let colorOffset = 5; | ||||||
|  |         const color = sprite.color; | ||||||
|  |         const colorR = color.r / 255; | ||||||
|  |         const colorG = color.g / 255; | ||||||
|  |         const colorB = color.b / 255; | ||||||
|  |         const colorA = color.a / 255; | ||||||
|  |         for (let i = 0; i < renderData.dataLength; i++, colorOffset += renderData.floatStride) { | ||||||
|  |             vData[colorOffset] = colorR; | ||||||
|  |             vData[colorOffset + 1] = colorG; | ||||||
|  |             vData[colorOffset + 2] = colorB; | ||||||
|  |             vData[colorOffset + 3] = colorA; | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  | }; | ||||||
							
								
								
									
										9
									
								
								assets/scripts/components/GPRoundBoxAssembler.ts.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								assets/scripts/components/GPRoundBoxAssembler.ts.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   "ver": "4.0.23", | ||||||
|  |   "importer": "typescript", | ||||||
|  |   "imported": true, | ||||||
|  |   "uuid": "34dcec5f-d278-44e1-b921-ad33d4776917", | ||||||
|  |   "files": [], | ||||||
|  |   "subMetas": {}, | ||||||
|  |   "userData": {} | ||||||
|  | } | ||||||
							
								
								
									
										336
									
								
								assets/scripts/components/GPRoundBoxSprite.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										336
									
								
								assets/scripts/components/GPRoundBoxSprite.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,336 @@ | |||||||
|  | import { _decorator, ccenum, CCFloat, CCInteger, cclegacy, Component, InstanceMaterialType, Material, Node, NodeEventType, RenderTexture, serializeTag, Sprite, SpriteAtlas, SpriteFrame, UIRenderer, Vec2} from 'cc'; | ||||||
|  | import { BUILD, EDITOR } from 'cc/env'; | ||||||
|  | import { GPRoundBoxAssembler } from './GPRoundBoxAssembler'; | ||||||
|  |  | ||||||
|  | const { ccclass, property,type} = _decorator; | ||||||
|  | enum EventType { | ||||||
|  |     SPRITE_FRAME_CHANGED = 'spriteframe-changed', | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ccclass('GPRoundBoxSprite') | ||||||
|  | export class GPRoundBoxSprite extends UIRenderer { | ||||||
|  |     // 尺寸模式,可以看枚举原本定义的地方有注释说明 | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     protected _sizeMode = Sprite.SizeMode.TRIMMED; | ||||||
|  |     @type(Sprite.SizeMode) | ||||||
|  |     get sizeMode () { | ||||||
|  |         return this._sizeMode; | ||||||
|  |     } | ||||||
|  |     set sizeMode (value) { | ||||||
|  |         if (this._sizeMode === value) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         this._sizeMode = value; | ||||||
|  |         if (value !== Sprite.SizeMode.CUSTOM) { | ||||||
|  |             this._applySpriteSize(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     // 图集 | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     protected _atlas: SpriteAtlas | null = null; | ||||||
|  |     @type(SpriteAtlas) | ||||||
|  |     get spriteAtlas () { | ||||||
|  |         return this._atlas; | ||||||
|  |     } | ||||||
|  |     set spriteAtlas (value) { | ||||||
|  |         if (this._atlas === value) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         this._atlas = value; | ||||||
|  |     } | ||||||
|  |     // 圆角用三角形模拟扇形的线段数量,越大,则越圆滑 | ||||||
|  |     @property({type:CCInteger, serializable:true}) | ||||||
|  |     _segments:number = 10 | ||||||
|  |     @property({type:CCInteger, serializable:true, min:1}) | ||||||
|  |     public get segments() { | ||||||
|  |         return this._segments; | ||||||
|  |     } | ||||||
|  |     public set segments(segments) { | ||||||
|  |         this._segments = segments; | ||||||
|  |         this._renderData = null; | ||||||
|  |         this._flushAssembler(); | ||||||
|  |     } | ||||||
|  |     // 圆角半径 | ||||||
|  |     @property({type:CCFloat, serializable:true}) | ||||||
|  |     _radius:number = 20 | ||||||
|  |     @property({type:CCFloat, serializable:true, min:0}) | ||||||
|  |     public get radius() { | ||||||
|  |         return this._radius | ||||||
|  |     } | ||||||
|  |     public set radius(radius) { | ||||||
|  |         this._radius = radius; | ||||||
|  |         this._updateUVs(); | ||||||
|  |         this.markForUpdateRenderData(true) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     protected _spriteFrame: SpriteFrame | null = null; | ||||||
|  |     @type(SpriteFrame) | ||||||
|  |     get spriteFrame () { | ||||||
|  |         return this._spriteFrame; | ||||||
|  |     } | ||||||
|  |     set spriteFrame (value) { | ||||||
|  |         if (this._spriteFrame === value) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         const lastSprite = this._spriteFrame; | ||||||
|  |         this._spriteFrame = value; | ||||||
|  |         this.markForUpdateRenderData(); | ||||||
|  |         this._applySpriteFrame(lastSprite); | ||||||
|  |         if (EDITOR) { | ||||||
|  |             this.node.emit(EventType.SPRITE_FRAME_CHANGED, this); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     protected _leftTop:boolean = true; | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     get leftTop () { | ||||||
|  |         return this._leftTop; | ||||||
|  |     } | ||||||
|  |     set leftTop (value:boolean) { | ||||||
|  |         this._leftTop = value; | ||||||
|  |         this.resetAssembler(); | ||||||
|  |     } | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     protected _rightTop:boolean = true; | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     get rightTop () { | ||||||
|  |         return this._rightTop; | ||||||
|  |     } | ||||||
|  |     set rightTop (value:boolean) { | ||||||
|  |         this._rightTop = value; | ||||||
|  |         this.resetAssembler(); | ||||||
|  |     } | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     protected _leftBottom:boolean = true; | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     get leftBottom () { | ||||||
|  |         return this._leftBottom; | ||||||
|  |     } | ||||||
|  |     set leftBottom (value:boolean) { | ||||||
|  |         this._leftBottom = value; | ||||||
|  |         this.resetAssembler(); | ||||||
|  |     } | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     protected _rightBottom:boolean = true; | ||||||
|  |     @property({serializable:true}) | ||||||
|  |     get rightBottom () { | ||||||
|  |         return this._rightBottom; | ||||||
|  |     } | ||||||
|  |     set rightBottom (value:boolean) { | ||||||
|  |         this._rightBottom = value; | ||||||
|  |         this.resetAssembler(); | ||||||
|  |     } | ||||||
|  |     onLoad(): void { | ||||||
|  |         this._flushAssembler(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public __preload () { | ||||||
|  |         this.changeMaterialForDefine(); | ||||||
|  |         super.__preload(); | ||||||
|  |  | ||||||
|  |         if (EDITOR) { | ||||||
|  |             this._resized(); | ||||||
|  |             this.node.on(NodeEventType.SIZE_CHANGED, this._resized, this); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public onEnable () { | ||||||
|  |         super.onEnable(); | ||||||
|  |  | ||||||
|  |         // Force update uv, material define, active material, etc | ||||||
|  |         this._activateMaterial(); | ||||||
|  |         const spriteFrame = this._spriteFrame; | ||||||
|  |         if (spriteFrame) { | ||||||
|  |             this._updateUVs(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public onDestroy () { | ||||||
|  |         if (EDITOR) { | ||||||
|  |             this.node.off(NodeEventType.SIZE_CHANGED, this._resized, this); | ||||||
|  |         } | ||||||
|  |         super.onDestroy(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @en | ||||||
|  |      * Quickly switch to other sprite frame in the sprite atlas. | ||||||
|  |      * If there is no atlas, the switch fails. | ||||||
|  |      * | ||||||
|  |      * @zh | ||||||
|  |      * 选取使用精灵图集中的其他精灵。 | ||||||
|  |      * @param name @en Name of the spriteFrame to switch. @zh 要切换的 spriteFrame 名字。 | ||||||
|  |      */ | ||||||
|  |     public changeSpriteFrameFromAtlas (name: string) { | ||||||
|  |         if (!this._atlas) { | ||||||
|  |             console.warn('SpriteAtlas is null.'); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         const sprite = this._atlas.getSpriteFrame(name); | ||||||
|  |         this.spriteFrame = sprite; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated Since v3.7.0, this is an engine private interface that will be removed in the future. | ||||||
|  |      */ | ||||||
|  |     public changeMaterialForDefine () { | ||||||
|  |         let texture; | ||||||
|  |         const lastInstanceMaterialType = this._instanceMaterialType; | ||||||
|  |         if (this._spriteFrame) { | ||||||
|  |             texture = this._spriteFrame.texture; | ||||||
|  |         } | ||||||
|  |         let value = false; | ||||||
|  |         if (texture instanceof cclegacy.TextureBase) { | ||||||
|  |             const format = texture.getPixelFormat(); | ||||||
|  |             value = (format === cclegacy.TextureBase.PixelFormat.RGBA_ETC1 || format === cclegacy.TextureBase.PixelFormat.RGB_A_PVRTC_4BPPV1 || format === cclegacy.TextureBase.PixelFormat.RGB_A_PVRTC_2BPPV1); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (value) { | ||||||
|  |             this._instanceMaterialType = InstanceMaterialType.USE_ALPHA_SEPARATED; | ||||||
|  |         } else { | ||||||
|  |             this._instanceMaterialType = InstanceMaterialType.ADD_COLOR_AND_TEXTURE; | ||||||
|  |         } | ||||||
|  |         if (lastInstanceMaterialType !== this._instanceMaterialType) { | ||||||
|  |             // this.updateMaterial(); | ||||||
|  |             // d.ts里没有注上这个函数,直接调用会表红。 | ||||||
|  |             this["updateMaterial"](); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected _updateBuiltinMaterial () { | ||||||
|  |         let mat = super._updateBuiltinMaterial(); | ||||||
|  |         if (this.spriteFrame && this.spriteFrame.texture instanceof RenderTexture) { | ||||||
|  |             const defines = { SAMPLE_FROM_RT: true, ...mat.passes[0].defines }; | ||||||
|  |             const renderMat = new Material(); | ||||||
|  |             renderMat.initialize({ | ||||||
|  |                 effectAsset: mat.effectAsset, | ||||||
|  |                 defines, | ||||||
|  |             }); | ||||||
|  |             mat = renderMat; | ||||||
|  |         } | ||||||
|  |         return mat; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected _render (render) { | ||||||
|  |         render.commitComp(this, this.renderData, this._spriteFrame, this._assembler, null); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected _canRender () { | ||||||
|  |         if (!super._canRender()) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         const spriteFrame = this._spriteFrame; | ||||||
|  |         if (!spriteFrame || !spriteFrame.texture) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected resetAssembler() { | ||||||
|  |         this._assembler = null; | ||||||
|  |         this._flushAssembler(); | ||||||
|  |     } | ||||||
|  |     protected _flushAssembler () { | ||||||
|  |         const assembler = GPRoundBoxAssembler; | ||||||
|  |  | ||||||
|  |         if (this._assembler !== assembler) { | ||||||
|  |             this.destroyRenderData(); | ||||||
|  |             this._assembler = assembler; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         if (!this._renderData) { | ||||||
|  |             if (this._assembler && this._assembler.createData) { | ||||||
|  |                 this._renderData = this._assembler.createData(this); | ||||||
|  |                 this._renderData!.material = this.getRenderMaterial(0); | ||||||
|  |                 this.markForUpdateRenderData(); | ||||||
|  |                 if (this.spriteFrame) { | ||||||
|  |                     this._assembler.updateRenderData(this); | ||||||
|  |                 } | ||||||
|  |                 this._updateColor(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private _applySpriteSize () { | ||||||
|  |         if (this._spriteFrame) { | ||||||
|  |             if (BUILD || !this._spriteFrame.isDefault) { | ||||||
|  |                 if (Sprite.SizeMode.RAW === this._sizeMode) { | ||||||
|  |                     const size = this._spriteFrame.originalSize; | ||||||
|  |                     this.node._uiProps.uiTransformComp!.setContentSize(size); | ||||||
|  |                 } else if (Sprite.SizeMode.TRIMMED === this._sizeMode) { | ||||||
|  |                     const rect = this._spriteFrame.rect; | ||||||
|  |                     this.node._uiProps.uiTransformComp!.setContentSize(rect.width, rect.height); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             this.markForUpdateRenderData(true) | ||||||
|  |             this._assembler.updateRenderData(this); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private _resized () { | ||||||
|  |         if (!EDITOR) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (this._spriteFrame) { | ||||||
|  |             const actualSize = this.node._uiProps.uiTransformComp!.contentSize; | ||||||
|  |             let expectedW = actualSize.width; | ||||||
|  |             let expectedH = actualSize.height; | ||||||
|  |             if (this._sizeMode === Sprite.SizeMode.RAW) { | ||||||
|  |                 const size = this._spriteFrame.originalSize; | ||||||
|  |                 expectedW = size.width; | ||||||
|  |                 expectedH = size.height; | ||||||
|  |             } else if (this._sizeMode === Sprite.SizeMode.TRIMMED) { | ||||||
|  |                 const rect = this._spriteFrame.rect; | ||||||
|  |                 expectedW = rect.width; | ||||||
|  |                 expectedH = rect.height; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (expectedW !== actualSize.width || expectedH !== actualSize.height) { | ||||||
|  |                 this._sizeMode = Sprite.SizeMode.CUSTOM; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private _activateMaterial () { | ||||||
|  |         const spriteFrame = this._spriteFrame; | ||||||
|  |         const material = this.getRenderMaterial(0); | ||||||
|  |         if (spriteFrame) { | ||||||
|  |             if (material) { | ||||||
|  |                 this.markForUpdateRenderData(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (this.renderData) { | ||||||
|  |             this.renderData.material = material; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private _updateUVs () { | ||||||
|  |         if (this._assembler) { | ||||||
|  |             this._assembler.updateUVs(this); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private _applySpriteFrame (oldFrame: SpriteFrame | null) { | ||||||
|  |         const spriteFrame = this._spriteFrame; | ||||||
|  |  | ||||||
|  |         let textureChanged = false; | ||||||
|  |         if (spriteFrame) { | ||||||
|  |             if (!oldFrame || oldFrame.texture !== spriteFrame.texture) { | ||||||
|  |                 textureChanged = true; | ||||||
|  |             } | ||||||
|  |             if (textureChanged) { | ||||||
|  |                 if (this.renderData) this.renderData.textureDirty = true; | ||||||
|  |                 this.changeMaterialForDefine(); | ||||||
|  |             } | ||||||
|  |             this._applySpriteSize(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								assets/scripts/components/GPRoundBoxSprite.ts.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								assets/scripts/components/GPRoundBoxSprite.ts.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   "ver": "4.0.23", | ||||||
|  |   "importer": "typescript", | ||||||
|  |   "imported": true, | ||||||
|  |   "uuid": "99a6990b-561d-44a7-bc23-fb3e0e49fa3f", | ||||||
|  |   "files": [], | ||||||
|  |   "subMetas": {}, | ||||||
|  |   "userData": {} | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user