From 002ad988314864036eec3c249a6b708fedf60dbb 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: Sun, 7 Sep 2025 09:48:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BA=BA=E7=89=A9):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=86=8A=E8=A7=92=E8=89=B2=E5=8F=8A=E5=85=B6=E6=94=BB=E5=87=BB?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在EntityBase中修改findWeaponAnchor方法以支持空节点检查 - 实现熊角色的注册、生成和AI行为 - 添加熊角色的攻击动画和武器锚点 - 在Wave数据中添加熊角色作为Boss - 新增熊角色的子弹资源SunDance --- .../Bullets/BossAttack/Bear/SunDance.tscn | 29 +++++++++++++++++++ components/Characters/Bear.tscn | 9 ++++-- scripts/Contents/Characters/Bear.gd | 13 +++++++-- scripts/Contents/Wave.gd | 5 ++-- scripts/Statemachine/EntityBase.gd | 2 +- 5 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 components/Bullets/BossAttack/Bear/SunDance.tscn diff --git a/components/Bullets/BossAttack/Bear/SunDance.tscn b/components/Bullets/BossAttack/Bear/SunDance.tscn new file mode 100644 index 0000000..b813005 --- /dev/null +++ b/components/Bullets/BossAttack/Bear/SunDance.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=3 format=3 uid="uid://8ayxqglkc2nm"] + +[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_h0611"] +[ext_resource type="Texture2D" uid="uid://0w8sebsqjb7a" path="res://resources/bullets/light-express/Sun_Dance.webp" id="2_rqhmg"] + +[node name="SunDance" instance=ExtResource("1_h0611")] + +[node name="leave1" type="Sprite2D" parent="texture" index="1"] +modulate = Color(1, 0, 0, 1) +position = Vector2(180, 0) +texture = ExtResource("2_rqhmg") + +[node name="leave2" type="Sprite2D" parent="texture" index="2"] +self_modulate = Color(3, 1, 1, 1) +position = Vector2(160, 0) +scale = Vector2(0.9, 0.9) +texture = ExtResource("2_rqhmg") + +[node name="leave3" type="Sprite2D" parent="texture" index="3"] +modulate = Color(10, 10, 10, 1) +position = Vector2(140, 0) +scale = Vector2(0.8, 0.8) +texture = ExtResource("2_rqhmg") + +[node name="leave4" type="Sprite2D" parent="texture" index="4"] +modulate = Color(10, 10, 10, 1) +position = Vector2(120, 0) +scale = Vector2(0.7, 0.7) +texture = ExtResource("2_rqhmg") diff --git a/components/Characters/Bear.tscn b/components/Characters/Bear.tscn index 17147d6..fac1729 100644 --- a/components/Characters/Bear.tscn +++ b/components/Characters/Bear.tscn @@ -57,12 +57,17 @@ radius = 114.215 [node name="Bear" instance=ExtResource("1_3ves7")] script = ExtResource("2_kh2af") -[node name="texture" parent="." index="1"] +[node name="texture" parent="." index="2"] position = Vector2(0, -80) sprite_frames = SubResource("SpriteFrames_6tgxs") +animation = &"walk" +frame = 3 +frame_progress = 0.835241 [node name="hitbox" parent="texture/hurtbox" index="0"] shape = SubResource("CircleShape2D_hekxf") -[node name="statebar" parent="." index="2"] +[node name="normal" type="Node2D" parent="texture/weapons" index="0"] + +[node name="statebar" parent="." index="3"] position = Vector2(0, -175) diff --git a/scripts/Contents/Characters/Bear.gd b/scripts/Contents/Characters/Bear.gd index 2f0c1e1..1a8d5d3 100644 --- a/scripts/Contents/Characters/Bear.gd +++ b/scripts/Contents/Characters/Bear.gd @@ -1,8 +1,17 @@ extends EntityBase class_name Bear # 攻击方式模仿泰拉瑞亚光之女皇 +func register(): + fields[FieldStore.Entity.MAX_HEALTH] = 2000 + fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.25 + attackCooldownMap[0] = 100 +func spawn(): + texture.play("walk") func ai(): - pass + PresetEntityAI.follow(self, currentFocusedBoss, 0) + tryAttack(0) func attack(type): + var weaponPos = findWeaponAnchor("normal") if type == 0: - pass + for bullet in BulletBase.generate(preload("res://components/Bullets/BossAttack/Bear/ArrowSeven.tscn"), self, weaponPos, deg_to_rad(randf_range(0, 360))): + bullet.tracer = currentFocusedBoss diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index 78e55c6..286316c 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -11,9 +11,10 @@ var per: int = 0 static var current: int = 0 static var data: Array[Wave] = [ # entity, minCount, maxCount, isBoss, from, to, per - create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1), - create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 8, INF, 6), + # create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1), + # create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 8, INF, 6), # create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1), + create(preload("res://components/Characters/Bear.tscn"), 1, 1, true, 0, INF, 1), ] static func create( diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index cf25962..2ac707d 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -269,7 +269,7 @@ func tryHeal(count: float): healthChanged.emit(health) func findWeaponAnchor(weaponName: String): - var anchor = $"%weapons".get_node(weaponName) + var anchor = $"%weapons".get_node_or_null(weaponName) if anchor is Node2D: return anchor.global_position else: