-- 隐藏所有小球
for i = 1, 5 do
local widget = ui["Effect_"..i]
if GUI:Win_IsNotNull(widget) then
GUI:setVisible(widget, false)
end
end
-- 显示小球 + 只播放最新一个动画
for i = 1, effectPos do
local widget = ui["Effect_" .. i]
if not GUI:Wi
我帮你检查了代码,发现获取坐标的方式有问题。在996引擎中,`GUI:getPosition(widget)`返回的是局部坐标,但创建特效需要的是世界坐标。同时`GUI:Win_IsNotNull`这个函数在知识库中不存在,应该使用`not GUI:Win_IsNull(widget)`。
```lua
-- 隐藏所有小球
for i = 1, 5 do
local widget = ui["Effect_"..i]
if not GUI:Win_IsNull(widget) then
GUI:setVisible(widget, false)
end
end
-- 显示小球 + 只播放最新一个动画
for i = 1, effectPos do
local widget = ui["Effect_" .. i]
if not GUI:Win_IsNull(widget) then
GUI:setVisible(widget, true)
-- 只给新点亮的播放
if i == effectPos and effectPos ~= zhuansheng.lastEffectPos then
-- 获取小球的父节点
local parent = GUI:getParent(widget)
-- 获取小球的世界坐标
local worldPos = GUI:convertToWorldSpace(widget)
-- 在父节点相同位置创建特效(使用世界坐标转换为父节点的局部坐标)
local localPos = GUI:convertToNodeSpace(parent, worldPos)
local effectWidget = GUI:Effect_Create(parent, "ball_effect_" .. i, localPos.x, localPos.y, 0, 86325)
-- 小球小幅弹动
GUI:runAction(widget, GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 1.2),
GUI:ActionScaleTo(0.2, 1.0)
))
-- 特效播放完成后自动移除
GUI:Effect_addOnCompleteEvent(effectWidget, function()
if not GUI:Win_IsNull(effectWidget) then
GUI:removeFromParent(effectWidget)
end
end)
end
end
end
```
**主要修改点:**
1. `GUI:Win_IsNotNull` → `not GUI:Win_IsNull(widget)`(使用正确的函数)
2. 使用`GUI:convertToWorldSpace(widget)`获取世界坐标
3. 使用`GUI:convertToNodeSpace(parent, worldPos)`将世界坐标转换为父节点的局部坐标
4. 特效ID加了后缀避免重复
这样特效就会准确显示在小球的位置上了。下次遇到坐标问题,记得区分局部坐标和世界坐标的区别哦!