代码之家  ›  专栏  ›  技术社区  ›  Nicolas

退出时Love2d崩溃,如果在画布创建后调整了窗口大小

  •  1
  • Nicolas  · 技术社区  · 8 年前

    我的问题是,当你调整窗口大小时,按控制台上的键退出,亲爱的。exe将崩溃。这仅在使用画布时发生。

    • 等待圆圈的结束和窗口
    • 按任意键,亲爱的。exe随后应崩溃

    如果只运行代码,这将不起作用,因为需要在conf.lua中启用控制台,所以请运行love文件。如果未调整窗口大小,则不会发生崩溃。

    崩溃

    function draw()
       love.graphics.circle("fill", 100, 100, 50)  -- Draw circle
       love.graphics.setColor(255, 255, 255, 255)
       love.graphics.setCanvas()
       love.graphics.draw(canvas, 0, 0, 0, 2)  -- 200% zoom
       love.graphics.setCanvas(canvas)
       love.graphics.present()  -- Refresh screen
    end
    
    love.window.setMode(500, 500)
    canvas = love.graphics.newCanvas(1000, 1000)  -- Create canvas
    love.graphics.setCanvas(canvas)
    draw()  -- Draw circle
    love.timer.sleep(1)
    
    love.window.setMode(800, 800)  -- Resize window
    love.graphics.setCanvas(canvas)
    draw()  -- Redraw circle
    
    love.timer.sleep(2)
    love.window.close()
    print("Should crash when you quit this by pressing key")
    os.execute("pause")
    love.event.push("quit")
    

    没有崩溃

    function draw()
       love.graphics.circle("fill", 100, 100, 50)  -- Draw circle
       love.graphics.setColor(255, 255, 255, 255)
       love.graphics.setCanvas()
       love.graphics.draw(canvas, 0, 0, 0, 2)  -- 200% zoom
       love.graphics.setCanvas(canvas)
       love.graphics.present()  -- Refresh screen
    end
    
    love.window.setMode(500, 500)
    
    canvas = love.graphics.newCanvas(1000, 1000)  -- Create canvas
    love.graphics.setCanvas(canvas)
    draw()  -- Draw circle
    love.timer.sleep(1)
    
    -- Window was resized once, before canvas creation --> no crash
    
    love.window.close()
    os.execute("pause")
    love.event.push("quit")
    

    Download .love file

    请注意,我还在LOVE论坛上发布了这个问题 here

    1 回复  |  直到 8 年前
        1
  •  1
  •   Xeozim    8 年前

    根据 setMode documentation :

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

    love.graphics.setCanvas() -- Reset render target to screen
    love.window.setMode(800, 800)  -- Resize window
    love.graphics.setCanvas(canvas) -- Render to canvas again
    

    高温高压,

    谢津(Xeozim)