Mutlet UI中文换行bug(已解决)
本帖最后由 daidaishu 于 2023-8-23 07:57 PM 编辑环境:Win10
问题描述:
如下图所示,我在右上角创建了一个MiniConsole,并在其中显示“【谣言】”相关的信息,
并设置了30个字符自动换行,当字符长度超过30个时,会在空格处换行,而不是第30个字
符的位置。
解决方案:
取消自动换行,自己写一个函数,在字符串达到指定宽度时调用函数插入一个换行符。
效果:
完整代码:
-- 顶边UI
local function creatUI_top()
-- 创建顶边UI容器
topContainer = topContainer or Geyser.Container:new({
name = "topContainer",
x = "0",y = "0",
width = "100%",
height = "100",
})
-- 创建聊天信息显示迷你控制台
chatConsole = chatConsole or Geyser.MiniConsole:new({
name = "chatConsole",
x = "0",y = "0",
width = "50%",
height = "100%",
fontSize = 10,
scrollBar = false,
wrap = 30
}, topContainer)
-- 创建系统信息显示迷你控制台
systemConsole = systemConsole or Geyser.MiniConsole:new({
name = "systemConsole",
x = "50%", y = "0",
width = "50%",
height = "100%",
fontSize = 10,
scrollBar = false,
}, topContainer)
end
-- 右边UI
local function creatUI_right()
-- 创建右边UI容器
rightContainer = rightContainer or Geyser.Container:new({
name = "topContainer",
x = "-500",y = "100",
width = "500",
height = "500",
})
-- 创建地图
myMap = Geyser.Mapper:new({
name = "myMap",
x = 0, y = 0,
width = "100%",
height = "100%"
},rightContainer)
end
-- 自动换行函数
local function processCopy2decho(text,windowWidth)
local processedText = ""
local accumulatedWidth = 0
local colorFlag = 1
for char in text:gmatch(utf8.charpattern) do
if char == "<" then
colorFlag= 0
elseif char == ">" then
colorFlag = 1
elseif colorFlag == 1 then
local charWidth = utf8.width(char, true)
accumulatedWidth = accumulatedWidth + charWidth
if accumulatedWidth > windowWidth then
processedText = processedText .. "\n"
accumulatedWidth = charWidth
end
end
processedText = processedText .. char
end
return processedText.."\n"
end
-- 聊天信息Trigger
function chatTrigger()
if chatConsole then
selectCurrentLine()
chatConsole:decho(processCopy2decho(copy2decho(),96))
deleteLine()
end
end
-- 系统信息Trigger
function systemTrigger()
if systemConsole then
selectCurrentLine()
systemConsole:decho(processCopy2decho(copy2decho(),96))
deleteLine()
end
end
-- 初始化
creatUI_top()
creatUI_right()
--聊天信息分类
if(exists("聊天信息分类","trigger") == 0) then
permRegexTrigger("聊天信息分类", "Pkuxkx_gui", {
[[^【(闲聊|北侠QQ群|求助)】.*$]]
--此行可继续增加,注意在上一行末尾加上逗号
}, [])
end
--系统信息分类
if(exists("系统信息分类","trigger") == 0) then
permRegexTrigger("系统信息分类", "Pkuxkx_gui", {
[[^【(谣言|江湖|交易)】.*$]]
--此行可继续增加,注意在上一行末尾加上逗号
}, [])
end
你把 word wrap 关掉试试。找找有没有类似的设置。 这个应该是Mudlet本身程序的问题,粗略看了一下GitHub,icer两年多以前提过关于换行的问题,然后去年下半年,有港台人修复了这个问题,但是提供的代码有Bug所以去年年底回滚了。所以我猜目前可能没有解决办法,只能等有人更新 这个问题的原理大概是icer在那个issue里提到的。为了保证英语词语不断在一半,mudlet是自己找空格来换行的,北侠的消息冒号后面有个空格,所以会换行。
页:
[1]