在GEE引擎中,如何使用事件触发来更新进度条的显示状态
在 GEE 引擎中,事件触发是更新进度条的高效方式,通过监听游戏内特定事件(如玩家交互、系统状态变化)来动态调整进度条状态。以下是具体实现方法和示例:一、事件触发机制基础
GEE 引擎提供两类事件触发方式:
内置事件:通过RegisterEvent注册系统预设事件(如怪物击杀、物品使用)
自定义事件:通过TriggerEvent手动触发特定事件
核心命令:
lua
-- 注册事件回调
RegisterEvent("事件名称", "回调函数")
-- 触发自定义事件
TriggerEvent("自定义事件名称", 参数1, 参数2...)
二、进度条更新的典型应用场景
(一)任务进度追踪
监听怪物击杀事件,更新任务进度条:
lua
-- 初始化任务进度条
function InitQuestProgressBar()
-- 设置进度条最大值(假设需要击杀10只怪物)
SetCustomItemProgressbarValue 1 0 0 = 10
SetCustomItemProgressbarValue 1 0 1 = 0-- 初始值为0
-- 注册怪物击杀事件
RegisterEvent("OnKillMonster", "UpdateQuestProgress")
end
-- 事件回调函数
function UpdateQuestProgress(monsterId)
-- 判断是否为任务目标怪物(假设ID为1001)
if monsterId == 1001 then
local current = GetCustomItemProgressbarValue(1, 0, 1)
current = current + 1
-- 更新进度条
SetCustomItemProgressbarValue 1 0 1 = current
-- 更新显示
UpdateProgressDisplay()
-- 检查任务是否完成
if current >= 10 then
CompleteQuest()
end
end
end
-- 更新进度条显示
function UpdateProgressDisplay()
local current = GetCustomItemProgressbarValue(1, 0, 1)
local max = GetCustomItemProgressbarValue(1, 0, 0)
-- 计算显示图片ID(假设使用630-639系列图片)
local imgId = 630 + math.floor(current * 9 / max)
if imgId > 639 then imgId = 639 end
-- 更新图片显示
SendMsg(2, "[显示图片]630,100,100,0,0")-- 隐藏旧图片
SendMsg(2, "[显示图片]"..imgId..",100,100,1,0")-- 显示新图片
end
(二)资源采集进度
监听采集动作,更新采集进度条:
lua
-- 初始化采集进度条
function InitGatheringProgressBar()
SetCustomItemProgressbarValue 1 0 0 = 100-- 最大进度100
SetCustomItemProgressbarValue 1 0 1 = 0 -- 初始进度0
-- 注册采集开始事件
RegisterEvent("OnGatheringStart", "StartGathering")
-- 注册采集进行事件(每秒触发一次)
RegisterEvent("OnGatheringUpdate", "UpdateGatheringProgress")
-- 注册采集结束事件
RegisterEvent("OnGatheringComplete", "StopGathering")
end
-- 开始采集
function StartGathering(resourceType)
-- 记录当前采集资源类型
currentResourceType = resourceType
-- 显示进度条
SendMsg(2, "[显示图片]620,100,100,1,0")-- 显示进度条背景
end
-- 更新采集进度
function UpdateGatheringProgress()
local current = GetCustomItemProgressbarValue(1, 0, 1)
current = current + 10-- 每次增加10%进度
SetCustomItemProgressbarValue 1 0 1 = current
UpdateProgressDisplay()
-- 采集完成
if current >= 100 then
TriggerEvent("OnGatheringComplete", currentResourceType)
end
end
-- 停止采集
function StopGathering(resourceType)
-- 隐藏进度条
SendMsg(2, "[显示图片]620,100,100,0,0")
-- 重置进度
SetCustomItemProgressbarValue 1 0 1 = 0
end
(三)玩家交互触发
监听按钮点击或对话选择,更新进度条:
lua
-- 注册按钮点击事件
RegisterButtonEvent("btnIncrease", "OnButtonClick")
-- 按钮点击回调
function OnButtonClick(buttonId)
if buttonId == "btnIncrease" then
-- 增加进度20%
local current = GetCustomItemProgressbarValue(1, 0, 1)
current = current + 20
if current > 100 then current = 100 end
SetCustomItemProgressbarValue 1 0 1 = current
UpdateProgressDisplay()
end
end
三、高级事件触发技巧
(一)多事件组合触发
监听多个事件,任一事件触发时更新进度条:
lua
-- 初始化多事件进度条
function InitMultiEventProgressBar()
SetCustomItemProgressbarValue 1 0 0 = 100
SetCustomItemProgressbarValue 1 0 1 = 0
-- 注册多个事件
RegisterEvent("OnKillMonster", "UpdateMultiProgress")
RegisterEvent("OnUseItem", "UpdateMultiProgress")
RegisterEvent("OnLevelUp", "UpdateMultiProgress")
end
-- 统一处理多个事件
function UpdateMultiProgress(eventType, ...)
local current = GetCustomItemProgressbarValue(1, 0, 1)
-- 根据不同事件类型增加不同进度
if eventType == "OnKillMonster" then
current = current + 5-- 击杀怪物+5%
elseif eventType == "OnUseItem" then
current = current + 10-- 使用物品+10%
elseif eventType == "OnLevelUp" then
current = current + 20-- 升级+20%
end
if current > 100 then current = 100 end
SetCustomItemProgressbarValue 1 0 1 = current
UpdateProgressDisplay()
end
(二)自定义事件触发
在特定逻辑点手动触发事件更新进度条:
lua
-- 自定义事件示例
function CustomEventExample()
-- 注册自定义事件
RegisterEvent("CustomProgressUpdate", "OnCustomProgressUpdate")
-- 在某个业务逻辑中触发事件
function DoSomething()
-- 模拟业务处理
local success = ProcessBusinessLogic()
if success then
-- 触发自定义事件,传递进度值
TriggerEvent("CustomProgressUpdate", 30)-- 增加30%进度
end
end
-- 自定义事件回调
function OnCustomProgressUpdate(progressDelta)
local current = GetCustomItemProgressbarValue(1, 0, 1)
current = current + progressDelta
if current > 100 then current = 100 end
SetCustomItemProgressbarValue 1 0 1 = current
UpdateProgressDisplay()
end
end
四、注意事项与优化建议
事件注册位置:
建议在 Npc 初始化脚本或全局初始化脚本中注册事件
避免在高频调用的函数中重复注册事件
性能优化:
lua
-- 减少不必要的显示更新(变化超过阈值才刷新)
local lastDisplayValue = -1
function UpdateProgressDisplay()
local current = GetCustomItemProgressbarValue(1, 0, 1)
if math.abs(current - lastDisplayValue) >= 5 then-- 变化超过5%才更新
-- 更新显示逻辑
lastDisplayValue = current
end
end
兼容性处理:
lua
-- 检查引擎版本支持
if CheckCommandExists("RegisterEvent") then
RegisterEvent("OnKillMonster", "UpdateQuestProgress")
else
-- 旧版本引擎兼容方案
SendMsg(2, "[注册事件]OnKillMonster,UpdateQuestProgress")
end
内存管理:
在进度条不再使用时,使用UnregisterEvent注销事件回调
lua
function DestroyProgressBar()
UnregisterEvent("OnKillMonster", "UpdateQuestProgress")
-- 隐藏进度条
SendMsg(2, "[显示图片]620,100,100,0,0")
end
五、常见事件类型参考表
事件名称 触发时机 回调参数
OnKillMonster 玩家击杀怪物时 monsterId(怪物 ID)
OnUseItem 玩家使用物品时 itemId(物品 ID)
OnLevelUp 玩家升级时 newLevel(新等级)
OnLogin 玩家登录时 playerId(玩家 ID)
OnLogout 玩家登出时 playerId(玩家 ID)
OnChat 玩家发送聊天消息时 playerId, message, channel
OnButtonClick 玩家点击 UI 按钮时 buttonId(按钮 ID)
OnNpcDialogSelect 玩家选择 Npc 对话选项时 dialogId(对话 ID)
通过合理利用事件触发机制,你可以在 GEE 引擎中实现高度灵活的进度条系统,实时响应玩家行为和游戏状态变化,提升用户体验。
页:
[1]