function diji(msgID, msgData)
local leixing = SL:GetMetaValue("CURRENT_OPERMODE")
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH", 0)
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT", 0)
-- 创建窗口
local parent = GUI:Win
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-09 19:43:36 |
👁️ 阅读: 8
你的代码中,特效`effect`被创建为背景`bg`的子节点,且设置了`setAnchorPoint(0.5, 0.5)`和`setPosition(screenWidth/2, screenHeight/2)`,这应该会让它居中。
但实际出现在右下角,可能是因为**父节点`bg`的坐标和尺寸影响了子节点的坐标系**。
**问题分析:**
1. `bg`的锚点被设置为`(0.5, 0.5)`,且位置居中,这改变了`bg`自身的坐标系原点。
2. 子节点`effect`的坐标是**相对于父节点`bg`的本地坐标系**,而不是屏幕全局坐标。
3. 当父节点锚点改变后,子节点的定位计算可能和预期不符。
**解决方案:**
将`effect`的父节点改为`parent`(窗口),而不是`bg`,这样坐标计算更直接:
```lua
function diji(msgID, msgData)
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:Image_Create(parent, 'bg', 0, 0, 'res/yuding/tianshudonghua/1.png')
GUI:setContentSize(bg, screenWidth, screenHeight)
GUI:setAnchorPoint(bg, 0.5, 0.5)
GUI:setPosition(bg, screenWidth/2, screenHeight/2)
-- 修改:将effect的父节点设为parent(窗口),而非bg
local effect = GUI:Effect_Create(parent, 'effect', 0, 0, 0, 50000)
GUI:setContentSize(effect, screenWidth, screenHeight)
GUI:setAnchorPoint(effect, 0.5, 0.5)
GUI:setPosition(effect, screenWidth/2, screenHeight/2)
end
```
**说明:**
- `GUI:Effect_Create`的第一个参数是父节点,这里改为`parent`,`effect`会直接基于窗口坐标系定位。
- 窗口坐标系原点在左上角,设置锚点`(0.5,0.5)`和位置`(screenWidth/2, screenHeight/2)`会让`effect`在屏幕正中心。
如果还想让`effect`作为`bg`的子节点,可以尝试不设置`bg`的锚点,保持默认`(0,0)`,并调整`effect`的本地坐标为`(0,0)`。但直接挂到`parent`上更简单可靠。
你的代码中,特效`effect`被创建为背景`bg`的子节点,且设置了`setAnchorPoint(0.5, 0.5)`和`setPosition(screenWidth/2, screenHeight/2)`,这应该会让它居中。
但实际出现在右下角,可能是因为**父节点`bg`的坐标和尺寸影响了子节点的坐标系**。
**问题分析:**
1. `bg`的锚点被设置为`(0.5, 0.5)`,且位置居中,这改变了`bg`自身的坐标系原点。
2. 子节点`effect`的坐标是**相对于父节点`bg`的本地坐标系**,而不是屏幕全局坐标。
3. 当父节点锚点改变后,子节点的定位计算可能和预期不符。
**解决方案:**
将`effect`的父节点改为`parent`(窗口),而不是`bg`,这样坐标计算更直接:
```lua
function diji(msgID, msgData)
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:Image_Create(parent, 'bg', 0, 0, 'res/yuding/tianshudonghua/1.png')
GUI:setContentSize(bg, screenWidth, screenHeight)
GUI:setAnchorPoint(bg, 0.5, 0.5)
GUI:setPosition(bg, screenWidth/2, screenHeight/2)
-- 修改:将effect的父节点设为parent(窗口),而非bg
local effect = GUI:Effect_Create(parent, 'effect', 0, 0, 0, 50000)
GUI:setContentSize(effect, screenWidth, screenHeight)
GUI:setAnchorPoint(effect, 0.5, 0.5)
GUI:setPosition(effect, screenWidth/2, screenHeight/2)
end
```
**说明:**
- `GUI:Effect_Create`的第一个参数是父节点,这里改为`parent`,`effect`会直接基于窗口坐标系定位。
- 窗口坐标系原点在左上角,设置锚点`(0.5,0.5)`和位置`(screenWidth/2, screenHeight/2)`会让`effect`在屏幕正中心。
如果还想让`effect`作为`bg`的子节点,可以尝试不设置`bg`的锚点,保持默认`(0,0)`,并调整`effect`的本地坐标为`(0,0)`。但直接挂到`parent`上更简单可靠。
← 返回问答库