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:
@@ -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,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,
|
||||
|
||||
Reference in New Issue
Block a user