function Rank.CreateListCell(parent, data)
GUI:LoadExport(parent, "rank/rank_cell_win32")
local cell = GUI:getChildByName(parent, "Panel_cells")
local ui = GUI:ui_delegate(cell)
local rank = tonumber(data.rank) or 1
if rank > 0 and rank <= 3 then
GUI
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-09 12:10:04 |
👁️ 阅读: 0
根据你的代码,问题出在 `showLvStr` 的拼接逻辑和 `Rank._showLevel` 变量的控制上。
**原因分析:**
1. `showLvStr = data.Value..'转'..SL:GetMetaValue("ACTOR_LEVEL", data.UserID)` 这一行会给所有名次的玩家拼接等级字符串
2. 但只有 `Rank._showLevel` 为 `true` 时,才会将 `showLvStr` 设置到 `ui.Text_3` 上
3. 从代码看,`Rank._showLevel` 可能只在特定条件下才为 `true`,导致其他名次没有显示等级
**修改建议:**
```lua
function Rank.CreateListCell(parent, data)
GUI:LoadExport(parent, "rank/rank_cell_win32")
local cell = GUI:getChildByName(parent, "Panel_cells")
local ui = GUI:ui_delegate(cell)
local rank = tonumber(data.rank) or 1
-- 排名图标处理
if rank > 0 and rank <= 3 then
GUI:setVisible(ui.Text_rank, false)
GUI:setVisible(ui.Image_rank, true)
GUI:Image_loadTexture(ui.Image_rank, Rank._path .. string.format("%s.png", 1900020024 + rank))
else
GUI:setVisible(ui.Text_rank, true)
GUI:setVisible(ui.Panel_ranks, false)
GUI:Text_setString(ui.Text_rank, rank == 0 and "未上榜" or rank)
end
-- 背景底图
GUI:setVisible(ui.Image_bg, rank % 2 == 1)
-- 修改这里:确保所有名次都能显示等级
local showLvStr = data.Value..'转'..SL:GetMetaValue("ACTOR_LEVEL", data.UserID)
local guildText = ui.Text_3
-- 如果 Rank._showLevel 为 true,显示等级和描述
if Rank._showLevel then
guildText = ui.Text_4
GUI:Text_setString(ui.Text_3, showLvStr and (showLvStr..Rank.CheckLvDesc()) or "")
else
-- 如果 Rank._showLevel 为 false,也显示等级(不显示描述)
GUI:Text_setString(ui.Text_3, showLvStr or "")
end
-- 设置其他文本
GUI:Text_setString(guildText, data.GuildName)
GUI:Text_setString(ui.Text_1, data.Name)
local function panelCB()
Rank.ResetSelectItem(data)
end
GUI:addOnClickEvent(ui.Panel_touch, panelCB)
return cell
end
```
**关键修改:**
1. 在 `else` 分支中增加了 `GUI:Text_setString(ui.Text_3, showLvStr or "")`
2. 这样即使 `Rank._showLevel` 为 `false`,也会显示等级信息
**调试建议:**
在代码中添加调试信息,查看每个名次的数据:
```lua
SL:Print("玩家ID:", data.UserID)
SL:Print("data.Value:", data.Value)
SL:Print("等级:", SL:GetMetaValue("ACTOR_LEVEL", data.UserID))
SL:Print("Rank._showLevel:", Rank._showLevel)
```
这样可以确认每个名次是否都有正确的等级数据,以及 `Rank._showLevel` 变量的状态。
根据你的代码,问题出在 `showLvStr` 的拼接逻辑和 `Rank._showLevel` 变量的控制上。
**原因分析:**
1. `showLvStr = data.Value..'转'..SL:GetMetaValue("ACTOR_LEVEL", data.UserID)` 这一行会给所有名次的玩家拼接等级字符串
2. 但只有 `Rank._showLevel` 为 `true` 时,才会将 `showLvStr` 设置到 `ui.Text_3` 上
3. 从代码看,`Rank._showLevel` 可能只在特定条件下才为 `true`,导致其他名次没有显示等级
**修改建议:**
```lua
function Rank.CreateListCell(parent, data)
GUI:LoadExport(parent, "rank/rank_cell_win32")
local cell = GUI:getChildByName(parent, "Panel_cells")
local ui = GUI:ui_delegate(cell)
local rank = tonumber(data.rank) or 1
-- 排名图标处理
if rank > 0 and rank <= 3 then
GUI:setVisible(ui.Text_rank, false)
GUI:setVisible(ui.Image_rank, true)
GUI:Image_loadTexture(ui.Image_rank, Rank._path .. string.format("%s.png", 1900020024 + rank))
else
GUI:setVisible(ui.Text_rank, true)
GUI:setVisible(ui.Panel_ranks, false)
GUI:Text_setString(ui.Text_rank, rank == 0 and "未上榜" or rank)
end
-- 背景底图
GUI:setVisible(ui.Image_bg, rank % 2 == 1)
-- 修改这里:确保所有名次都能显示等级
local showLvStr = data.Value..'转'..SL:GetMetaValue("ACTOR_LEVEL", data.UserID)
local guildText = ui.Text_3
-- 如果 Rank._showLevel 为 true,显示等级和描述
if Rank._showLevel then
guildText = ui.Text_4
GUI:Text_setString(ui.Text_3, showLvStr and (showLvStr..Rank.CheckLvDesc()) or "")
else
-- 如果 Rank._showLevel 为 false,也显示等级(不显示描述)
GUI:Text_setString(ui.Text_3, showLvStr or "")
end
-- 设置其他文本
GUI:Text_setString(guildText, data.GuildName)
GUI:Text_setString(ui.Text_1, data.Name)
local function panelCB()
Rank.ResetSelectItem(data)
end
GUI:addOnClickEvent(ui.Panel_touch, panelCB)
return cell
end
```
**关键修改:**
1. 在 `else` 分支中增加了 `GUI:Text_setString(ui.Text_3, showLvStr or "")`
2. 这样即使 `Rank._showLevel` 为 `false`,也会显示等级信息
**调试建议:**
在代码中添加调试信息,查看每个名次的数据:
```lua
SL:Print("玩家ID:", data.UserID)
SL:Print("data.Value:", data.Value)
SL:Print("等级:", SL:GetMetaValue("ACTOR_LEVEL", data.UserID))
SL:Print("Rank._showLevel:", Rank._showLevel)
```
这样可以确认每个名次是否都有正确的等级数据,以及 `Rank._showLevel` 变量的状态。
← 返回问答库