1 尝试基础label节点 新建labelUI
2 监听玩家health 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 extends Node2D @export var max_health:int = 1 @onready var health = max_health:set=set_health signal no_health signal health_changed(value) #health被设置时,set函数会被自动调用 func set_health(value): health = value emit_signal("health_changed",health) if health <= 0: emit_signal("no_health")
3 方法1——数字型生命条 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 extends Control var hearts = 4:set = set_hearts var max_hearts = 4:set = set_max_hearts @onready var label = $Label #检查hearts func set_hearts(value): hearts = clamp(value,0,max_hearts) if label != null: label.text = "HP = " +str(hearts) func set_max_hearts(value): max_hearts = max(value,1) func _ready() -> void: self.max_hearts = PlayerStats.max_health self.hearts = PlayerStats.health PlayerStats.connect("health_changed",Callable(self,"set_hearts"))
4 方法2——图片形生命条 新建2个TextureRect,通过调整两个UI元素的size,实现控制心心个数
stats.gd更新
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 extends Node2D @export var max_health:int = 1:set =set_max_health var health = max_health:set=set_health signal no_health signal health_changed(value) signal max_health_changed(value) func set_max_health(value): max_health = value self.health = min(health,max_health) emit_signal("max_health_changed",max_health) #health被设置时,set函数会被自动调用 func set_health(value): health = value emit_signal("health_changed",health) if health <= 0: emit_signal("no_health") func _ready() -> void: self.health = max_health
health_ui.gd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 extends Control var hearts = 4:set = set_hearts var max_hearts = 4:set = set_max_hearts @onready var hert_ui_empty: TextureRect = $HertUIEmpty @onready var hert_ui_full: TextureRect = $HertUIFull #@onready var label = $Label #检查hearts func set_hearts(value): hearts = clamp(value,0,max_hearts) if hert_ui_full != null: #15根据材质大小来的 hert_ui_full.size.x = hearts * 15 #if label != null: #label.text = "HP = " +str(hearts) func set_max_hearts(value): max_hearts = max(value,1) self.hearts = min(hearts,max_hearts) if hert_ui_empty != null: hert_ui_empty.size.x = max_hearts * 15 func _ready() -> void: self.max_hearts = PlayerStats.max_health self.hearts = PlayerStats.health PlayerStats.connect("health_changed",Callable(self,"set_hearts")) PlayerStats.connect("max_health_changed",Callable(self,"set_max_hearts"))
5 再添加一些环境资源