根据浮生梦老师前端课程内容,创建魔力球动画事件需要注册对应的LUA事件并实现动画播放逻辑。以下是完整的魔力球动画事件创建示例:
```lua
-- 创建魔力球动画模块
MagicBallUI = {}
-- 注册魔力球动画事件
function MagicBallUI.RegisterEvents()
SL:RegisterLUAEvent(LUA_EVENT_PLAY_MAGICBALL_EFFECT, "MagicBallUI", MagicBallUI.OnPlayMagicBallEffect)
end
-- 注销魔力球动画事件
function MagicBallUI.UnRegisterEvents()
SL:UnRegisterLUAEvent(LUA_EVENT_PLAY_MAGICBALL_EFFECT, "MagicBallUI")
end
-- 魔力球动画播放函数
function MagicBallUI.OnPlayMagicBallEffect(data)
local prefixL = {"hp_", "mp_", "fhp_"}
local tagList = {"HPSFX", "MPSFX", "FHPSFX"}
if data.type < 0 or data.type > 2 or data.count < 0 or data.interval < 0 then
return
end
local scale = data.scale == 0 and 1 or (data.scale / 100)
local timeval = data.interval / 1000
local prefix = prefixL[data.type + 1] or ""
local ani = GUI:Animation_Create()
local pSize = {width = 0, height = 0}
for i = data.beginNum, data.beginNum + data.count - 1 do
local path = string.format("res/private/mhp_ui_win32/%s%s.png", prefix, i)
if SL:IsFileExist(path) then
local sp = GUI:Sprite_Create(-1, "sp", 0, 0, path)
pSize = GUI:getContentSize(sp)
GUI:Animation_addSpriteFrame(ani, GUI:Sprite_getSpriteFrame(sp))
end
end
GUI:Animation_setDelayPerUnit(ani, timeval)
GUI:Animation_setLoops(ani, 1)
GUI:Animation_setRestoreOriginalFrame(ani, true)
local contentSize = {width = pSize.width * scale, height = pSize.height * scale}
local tag = tagList[data.type + 1]
-- 这里假设你的UI中有对应的Panel容器
local widget = MagicBallUI._ui[string.format("Panel_%ssfx", prefix)]
if widget and tag then
GUI:setContentSize(widget, contentSize.width, contentSize.height)
local sprite = GUI:Sprite_Create(widget, tag, 0, 0)
if sprite then
GUI:runAction(sprite, GUI:Animate(ani))
end
end
end
-- 初始化UI
function MagicBallUI.InitUI()
-- 创建UI容器
MagicBallUI._ui = {}
MagicBallUI._ui.Panel_hpsfx = GUI:Widget_Create(-1, "Panel_hpsfx", 100, 100, 100, 100)
MagicBallUI._ui.Panel_mpsfx = GUI:Widget_Create(-1, "Panel_mpsfx", 100, 200, 100, 100)
MagicBallUI._ui.Panel_fhpsfx = GUI:Widget_Create(-1, "Panel_fhpsfx", 100, 300, 100, 100)
-- 注册事件
MagicBallUI.RegisterEvents()
end
-- 关闭UI
function MagicBallUI.CloseUI()
-- 注销事件
MagicBallUI.UnRegisterEvents()
-- 清理UI
for _, widget in pairs(MagicBallUI._ui) do
if not GUI:Win_IsNull(widget) then
GUI:removeFromParent(widget)
end
end
MagicBallUI._ui = {}
end
```
**参数说明:**
- `data.type`:动画类型(0=HP, 1=MP, 2=FHP)
- `data.count`:动画帧数
- `data.interval`:帧间隔时间(毫秒)
- `data.scale`:缩放比例(百分比)
- `data.beginNum`:起始帧编号
**使用建议:**
1. 在UI打开时调用`MagicBallUI.InitUI()`初始化
2. 在UI关闭时调用`MagicBallUI.CloseUI()`清理资源
3. 确保图片资源路径正确,图片命名格式为`前缀+编号.png`
4. 动画播放容器需要提前创建好对应的Panel控件
这样就能在游戏中创建完整的魔力球动画事件系统了。