问题描叙:悬浮指定装备不报错也不显示序列帧动画,并把修正后的代码完整整合
-- 装备提示框带序列帧边框效果
EquipmentTooltip = {}
-- 装备名字与序列帧路径的映射配置
EquipmentTooltip.frameSettings = {
-- 格式:装备名字 = {序列帧路径, 序列帧数量}
["圣战戒指"] = {"eff/01", 10},
["倚天剑"] = {"eff/02", 4},
["战神盔甲"] = {"eff/03", 4
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-06 15:08:26 |
👁️ 阅读: 25
根据浮生梦老师的前端课程内容,我来帮你修正代码。主要问题是序列帧创建函数调用参数错误,以及一些细节处理。
```lua
-- 装备提示框带序列帧边框效果
EquipmentTooltip = {}
-- 装备名字与序列帧路径的映射配置
EquipmentTooltip.frameSettings = {
-- 格式:装备名字 = {序列帧路径, 序列帧数量}
["圣战戒指"] = {"eff/01", 10},
["倚天剑"] = {"eff/02", 4},
["战神盔甲"] = {"eff/03", 4},
-- 可以继续添加更多装备配置
}
-- 获取装备的序列帧配置
function EquipmentTooltip:getFrameConfig(equipName)
return self.frameSettings[equipName]
end
-- 检查装备是否需要显示序列帧边框
function EquipmentTooltip:hasFrameEffect(equipName)
return self.frameSettings[equipName] ~= nil
end
-- 创建序列帧动画
function EquipmentTooltip:createFrameAnimation(parent, ID, x, y, framePath, frameCount, width, height)
-- 使用GUI:Frames_Create函数创建序列帧
-- 参数按顺序:parent, ID, x, y, prefix, suffix, beginframe, finishframe, ext
local frameSprite = GUI:Frames_Create(
parent,
ID,
x,
y,
framePath,
".png",
1,
frameCount,
{
speed = 100, -- 每帧播放速度(毫秒)
count = frameCount, -- 图片数量
loop = -1, -- 循环播放
finishhide = 0 -- 播放结束不隐藏
}
)
-- 设置序列帧属性
GUI:setAnchorPoint(frameSprite, 0.5, 0.5)
GUI:setContentSize(frameSprite, width, height)
return frameSprite
end
-- 显示装备提示框
function EquipmentTooltip:ShowEquipmentTooltip(parent, equipData, x, y)
if GUI:Win_IsNull(parent) then
return
end
-- 先移除旧的提示框
local oldTooltip = GUI:getChildByName(parent, "equip_tooltip")
if not GUI:Win_IsNull(oldTooltip) then
GUI:removeFromParent(oldTooltip)
end
-- 提示框尺寸
local width = 300
local height = 200
-- 创建提示框父节点
local tooltipParent = GUI:Widget_Create(parent, "equip_tooltip", x, y, width, height)
-- 获取装备名字
local equipName = SL:GetMetaValue("ITEM_NAME", equipData.Index)
-- 检查装备是否需要序列帧边框
local frameConfig = EquipmentTooltip:getFrameConfig(equipName)
-- 创建背景
local bg = GUI:Widget_Create(tooltipParent, "tooltip_bg", 0, 0, width, height)
GUI:setOpacity(bg, 180)
if frameConfig then
-- 创建序列帧边框
local framePath = frameConfig[1]
local frameCount = frameConfig[2]
-- 使用正确的函数创建序列帧动画
local frameSprite = EquipmentTooltip:createFrameAnimation(
tooltipParent,
"equip_frame_effect",
width/2,
height/2,
framePath,
frameCount,
width,
height
)
-- 确保序列帧在最上层
GUI:setLocalZOrder(frameSprite, 999)
end
-- 显示装备名称
local nameText = GUI:Text_Create(tooltipParent, "equip_name", 10, 10, 16, "#ffffff", equipName)
-- 创建属性列表
local attList = GUI:ListView_Create(tooltipParent, "att_list", 10, 40, width-20, height-60)
-- 显示装备属性
if equipData.attributes then
for i = 1, #equipData.attributes do
local attData = equipData.attributes[i]
local item = GUI:Widget_Create(attList, "att_item_"..i, 0, 0, width-20, 22)
-- 创建属性名文本
local name = GUI:Text_Create(item, "Text_attName", 0, 0, 14, "#ffffff", attData.name .. ":")
-- 创建属性值文本
local value = GUI:Text_Create(item, "Text_attValue", 150, 0, 14, "#ffff00", tostring(attData.value))
GUI:ListView_pushBackCustomItem(attList, item)
end
end
return tooltipParent
end
-- 自适应宽度处理
function EquipmentTooltip:AdaptFrameToTooltip(frameSprite, tooltipWidth, tooltipHeight)
if GUI:Win_IsNull(frameSprite) then
return
end
-- 获取序列帧原始尺寸
local originalSize = GUI:getContentSize(frameSprite)
local originalWidth = originalSize.width
local originalHeight = originalSize.height
-- 计算缩放比例
local scaleX = tooltipWidth / originalWidth
local scaleY = tooltipHeight / originalHeight
-- 设置缩放
GUI:setScaleX(frameSprite, scaleX)
GUI:setScaleY(frameSprite, scaleY)
-- 重新定位到中心
GUI:setPosition(frameSprite, tooltipWidth/2, tooltipHeight/2)
end
-- 装备悬浮事件处理
function EquipmentTooltip:OnEquipmentHover(equipData, x, y)
-- 获取当前界面
local parent = GUI:Attach_Parent()
if GUI:Win_IsNull(parent) then
return
end
-- 显示提示框
EquipmentTooltip:ShowEquipmentTooltip(parent, equipData, x, y)
end
-- 注册事件
function EquipmentTooltip:RegisterEvents()
-- 注册装备悬浮事件
SL:RegisterLUAEvent("EQUIP_HOVER_EVENT", "EquipmentTooltip", EquipmentTooltip.OnEquipmentHover)
end
-- 注销事件
function EquipmentTooltip:UnRegisterEvents()
SL:UnRegisterLUAEvent("EQUIP_HOVER_EVENT", "EquipmentTooltip")
end
-- 初始化函数
function EquipmentTooltip:Init()
-- 注册事件
EquipmentTooltip:RegisterEvents()
end
-- 清理函数
function EquipmentTooltip:Cleanup()
-- 注销事件
EquipmentTooltip:UnRegisterEvents()
end
return EquipmentTooltip
```
**主要修正点:**
1. **createFrameAnimation函数参数修正**:原函数缺少x、y坐标参数,现在补全了
2. **调用时参数顺序修正**:调用createFrameAnimation时按正确顺序传递参数
3. **背景创建顺序调整**:先创建背景再创建序列帧,确保层级正确
4. **移除冗余代码**:删除了重复设置属性的代码
**使用说明:**
- 确保序列帧资源路径正确(如"eff/01")
- 装备悬浮时触发"EQUIP_HOVER_EVENT"事件
- 需要在实际界面中调用EquipmentTooltip:Init()初始化
如果还有问题,检查一下事件名称是否正确,以及序列帧资源是否存在。
← 返回问答库