抓药游戏优化

This commit is contained in:
cakipaul 2025-08-12 15:21:53 +08:00
parent 77ba172e1e
commit f1ae4be855
10 changed files with 183 additions and 78 deletions

View File

@ -900,6 +900,7 @@ prop_key3 = "prop_辫子"
[node name="Closeup抓药游戏" parent="Ground/DeployLayer/Event2D抓药游戏/药车_老板" instance=ExtResource("23_81juy")]
position = Vector2(1058, 30)
packed_scene = ExtResource("45_fxne6")
on_display_hide_hud = true
enabled = false
action_key = 3
collision_width_and_x = Vector2(40, 0)

View File

@ -69,7 +69,7 @@ script = ExtResource("23_cq2m4")
updater_event = &"current_chapter_stage"
updater_mode = "shower"
updater_ease_duration = 0.0
updater_stages = Array[int]([0, 1])
updater_stages = Array[int]([0, 1, 2])
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
@ -145,7 +145,7 @@ script = ExtResource("23_cq2m4")
updater_event = &"current_chapter_stage"
updater_mode = "shower"
updater_ease_duration = 0.0
updater_stages = Array[int]([0, 1])
updater_stages = Array[int]([0, 1, 2])
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
[node name="Note小手洞" parent="Ground/DeployLayer" index="11" instance=ExtResource("23_8qoej")]
@ -158,7 +158,7 @@ updater_event = &"current_chapter_stage"
updater_mode = "shower"
updater_ease_duration = 0.0
updater_stage_mode = "exclude"
updater_stages = Array[int]([0, 1])
updater_stages = Array[int]([0, 1, 2])
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
[node name="小蝉写字" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="12"]

View File

@ -1394,6 +1394,8 @@ position = Vector2(9, -4)
script = ExtResource("39_t5e0j")
event_name = &"c02_2f_xchan_run_away"
event_stages = Array[int]([1])
pre_event_name = &"current_chapter_stage"
pre_event_stages = Array[int]([0, 1, 2])
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
[node name="Ambush走到尽头后小蝉跑" parent="Ground/DeployLayer/Event2D_xchan_run_away" instance=ExtResource("14_k01ve")]

View File

@ -125,7 +125,7 @@ updater_event = &"current_chapter_stage"
updater_mode = "shower"
updater_ease_duration = 0.0
updater_stage_mode = "exclude"
updater_stages = Array[int]([0, 1])
updater_stages = Array[int]([0, 1, 2])
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
[node name="MainPlayer" parent="Ground" index="5"]

View File

