From 1022dd5024eb2c49173df06417a8ba28730feacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Mon, 2 Feb 2026 10:05:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=AD=90=E5=BC=B9=E6=95=88=E6=9E=9C):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0HXD=E5=AD=90=E5=BC=B9=E7=88=86=E7=82=B8?= =?UTF-8?q?=E6=95=88=E6=9E=9C=E5=8F=8A=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加HXDBoom效果控制器和5种爆炸纹理 调整HXD子弹的缩放比例并添加爆炸效果触发 扩展EffectController基类以支持自定义注册逻辑 --- components/Bullets/HXD.tscn | 2 +- components/Effects/HXDBoom.tscn | 37 ++++++++++++++++++++ resources/bullets/HXD/effect/0.png | Bin 0 -> 307 bytes resources/bullets/HXD/effect/0.png.import | 40 ++++++++++++++++++++++ resources/bullets/HXD/effect/1.png | Bin 0 -> 327 bytes resources/bullets/HXD/effect/1.png.import | 40 ++++++++++++++++++++++ resources/bullets/HXD/effect/2.png | Bin 0 -> 380 bytes resources/bullets/HXD/effect/2.png.import | 40 ++++++++++++++++++++++ resources/bullets/HXD/effect/3.png | Bin 0 -> 296 bytes resources/bullets/HXD/effect/3.png.import | 40 ++++++++++++++++++++++ resources/bullets/HXD/effect/4.png | Bin 0 -> 579 bytes resources/bullets/HXD/effect/4.png.import | 40 ++++++++++++++++++++++ scripts/Contents/Bullets/HXD.gd | 1 + scripts/Contents/Effects/HXDBoom.gd | 4 +++ scripts/Contents/Effects/HXDBoom.gd.uid | 1 + scripts/Statemachine/EffectController.gd | 4 +++ 16 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 components/Effects/HXDBoom.tscn create mode 100644 resources/bullets/HXD/effect/0.png create mode 100644 resources/bullets/HXD/effect/0.png.import create mode 100644 resources/bullets/HXD/effect/1.png create mode 100644 resources/bullets/HXD/effect/1.png.import create mode 100644 resources/bullets/HXD/effect/2.png create mode 100644 resources/bullets/HXD/effect/2.png.import create mode 100644 resources/bullets/HXD/effect/3.png create mode 100644 resources/bullets/HXD/effect/3.png.import create mode 100644 resources/bullets/HXD/effect/4.png create mode 100644 resources/bullets/HXD/effect/4.png.import create mode 100644 scripts/Contents/Effects/HXDBoom.gd create mode 100644 scripts/Contents/Effects/HXDBoom.gd.uid diff --git a/components/Bullets/HXD.tscn b/components/Bullets/HXD.tscn index d477d00..1d71291 100644 --- a/components/Bullets/HXD.tscn +++ b/components/Bullets/HXD.tscn @@ -43,7 +43,7 @@ penerate = 1.0 lifeTime = 5000.0 [node name="texture" parent="." index="0"] -scale = Vector2(0.185, 0.185) +scale = Vector2(0.2, 0.2) sprite_frames = SubResource("SpriteFrames_lskjb") animation = &"2" diff --git a/components/Effects/HXDBoom.tscn b/components/Effects/HXDBoom.tscn new file mode 100644 index 0000000..2e32c20 --- /dev/null +++ b/components/Effects/HXDBoom.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=9 format=3 uid="uid://c0oppv5v8grnu"] + +[ext_resource type="PackedScene" uid="uid://bcvuuy2m0pke0" path="res://components/Abstracts/EffectBase.tscn" id="1_41cv2"] +[ext_resource type="Script" uid="uid://bxvgpyb3fyko1" path="res://scripts/Contents/Effects/HXDBoom.gd" id="2_uo6a0"] +[ext_resource type="Texture2D" uid="uid://ctvlwl62ieuu6" path="res://resources/bullets/HXD/effect/4.png" id="3_4u6cx"] + +[sub_resource type="Curve" id="Curve_4u6cx"] +_data = [Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_rt83h"] +curve = SubResource("Curve_4u6cx") + +[sub_resource type="Curve" id="Curve_l6ml7"] +_data = [Vector2(0.75, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_tkfx4"] +curve = SubResource("Curve_l6ml7") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4u6cx"] +particle_flag_disable_z = true +spread = 180.0 +initial_velocity_min = 50.0 +initial_velocity_max = 100.0 +gravity = Vector3(0, 0, 0) +scale_curve = SubResource("CurveTexture_tkfx4") +alpha_curve = SubResource("CurveTexture_rt83h") + +[node name="HXDBoom" instance=ExtResource("1_41cv2")] +script = ExtResource("2_uo6a0") + +[node name="particles" parent="." index="1"] +amount = 1 +texture = ExtResource("3_4u6cx") +local_coords = true +process_material = SubResource("ParticleProcessMaterial_4u6cx") diff --git a/resources/bullets/HXD/effect/0.png b/resources/bullets/HXD/effect/0.png new file mode 100644 index 0000000000000000000000000000000000000000..5828959d50badd3d946b16388d47ad15b706659f GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^AwcZU!VDzaL;kMNn{1`wE}!XT!Hj|;y~N(Q~E&Fd?i7C!34-E|F}HM`-sgUJGi^rboC0e4Sz-(I_g zQ)fj`L5{AH*Gs0PsYT6GHm!~FYq=C?z~y#O17wW|PaFe7XN%Jt-ZS6&fo@>%boFyt I=akR{02Azga{vGU literal 0 HcmV?d00001 diff --git a/resources/bullets/HXD/effect/0.png.import b/resources/bullets/HXD/effect/0.png.import new file mode 100644 index 0000000..219ed53 --- /dev/null +++ b/resources/bullets/HXD/effect/0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8og0letgrspa" +path="res://.godot/imported/0.png-2905c23aa6392c053e62e5de00b70feb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/bullets/HXD/effect/0.png" +dest_files=["res://.godot/imported/0.png-2905c23aa6392c053e62e5de00b70feb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/bullets/HXD/effect/1.png b/resources/bullets/HXD/effect/1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd056175940b57d4560f9f519e597eb83f36fcb0 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^AwV3!!VDx!ulPR!QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`)dPG&T!Hj|BEULZFH4|O-jX1{U|?>^ADv5>(oxi`>( zY3r0($~R6jFAE;y$ zp=x$qlRCq-wlN%e;3czRi7)rkYaL39XI4FB;PlEBc$2{7=2~$@seW-2X geozDCfEx@9D&C%1{Jd+<1Kq~p>FVdQ&MBb@0F_CDGXMYp literal 0 HcmV?d00001 diff --git a/resources/bullets/HXD/effect/1.png.import b/resources/bullets/HXD/effect/1.png.import new file mode 100644 index 0000000..31e8b25 --- /dev/null +++ b/resources/bullets/HXD/effect/1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bl1pbrklnqg7u" +path="res://.godot/imported/1.png-ac079a3f4ec1f5c001ff0b50a5e0b93f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/bullets/HXD/effect/1.png" +dest_files=["res://.godot/imported/1.png-ac079a3f4ec1f5c001ff0b50a5e0b93f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/bullets/HXD/effect/2.png b/resources/bullets/HXD/effect/2.png new file mode 100644 index 0000000000000000000000000000000000000000..3717cbd48aa5051f84f950b63d7df1d33ce9dcba GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^AwV3!!VDx!ulPR!QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`4FY^ZT!Hj|Qh>EDivduNKuM5aFoS&F|2Mb7H$MJ4*|urV#pCw-$_0RO zoCO|{#S9GMf*{OzO6{{fP;jTGi(`n#@#F*v*2M`T3e0YMVnhz4?&yR6=KHiP?V#zc{xra%L( cHXR0r*n@8DpYHFl0D6MK)78&qol`;+0PORlVE_OC literal 0 HcmV?d00001 diff --git a/resources/bullets/HXD/effect/2.png.import b/resources/bullets/HXD/effect/2.png.import new file mode 100644 index 0000000..bf76337 --- /dev/null +++ b/resources/bullets/HXD/effect/2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cnn5sqecb7pke" +path="res://.godot/imported/2.png-c18e448b7d9210ef47c0212579d09c03.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/bullets/HXD/effect/2.png" +dest_files=["res://.godot/imported/2.png-c18e448b7d9210ef47c0212579d09c03.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/bullets/HXD/effect/3.png b/resources/bullets/HXD/effect/3.png new file mode 100644 index 0000000000000000000000000000000000000000..43e00f68f3055ee441095cbd78f6fd36b38c1c3e GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^AwV3!!VDx!ulPR!QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`6$5-iT!Hj|yx_dz>z_bH+$BMN!3_T&-+HsLDet(g{Gyb_~!D5b>ae+rdSV$l?F|F_tY>Q)_~X(%D`Y~Vc2ozm;WQ6BN#kg{an^LB{Ts5 D9c^w2 literal 0 HcmV?d00001 diff --git a/resources/bullets/HXD/effect/3.png.import b/resources/bullets/HXD/effect/3.png.import new file mode 100644 index 0000000..010a9ff --- /dev/null +++ b/resources/bullets/HXD/effect/3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1ify58chqj7n" +path="res://.godot/imported/3.png-abf0d1ef96a3d6f28f64c3b4f6045ee7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/bullets/HXD/effect/3.png" +dest_files=["res://.godot/imported/3.png-abf0d1ef96a3d6f28f64c3b4f6045ee7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/bullets/HXD/effect/4.png b/resources/bullets/HXD/effect/4.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a54fcaa72391d8cfb28484e7a484827d3b344b GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^!9X0q!3-pWe(anBq!^2X+?^QKos)S98wdD=xB}__B!cZzA2k8B36=!;1vALs`v3T=ZQjN3HyalpZ<@Tv{#VEX zpd@F3M`SSrgSa3FGoDiWY!7ryji-xaNQC>_X(x*gEATk5GNnwr^6&rpw;o5-RNDj2 zEWCWtTBV2ge8Ul@1sYw8H0mWU+eb9Grc3rqFa)0B?Z09!ap2KOwt}hBwSNU?O=h^m zKlj3Qc}2H>cLjp~I@DFVPxez(NQ!);({X}x!=;%5@_)|zd7Yo3zU%RyRf4Phid)t1 z6y|mKaT$FR`y}nxcR_FIWzR{g%;%&ze<|%;S9I!6W%k<5r|0CV>XsB0aaGPWo)(b4 zAjU6!=V$XdOy(5Y6OAsPtLgi-v4Fp@ zqtkhdeo2w{y$5HVmiNT6FNR$KM0H*22WQ%mvv4FO#l!q7c2k( literal 0 HcmV?d00001 diff --git a/resources/bullets/HXD/effect/4.png.import b/resources/bullets/HXD/effect/4.png.import new file mode 100644 index 0000000..835f1d0 --- /dev/null +++ b/resources/bullets/HXD/effect/4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ctvlwl62ieuu6" +path="res://.godot/imported/4.png-638cb78e7f9c0dd2573ef68a9092629a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/bullets/HXD/effect/4.png" +dest_files=["res://.godot/imported/4.png-638cb78e7f9c0dd2573ef68a9092629a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scripts/Contents/Bullets/HXD.gd b/scripts/Contents/Bullets/HXD.gd index 4c872b8..20884fb 100644 --- a/scripts/Contents/Bullets/HXD.gd +++ b/scripts/Contents/Bullets/HXD.gd @@ -14,6 +14,7 @@ func succeedToHit(_dmg: float, entity: EntityBase): if is_instance_valid(newEntity): look_at(newEntity.position) bouncedTime += 1 + EffectController.create(ComponentManager.getEffect("HXDBoom"), position).shot() func split(newBullet: BulletBase, _index: int, _total: int, _lastBullet: float): if newBullet is HXDBullet: newBullet.bouncedTime = 0 diff --git a/scripts/Contents/Effects/HXDBoom.gd b/scripts/Contents/Effects/HXDBoom.gd new file mode 100644 index 0000000..19bfa06 --- /dev/null +++ b/scripts/Contents/Effects/HXDBoom.gd @@ -0,0 +1,4 @@ +extends EffectController + +func register(): + particles.texture = load("res://resources/bullets/HXD/effect/%d.png" % randi_range(0, 4)) diff --git a/scripts/Contents/Effects/HXDBoom.gd.uid b/scripts/Contents/Effects/HXDBoom.gd.uid new file mode 100644 index 0000000..80bf291 --- /dev/null +++ b/scripts/Contents/Effects/HXDBoom.gd.uid @@ -0,0 +1 @@ +uid://bxvgpyb3fyko1 diff --git a/scripts/Statemachine/EffectController.gd b/scripts/Statemachine/EffectController.gd index 2cc0ecb..dcfc1ae 100644 --- a/scripts/Statemachine/EffectController.gd +++ b/scripts/Statemachine/EffectController.gd @@ -10,6 +10,7 @@ class_name EffectController @onready var animator: AnimationPlayer = $"%animator" func _ready(): + register() particles.emitting = false particles.one_shot = oneShot var sound = sounds.get_node_or_null(spawnSound) @@ -30,6 +31,9 @@ func shot(): await sound.finished queue_free() +func register(): + pass + static func create(scene: PackedScene, spawnPosition: Vector2, parent: Node = null) -> EffectController: var cloned = scene.instantiate() as EffectController cloned.global_position = spawnPosition