Love2d在创建画布后调整窗口大小并退出时崩溃

我的问题是,当您调整窗口大小并在控制台中按键退出时,love.exe会崩溃。只有在使用画布时才会发生这种情况。 以下是如何重现此崩溃的方法:

  • 运行 .love 文件
  • 等待圆形物体结束并关闭窗口
  • 按任意键,love.exe 应该崩溃

如果仅运行代码,此方法将无效,因为需要在 conf.lua 中启用控制台,请运行 love 文件。如果没有调整窗口大小,则不会发生崩溃。

崩溃

function draw()
   love.graphics.circle("fill", 100, 100, 50)  -- 画圆
   love.graphics.setColor(255, 255, 255, 255)
   love.graphics.setCanvas()
   love.graphics.draw(canvas, 0, 0, 0, 2)  -- 放大 200%
   love.graphics.setCanvas(canvas)
   love.graphics.present()  -- 刷新屏幕
end

love.window.setMode(500, 500)
canvas = love.graphics.newCanvas(1000, 1000)  -- 创建画布
love.graphics.setCanvas(canvas)
draw()  -- 画圆
love.timer.sleep(1)

love.window.setMode(800, 800)  -- 调整窗口大小
love.graphics.setCanvas(canvas)
draw()  -- 重新画圆

love.timer.sleep(2)
love.window.close()
print("按键退出时应该崩溃")
os.execute("pause")
love.event.push("quit")

不会崩溃

function draw()
   love.graphics.circle("fill", 100, 100, 50)  -- 画圆
   love.graphics.setColor(255, 255, 255, 255)
   love.graphics.setCanvas()
   love.graphics.draw(canvas, 0, 0, 0, 2)  -- 放大 200%
   love.graphics.setCanvas(canvas)
   love.graphics.present()  -- 刷新屏幕
end

love.window.setMode(500, 500)

canvas = love.graphics.newCanvas(1000, 1000)  -- 创建画布
love.graphics.setCanvas(canvas)
draw()  -- 画圆
love.timer.sleep(1)

-- 在创建画布之前调整了窗口大小 --> 不会崩溃

love.window.close()
os.execute("pause")
love.event.push("quit")

下载 .love 文件

请注意,我也在 LOVE 论坛上发布了此问题 此处,但仍未得到良好的答案。我想也许我可以在这里获得答案。

点赞
用户5325448
用户5325448

根据 setMode 文档

修改显示模式可能会有副作用:例如,画布将被清除,并使用 Shader:send 发送的值将被擦除。如果需要,确保预先保存画布的内容,或在操作后重新绘制画布。

您可以通过在 setMode 操作期间将渲染目标重置为主屏幕来保存画布数据并防止崩溃:

love.graphics.setCanvas() -- 将渲染目标重新设置为屏幕
love.window.setMode(800, 800)  -- 调整窗口大小
love.graphics.setCanvas(canvas) -- 再次渲染到画布上

希望对您有所帮助,

Xeozim

2016-08-16 08:26:53