LUA:前面的函数循环播放一个动作,后面的BUFFEND函数生效后怎么打断前面函数的动作

local y;

function action(y)
while y== 0 do
player:doaction("asdasd")
player:settime(false,"hanshu1",1000)
end
end

function hanshu1()
local player:doaction("asdasdad")
end

function buffend(unit)

end

该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

要打断前面函数的动作,你可以使用Lua中的协程(coroutine)来实现。协程是一种可以在特定位置中暂停和恢复执行的功能。


首先,你需要修改你的代码,将动作函数转换为一个协程。这样可以在需要打断时暂停执行。以下是修改后的代码:

local y

local function action()
    while y == 0 do
        player:doaction("asdasd")
        player:settime(false, "hanshu1", 1000)
    end
end

local function hanshu1()
    player:doaction("asdasdad")
end

local actionCoroutine

function buffend(unit)
    if actionCoroutine then
        -- 如果存在先前的动作协程,打断它
        coroutine.cancel(actionCoroutine)
        actionCoroutine = nil
    end
end

function startAction()
    actionCoroutine = coroutine.create(action)
    coroutine.resume(actionCoroutine)
end

在上面的代码中,我创建了一个名为startAction的新函数,用于启动动作协程。当需要打断动作时,调用buffend函数。buffend函数会取消先前的动作协程(如果存在),以确保动作被打断。你可以根据需要在buffend函数中添加其他逻辑。


请注意,在action函数中,我移除了参数y,因为在你的示例代码中没有显示y的赋值。如果你需要使用y,请确保在调用startAction之前将其正确赋值。


你可以通过调用startAction()函数来开始循环播放动作,然后在需要打断时调用buffend()函数。