local leixing = SL:GetMetaValue("CURRENT_OPERMODE")
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH", 0)
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT", 0)
-- 创建窗口
local parent = GUI:Win_Create("zhuanpan", 0, 0, screenWid
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-09 19:36:20 |
👁️ 阅读: 4
从代码来看,`bg` 显示位置不稳定的问题,主要出在 `GUI:Effect_Create` 的参数上。
根据浮生梦老师前端课程内容,`GUI:Effect_Create` 的完整参数应该是 `(parent, ID, x, y, zorder, effectID)`。你的代码中 `zorder` 参数传的是 `0`,而 `effectID` 传的是 `50000`,这是正确的。
但是,`GUI:setPosition` 和 `GUI:setAnchorPoint` 的顺序可能会影响最终显示。当 `setAnchorPoint` 在 `setPosition` 之后调用时,会导致控件的实际位置发生偏移。
**建议的修改顺序如下:**
```lua
local leixing = SL:GetMetaValue("CURRENT_OPERMODE")
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH", 0)
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT", 0)
-- 创建窗口
local parent = GUI:Win_Create("zhuanpan", 0, 0, screenWidth, screenHeight, false, false, true, false, false, false, 1)
-- 创建背景图片
local bg = GUI:Effect_Create(parent, 'bg', 0, 0, 0, 50000)
-- 1. 先设置锚点 (锚点设为(0.5, 0.5)意味着控件的中心点会作为定位点)
GUI:setAnchorPoint(bg, 0.5, 0.5)
-- 2. 再设置位置 (此时位置就是控件中心点的位置)
GUI:setPosition(bg, screenWidth/2, screenHeight/2)
-- 3. 设置缩放和尺寸
GUI:setScale(bg, 2.0)
GUI:setContentSize(bg, screenWidth, screenHeight)
```
**核心原因分析:**
`setAnchorPoint` 会改变控件坐标系的原点。如果先设置位置 `(screenWidth/2, screenHeight/2)`,再改变锚点,系统会以新的锚点规则重新计算位置,导致控件“跳”到别的地方去。先确定锚点,再设置位置,就能保证位置计算是准确的。
另外,请检查 `effectID` 为 `50000` 的特效资源是否存在且正常,有时特效本身的锚点设置也可能影响最终显示位置。如果问题依旧,可以尝试用 `GUI:Image_Create` 创建一个静态图片背景来测试,以排除特效资源的问题。
← 返回问答库