OnTargetChange 是用于处理选中目标改变的事件函数。根据浮生梦老师前端课程内容,你需要先注册这个事件,然后在函数中处理怪物选中时的血条显示逻辑。
以下是具体的使用方法:
```lua
-- 1. 首先注册目标改变事件
function YourModule.RegisterEvent()
SL:RegisterLUAEvent(LUA_EVENT_TARGET_CAHNGE, "YourModule", YourModule.OnTargetChange)
end
-- 2. 实现OnTargetChange函数
function YourModule.OnTargetChange(targetID)
local actor = SL:GetMetaValue("ACTOR_DATA", targetID)
-- 判断是否是有效目标
if not targetID or not actor then
YourModule.SelectTarget(nil)
return
end
-- 判断是否是怪物(这里假设你要为怪物显示血条)
if SL:GetMetaValue("ACTOR_IS_MONSTER", actor) then
YourModule.SelectTarget(targetID) -- 选中怪物
else
YourModule.SelectTarget(nil) -- 不是怪物则取消显示
end
end
-- 3. 处理选中目标的逻辑
function YourModule.SelectTarget(targetID)
YourModule._targetID = targetID
local target = SL:GetMetaValue("ACTOR_DATA", YourModule._targetID)
-- 如果没有目标,隐藏血条
if not YourModule._targetID or not target then
if YourModule._hpBar then
GUI:setVisible(YourModule._hpBar, false)
end
return
end
-- 创建或显示血条
if not YourModule._hpBar then
-- 创建父节点(如果还没有)
if not YourModule._parent then
YourModule._parent = GUI:Win_Create("HpBarParent", 0, 0, 0, 0, false, false, true, false, false, false, 1)
end
-- 创建血条背景
YourModule._hpBar = GUI:LoadingBar_Create(YourModule._parent, "hp_bar", 100, 100, 200, 20)
GUI:LoadingBar_loadTexture(YourModule._hpBar, "res/public/1900000610.png", 0) -- 背景图片
GUI:LoadingBar_setDirection(YourModule._hpBar, 0) -- 从左到右
end
-- 显示血条并更新血量
GUI:setVisible(YourModule._hpBar, true)
YourModule.UpdateTargetHP()
end
-- 4. 更新血条显示
function YourModule.UpdateTargetHP()
if not YourModule._targetID then
return
end
local target = SL:GetMetaValue("ACTOR_DATA", YourModule._targetID)
if not target then
return
end
-- 获取当前血量和最大血量
local curHP = SL:GetMetaValue("ACTOR_HP", target)
local maxHP = SL:GetMetaValue("ACTOR_MAXHP", target)
-- 计算百分比
local percent = 0
if maxHP > 0 then
percent = math.ceil(curHP / maxHP * 100)
end
-- 更新血条
if YourModule._hpBar then
GUI:LoadingBar_setPercent(YourModule._hpBar, percent)
end
end
-- 5. 初始化模块
function YourModule.Init()
-- 创建父节点
YourModule._parent = GUI:Win_Create("HpBarParent", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 注册事件
YourModule.RegisterEvent()
end
-- 6. 注册血量变化事件(可选,用于实时更新血条)
function YourModule.RegisterEvent()
SL:RegisterLUAEvent(LUA_EVENT_TARGET_CAHNGE, "YourModule", YourModule.OnTargetChange)
SL:RegisterLUAEvent(LUA_EVENT_TARGET_HP_CHANGE, "YourModule", function(data)
if data.actorID and YourModule._targetID == data.actorID then
YourModule.UpdateTargetHP()
end
end)
end
```
使用说明:
1. 调用 `YourModule.Init()` 初始化模块
2. 当玩家选中怪物时,`OnTargetChange` 会被自动调用
3. 血条会在怪物被选中时显示,取消选中时隐藏
4. 血条会实时更新怪物的血量变化
注意事项:
- 需要确保在合适的地方调用初始化函数
- 血条位置可以根据需要调整坐标
- 可以自定义血条的外观图片和样式
- 记得在不需要时清理资源