local moveWidget22 = GUI:MoveWidget_Create(self._ui['kuang_'..i], "moveWidget22"..i, 0, 0, 70, 70,GUIDefine.ItemFrom.to, {cancelMoveCB = cancelMoveCallBack, endMoveCB = endMoveCallBack(k)})
在放入的时候 只给了我坐标 和 target 是100和101 没有给我ID 我无法区分! 放入到了哪里 !
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-02 22:07:25 |
👁️ 阅读: 0
根据浮生梦老师前端课程内容,你遇到的问题是在`endMoveCB`回调函数中无法获取目标ID来区分放入位置。这是因为你在设置回调时直接调用了函数,而不是传递函数引用。
**问题分析:**
你的代码中:
```lua
endMoveCB = endMoveCallBack(k)
```
这里直接执行了`endMoveCallBack(k)`,而不是传递函数。这样回调函数会立即执行,且无法接收到拖拽结束时的参数。
**正确写法:**
```lua
local moveWidget22 = GUI:MoveWidget_Create(
self._ui['kuang_'..i],
"moveWidget22"..i,
0, 0,
70, 70,
GUIDefine.ItemFrom.to,
{
cancelMoveCB = function()
cancelMoveCallBack()
end,
endMoveCB = function(data)
-- data参数会包含拖拽结束的信息
endMoveCallBack(data, k) -- 将k作为额外参数传入
end
}
)
```
**在回调函数中获取目标信息:**
```lua
local function endMoveCallBack(data, index)
if data then
local targetID = data.targetID -- 目标ID
local targetType = data.targetType -- 目标类型
local targetPos = data.targetPos -- 目标位置
SL:Print("放入到目标ID:", targetID)
SL:Print("目标类型:", targetType)
SL:Print("目标位置:", targetPos)
SL:Print("对应索引:", index)
end
end
```
**关键点:**
1. `endMoveCB`应该接收一个函数,而不是函数调用结果
2. 回调函数会收到一个`data`参数,包含拖拽结束的详细信息
3. 你可以通过闭包的方式将额外参数(如索引k)传递给回调函数
这样你就能在放入时获取到目标的ID和其他信息,从而区分放入到了哪里!
← 返回问答库