1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

feat(物品收集): 为物品掉落添加收集动画效果

添加动画播放器组件并实现收集时的缩放淡出动画效果,提升物品收集时的视觉反馈
This commit is contained in:
2025-08-28 14:16:58 +08:00
parent e669bf1c30
commit 4b689e23fb
2 changed files with 92 additions and 2 deletions
+86 -1
View File
@@ -1,8 +1,87 @@
[gd_scene load_steps=13 format=3 uid="uid://cxcvc1rjvm8i2"]
[gd_scene load_steps=16 format=3 uid="uid://cxcvc1rjvm8i2"]
[ext_resource type="Script" path="res://scripts/Statemachine/ItemDropped.gd" id="1_v2djl"]
[ext_resource type="Texture2D" uid="uid://bks8jmctleina" path="res://resources/items/baseball.svg" id="2_4hl42"]
[sub_resource type="Animation" id="Animation_l0b83"]
resource_name = "collect"
length = 0.3
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0, 2, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0, 0.3)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:scale:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0, 2, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0, 0.3)
}
tracks/2/type = "bezier"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:modulate:a")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(1, -0.15, 0, 0.15, 0, 0, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0, 0.3)
}
[sub_resource type="Animation" id="Animation_5i70v"]
length = 0.001
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:scale:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0)
}
tracks/2/type = "bezier"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:modulate:a")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(1, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0)
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2q7p1"]
_data = {
"RESET": SubResource("Animation_5i70v"),
"collect": SubResource("Animation_l0b83")
}
[sub_resource type="CircleShape2D" id="CircleShape2D_7lt1c"]
radius = 2.0
@@ -57,6 +136,12 @@ unique_name_in_owner = true
scale = Vector2(0.5, 0.5)
texture = ExtResource("2_4hl42")
[node name="animator" type="AnimationPlayer" parent="texture"]
unique_name_in_owner = true
libraries = {
"": SubResource("AnimationLibrary_2q7p1")
}
[node name="hitbox" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_7lt1c")
+6 -1
View File
@@ -6,6 +6,7 @@ var stackCount: int = 1
var targetPlayer: EntityBase = null
@onready var texture: Sprite2D = $"%texture"
@onready var animator: AnimationPlayer = $"%animator"
func _ready():
apply_force(MathTool.randv2_range(30000), MathTool.randv2_range(10))
@@ -18,7 +19,7 @@ func _physics_process(_delta):
apply_central_force((targetPlayer.position - position).normalized() * 1000)
if position.distance_to(targetPlayer.position) < 60:
targetPlayer.collectItem(item, stackCount)
queue_free()
collect()
func findPlayer() -> EntityBase:
var result = null
@@ -29,6 +30,10 @@ func findPlayer() -> EntityBase:
lastDistance = position.distance_to(player.position)
result = player
return result
func collect():
animator.play("collect")
await animator.animation_finished
queue_free()
static func generate(
itemType: ItemStore.ItemType,