问题描叙:把下方代码EquipmentTooltip.lua文件导入到ItemTips.lua文件里面加载使用,注意,ItemTips.lua是悬浮装备时自动会执行,取消EquipmentTooltip.lua文件的事件加载机制
EquipmentTooltip.lua文件如下:
-- 装备提示框带序列帧边框效果
EquipmentTooltip = {}
-- 装备名字与序列帧路径的映射配置
EquipmentTooltip.frameSettings = {
-- 格式:装备名字
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-06 15:50:52 |
👁️ 阅读: 49
```lua
-- 在ItemTips.lua文件顶部添加EquipmentTooltip模块
EquipmentTooltip = {}
-- 装备名字与序列帧路径的映射配置
EquipmentTooltip.frameSettings = {
-- 格式:装备名字 = {序列帧路径, 序列帧数量}
["圣战戒指"] = {"res/eff/01", 10},
["倚天剑"] = {"res/eff/02", 4},
["战神盔甲"] = {"res/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
-- 显示装备提示框(在ItemTips界面中调用)
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
-- 在ItemTips的CreateEquipPanel函数中添加EquipmentTooltip调用
-- 找到ItemTips.CreateEquipPanel函数,在合适的位置添加以下代码:
-- 在ItemTips.CreateEquipPanel函数中,找到显示装备名称的部分(大约在文件第600行左右)
-- 在装备名称显示后添加EquipmentTooltip调用:
-- 修改ItemTips.CreateEquipPanel函数,在显示装备名称后添加:
local equipName = itemData.Name or ""
-- 检查是否需要显示序列帧边框
local frameConfig = EquipmentTooltip:getFrameConfig(equipName)
if frameConfig then
-- 获取当前装备面板的尺寸和位置
local panelSize = GUI:getContentSize(ListBg)
local framePath = frameConfig[1]
local frameCount = frameConfig[2]
-- 创建序列帧边框效果
local frameSprite = EquipmentTooltip:createFrameAnimation(
ListBg,
"equip_frame_effect",
panelSize.width/2,
panelSize.height/2,
framePath,
frameCount,
panelSize.width,
panelSize.height
)
-- 确保序列帧在最底层作为边框
GUI:setLocalZOrder(frameSprite, -1)
end
-- 注意:由于ItemTips.lua是自动执行的,不需要手动注册事件
-- 取消了EquipmentTooltip.lua中的事件注册机制
```
**修改说明:**
1. **模块集成**:将EquipmentTooltip模块直接添加到ItemTips.lua文件顶部
2. **自动调用**:在ItemTips.CreateEquipPanel函数中自动检查装备是否需要序列帧边框
3. **取消事件机制**:移除了EquipmentTooltip中的事件注册和注销函数,因为ItemTips.lua是悬浮装备时自动执行的
4. **简化流程**:直接根据装备名称在创建装备面板时检查是否需要显示序列帧边框
**使用方式:**
- 当玩家悬浮查看"圣战戒指"、"倚天剑"或"战神盔甲"时,会自动显示对应的序列帧边框效果
- 可以继续在`frameSettings`表中添加更多装备配置
- 序列帧边框会自动适应装备面板的尺寸
这样修改后,EquipmentTooltip的功能就完全集成到ItemTips.lua中了,不需要额外的事件注册,系统会自动处理。
← 返回问答库