@ -30,9 +30,12 @@ signal exit(arg)
@onready var sfx_packing = $SfxPacking as Sfx
@onready var inspect_content = %"InspectContent" as Control
@onready var draggable_finished_powder = %"Draggable完成的药粉" as Draggable2D
@onready var hover_spec = %"Hover药方" as HoverLightClickArea
@onready var hover_grinder = %"Hover石臼棒" as HoverLightClickArea
@onready var hover_finished_powder = %"Hover完成的药粉" as HoverLightClickArea
@onready var hover_packing_paper = %"Hover洞中药纸" as HoverLightClickArea
@onready var packing_paper = %"桌面药纸" as Sprite2D
@onready var hover_packed_drug = %"Hover桌面药包" as HoverLightClickArea
const correct_ingredients = [0, 3, 5, 6, 7] # 生姜,竹叶,甘蔗, 蟋蟀, 粉末
@ -171,20 +174,54 @@ func _process_grinding() -> void:
animation_player.play("intro_grinding")
sfx_toggle_grinder.play()
await animation_player.animation_finished
hover_finished_powder.freezing = false
hover_finished_powder.interacted.connect(_on_finished_powder_interacted, CONNECT_ONE_SHOT)
hover_packing_paper.freezing = false
hover_packing_paper.interacted.connect(_on_packing_paper_interacted, CONNECT_ONE_SHOT)
func _on_finished_powder_interacted() -> void:
var packing_paper = $"洞中药纸"
func _on_packing_paper_interacted() -> void:
hover_packing_paper.freezing = true
sfx_packing.play()
packing_paper.show()
packing_paper.modulate.a = 0.0
var tween = create_tween()
tween.tween_property(hover_packing_paper, "modulate:a", 0.0, 1.0)
tween.parallel().tween_property(packing_paper, "modulate:a", 1.0, 1.0)
draggable_finished_powder.freezing = false
draggable_finished_powder.picked.connect(_on_finished_powder_picked)
draggable_finished_powder.dropped.connect(_on_finished_powder_dropped)
func _on_finished_powder_picked(_node) -> void:
draggable_finished_powder.z_index = 5 # 置于顶层
create_tween().tween_property(draggable_finished_powder, "scale", Vector2(0.9, 0.9), 0.5)
func _on_finished_powder_dropped(node: Draggable2D) -> void:
var target_pos = packing_paper.global_position
var distance_squared = node.global_position.distance_squared_to(target_pos)
if distance_squared > 1600:
# 需要放在 packing_paper 附近
node.force_hold()
node.invalid_shake()
else:
draggable_finished_powder.freezing = true
sfx_packing.play()
hover_packed_drug.show()
hover_packed_drug.modulate.a = 0.0
hover_packed_drug.interacted.connect(pick_drug)
var tween = create_tween()
tween.tween_property(packing_paper, "modulate:a", 0.0, 1.0)
tween = create_tween()
tween.tween_interval(0.5)
tween.tween_property(hover_finished_powder, "modulate:a", 0.0, 0.5)
tween.tween_callback(SceneManager.enable_prop_item.bind("prop_药包"))
tween.tween_callback(exit.emit.bind(true))
tween.tween_property(draggable_finished_powder, "modulate:a", 0.0, 0.7)
tween.parallel().tween_property(packing_paper, "modulate:a", 0.0, 0.7)
tween.parallel().tween_property(hover_packed_drug, "modulate:a", 1.0, 1.0)
tween.tween_callback(func():hover_packed_drug.freezing = false)
func pick_drug() -> void:
# 抓药完成
EventManager.set_stage_if_greater("c03_drug_game", 2)
SceneManager.enable_prop_item("prop_药包")
exit.emit(true)
func ingredients_fading_out() -> void:

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=61 format=3 uid="uid://cpxt082my5yac"]
[gd_scene load_steps=64 format=3 uid="uid://cpxt082my5yac"]
[ext_resource type="Script" uid="uid://dj2b4f3soxki5" path="res://scene/ground/script/c02/s03_closeup抓药游戏.gd" id="1_0wbm3"]
[ext_resource type="Texture2D" uid="uid://bs4npq7fnwjhw" path="res://asset/art/little_game/c03_药车游戏/背景底图.png" id="2_5ts1i"]
@ -46,6 +46,9 @@
[ext_resource type="Texture2D" uid="uid://b5ibixjn6oikx" path="res://asset/art/little_game/c03_药车游戏/黑色粉末单独.png" id="32_gf0xj"]
[ext_resource type="Texture2D" uid="uid://bq1ilitkvodnr" path="res://asset/art/little_game/c03_药车游戏/蟋蟀单独.png" id="33_26hqw"]
[ext_resource type="Texture2D" uid="uid://dyeeyfdr7gbh2" path="res://asset/art/little_game/c03_药车游戏/蟋蟀一对.png" id="36_stbjq"]
[ext_resource type="PackedScene" uid="uid://bg7oictr1wgex" path="res://scene/little_game/general/draggable.tscn" id="40_38b4f"]
[ext_resource type="Texture2D" uid="uid://dv3hi7mccvfgk" path="res://asset/art/little_game/c03_药车游戏/药纸.png" id="42_2rjr1"]
[ext_resource type="Texture2D" uid="uid://dp8junmvxwop1" path="res://asset/art/prop/c03/药包.png" id="44_cfntv"]
[sub_resource type="Animation" id="Animation_wdf7x"]
length = 0.001
@ -100,38 +103,38 @@ tracks/3/keys = {
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("完成的药粉:modulate")
tracks/4/path = NodePath("Hover洞中药纸/洞中药纸:modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
"values": [Color(1, 1, 1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("洞中药纸:modulate")
tracks/5/path = NodePath("SfxPacking:playing")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
"update": 1,
"values": [false]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("SfxPacking:playing")
tracks/6/path = NodePath("Draggable完成的药粉:modulate")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
[sub_resource type="Animation" id="Animation_26hqw"]
@ -185,25 +188,13 @@ tracks/3/keys = {
"update": 1,
"values": [true, true, true]
}
tracks/4/type = "value"
tracks/4/type = "method"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("完成的药粉:modulate")
tracks/4/path = NodePath(".")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(3.2, 5.9),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/5/type = "method"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath(".")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(3.33333),
"transitions": PackedFloat32Array(1),
"values": [{
@ -211,6 +202,18 @@ tracks/5/keys = {
"method": &"ingredients_fading_out"
}]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Draggable完成的药粉:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(3.23333, 6),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_wdf7x"]
_data = {
@ -754,12 +757,22 @@ texture = ExtResource("29_26hqw")
position = Vector2(-82, -34)
polygon = PackedVector2Array(100, 0, 67.8, 0, 65.8, 1.3, 62.4, 0, 59.4, 0, 55, 2.9, 46.2, 3, 43.1, 6, 41.6, 5, 37.3, 5, 26.9, 12.5, 25, 10, 21.4, 10, 0.4, 25, 0, 50.7, 36, 77.9, 36, 79.5, 53.7, 85, 111.2, 85, 131.4, 81, 133.8, 81, 166.8, 49, 168.4, 49, 170, 45, 170, 25, 164.5, 25, 140.5, 13, 141.1, 12, 142.3, 12, 143.4, 9.5, 141, 7.1, 141, 3.8, 136.5, 6, 133.6, 6, 128, 1.9, 128, 0, 125.6, 0, 118.8, 2, 117.7, 2, 116, 0.9, 116, 0, 111, 0, 108.5, 1, 104.1, 1)
[node name="完成的药粉" type="Sprite2D" parent="."]
[node name="Draggable完成的药粉" parent="." instance=ExtResource("40_38b4f")]
unique_name_in_owner = true
modulate = Color(1, 1, 1, 0)
light_mask = 5
position = Vector2(52, 132)
position = Vector2(138, 174)
freezing = true
texture = ExtResource("29_26hqw")
centered = false
[node name="PointLight2D" type="PointLight2D" parent="Draggable完成的药粉"]
energy = 2.0
range_layer_max = 10
range_item_cull_mask = 128
texture = ExtResource("29_26hqw")
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Draggable完成的药粉"]
position = Vector2(-82, -34)
polygon = PackedVector2Array(100, 0, 67.8, 0, 65.8, 1.3, 62.4, 0, 59.4, 0, 55, 2.9, 46.2, 3, 43.1, 6, 41.6, 5, 37.3, 5, 26.9, 12.5, 25, 10, 21.4, 10, 0.4, 25, 0, 50.7, 36, 77.9, 36, 79.5, 53.7, 85, 111.2, 85, 131.4, 81, 133.8, 81, 166.8, 49, 168.4, 49, 170, 45, 170, 25, 164.5, 25, 140.5, 13, 141.1, 12, 142.3, 12, 143.4, 9.5, 141, 7.1, 141, 3.8, 136.5, 6, 133.6, 6, 128, 1.9, 128, 0, 125.6, 0, 118.8, 2, 117.7, 2, 116, 0.9, 116, 0, 111, 0, 108.5, 1, 104.1, 1)
[node name="StaticBodyBowl" type="StaticBody2D" parent="."]
position = Vector2(132, 178)
@ -775,12 +788,59 @@ texture = ExtResource("15_nugkd")
show_behind_parent = true
polygon = PackedVector2Array(-94, -7, -72, 14, -53, 22, -22, 25, 20, 24, 49, 22, 74, 15, 97, -1, 109, -8, 126, -16, 456, -18, 460, 87, 24, 90, -160, 86, -162, -30, -142, -63, -102, -30)
[node name="洞中药纸" type="Sprite2D" parent="."]
[node name="Hover洞中药纸" parent="." instance=ExtResource("20_8lx66")]
unique_name_in_owner = true
position = Vector2(53, 242)
freezing = true
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hover洞中药纸"]
position = Vector2(-39, -44)
polygon = PackedVector2Array(41, 0, 31, 0, 25.7, 8.6, 24, 5.5, 24, 2, 15.7, 2, 0.7, 33, 0, 33, 0, 66.5, 4, 81, 4, 86.1, 9, 89.1, 9, 90.8, 18, 91.8, 50.7, 92, 55, 90.4, 73.1, 89, 80, 89, 80, 72.4, 78, 58, 78, 53.5, 67, 33.3, 67, 31.2, 41, 2.2)
[node name="洞中药纸" type="Sprite2D" parent="Hover洞中药纸"]
light_mask = 33
z_index = 1
position = Vector2(14, 198)
position = Vector2(-39, -44)
texture = ExtResource("30_8leof")
centered = false
[node name="PointLight2D" type="PointLight2D" parent="Hover洞中药纸"]
position = Vector2(1, 2)
range_layer_max = 10
range_item_cull_mask = 32
texture = ExtResource("30_8leof")
[node name="桌面药纸" type="Sprite2D" parent="."]
unique_name_in_owner = true
visible = false
z_index = 1
position = Vector2(302, 238)
scale = Vector2(1.5, 1.5)
texture = ExtResource("42_2rjr1")
[node name="Hover桌面药包" parent="." instance=ExtResource("20_8lx66")]
unique_name_in_owner = true
visible = false
position = Vector2(305, 214)
freezing = true
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hover桌面药包"]
position = Vector2(3, 9)
polygon = PackedVector2Array(1, -64.3, 1, -62.5, -55.1, -43.8, -70.6, -51, -74, -51, -78, -46, -79.4, -46, -85.4, -29, -87.3, -29, -86, -18.8, -86, -13.5, -81.2, -4.7, -81.8, -4, -84, -4, -84, 14.7, -62, 43.6, -62, 46, -55, 51, -55, 52.7, -44, 54.7, -44, 55.9, 37.9, 61, 47.8, 61, 65.9, 44, 67.9, 44, 88.9, 20, 91.4, 20, 90, 11.7, 90, 5.2, 84, -0.800003, 84, -2.6, 91.1, -15, 93, -15, 93, -30.8, 84, -39.8, 84, -41.5, 74, -44.5, 74, -45.5, 30, -59.5, 30, -60.8)
[node name="PointLight2D" type="PointLight2D" parent="Hover桌面药包"]
position = Vector2(3, 9)
energy = 0.8
range_layer_max = 10
range_item_cull_mask = 32
texture = ExtResource("44_cfntv")
[node name="桌面药包" type="Sprite2D" parent="Hover桌面药包"]
light_mask = 32
z_index = 1
position = Vector2(3, 9)
texture = ExtResource("44_cfntv")
[node name="遮罩" type="TextureRect" parent="."]
light_mask = 5
z_index = 1
@ -789,7 +849,6 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("2_wtw10")
[node name="InspectContent" type="Control" parent="."]
@ -802,7 +861,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
mouse_filter = 1
[node name="药方" type="TextureRect" parent="InspectContent"]
layout_mode = 0
@ -810,11 +869,11 @@ offset_left = -14.0
offset_top = -10.0
offset_right = 562.0
offset_bottom = 306.0
mouse_filter = 2
texture = ExtResource("25_gonyp")
[node name="ContentInspector" parent="InspectContent" instance=ExtResource("3_h2dug")]
layout_mode = 1
mouse_filter = 1
[node name="遮罩" type="TextureRect" parent="InspectContent/ContentInspector"]
layout_mode = 1
@ -823,7 +882,6 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("5_qafag")
[node name="Label" type="Label" parent="InspectContent/ContentInspector/遮罩"]
@ -840,6 +898,7 @@ offset_right = 60.0
offset_bottom = 15.5
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1
text = "生姜两片
竹叶十片去尖
经霜三年的甘蔗

View File

@ -25,13 +25,6 @@ func _on_ground_ready(_ground: Ground2D):
if interactable.interacted_times >= 3:
closeup.enabled = true
boss_sprite.hide()
closeup.exit.connect(_on_closeup_exit)
func _on_closeup_exit(win = false) -> void:
if win:
# 完成抓药游戏
EventManager.set_stage_if_greater("c03_drug_game", 2)
func _boss_interacted(valid := true) -> void:

View File

@ -19,9 +19,9 @@ func _on_majhong_interacted() -> void:
SceneManager.enable_prop_item("prop_麻将")
func _on_drug_spec_interacted() -> void:
SceneManager.enable_prop_item("prop_药方", true)
# 拿药方后,启动 drug game
EventManager.set_stage("c03_drug_game", 1)
SceneManager.enable_prop_item("prop_药方", true)
func _on_pic_interacted() -> void:
if pic.freezing:

View File

@ -194,3 +194,37 @@ func force_hold() -> void:
current_focusing_node = self
holding = true
picked.emit(self)
# 缓存常量
const SHAKE_FPS := 15.0
const SHAKE_DURATION := 0.8
const SHAKE_DELTA := 12.0
const HUD_FADE_DURATION := 0.3
var _shake_tween: Tween
func invalid_shake() -> void:
if _shake_tween and _shake_tween.is_running():
_shake_tween.kill()
# 抖动效果
_shake_tween = create_tween()
var count := int(SHAKE_DURATION * SHAKE_FPS)
var delta_t := 1.0 / SHAKE_FPS
sprite.modulate = Color.INDIAN_RED
# 预计算随机值,避免在循环中多次调用 randf_range
for i in count:
var decay := exp(-float(i))
var offset := Vector2(
randf_range(-SHAKE_DELTA, SHAKE_DELTA) * decay,
randf_range(-SHAKE_DELTA, SHAKE_DELTA) * decay
)
_shake_tween.tween_property(sprite, "offset", sprite_offset + offset, delta_t).set_trans(
Tween.TRANS_CUBIC
)
_shake_tween.tween_callback(_reset_after_shake)
func _reset_after_shake() -> void:
sprite.modulate = Color.WHITE
sprite.offset = sprite_offset

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=16 format=3 uid="uid://dc778gsjfr3ky"]
[gd_scene load_steps=15 format=3 uid="uid://dc778gsjfr3ky"]
[ext_resource type="Script" uid="uid://ytrf63hbqa45" path="res://scene/ux/prop_hud.gd" id="1_bbv0a"]
[ext_resource type="Texture2D" uid="uid://dok08tovej18w" path="res://asset/art/ui/hud/normal_left.png" id="2_bjc2b"]
@ -11,7 +11,6 @@
[ext_resource type="Texture2D" uid="uid://c0gjes4a8ou3b" path="res://asset/art/ui/hud/select_mark.png" id="7_53yeo"]
[ext_resource type="Texture2D" uid="uid://yvwjasroj4yr" path="res://asset/art/prop/c01/银元.png" id="9_hty3r"]
[ext_resource type="Texture2D" uid="uid://c1ogeaa836kry" path="res://asset/art/ui/hud/normal_right.png" id="10_vkaik"]
[ext_resource type="Script" uid="uid://cmpkidbjeue6p" path="res://scene/ux/test_hbox.gd" id="11_008sv"]
[ext_resource type="Texture2D" uid="uid://d03la4d2swk0k" path="res://asset/art/ui/hud/pressed_right.png" id="11_a512b"]
[ext_resource type="FontVariation" uid="uid://1ryw42kej6lv" path="res://config/font_ui.tres" id="13_lom38"]
@ -248,23 +247,3 @@ layout_mode = 2
size_flags_horizontal = 4
text = "1012钥匙"
label_settings = SubResource("LabelSettings_830v8")
[node name="TestHBox" type="HBoxContainer" parent="."]
visible = false
layout_mode = 0
offset_left = 450.0
offset_top = 476.667
offset_right = 490.0
offset_bottom = 516.667
mouse_filter = 2
script = ExtResource("11_008sv")
[node name="AddButton" type="Button" parent="TestHBox"]
layout_mode = 2
theme_override_font_sizes/font_size = 42
text = "add_item"
[node name="RemoveButton" type="Button" parent="TestHBox"]
layout_mode = 2
theme_override_font_sizes/font_size = 42
text = "remove_item"