2016-08-16 10 views
1

Моя проблема заключается в том, что при изменении размера окна выходите, нажав клавишу в консоли, love.exe выйдет из строя. Это происходит только при использовании холста. Вот как reprodure аварии:авария Love2d при выходе, если окно было изменено после создания холста

  • Запустите файл .love
  • Дождитесь окружности вещи до конца и окна близко
  • Нажмите любую клавишу, love.exe следует затем разбить

Это не будет работать, если вы используете только код, потому что консоль должна быть включена в conf.lua, поэтому, пожалуйста, запустите файл любви. Если окно не изменено, не произойдет сбой.

Краш

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

Обратите внимание, что я также отправил этот вопрос на любовном форумах here, но нет хороших ответов. Я подумал, может, я смогу получить здесь ответ.

ответ

1

В соответствии с setMode documentation:

Изменение режима отображения может иметь побочные эффекты: например, полотна будут очищены и значения, отправленные с шейдеров Shader: отправить будут стерты. Обязательно сохраните содержимое полотна заранее или повторно нарисуйте их после этого, если вам нужно.

Вы можете сохранить данные холст и предотвратить аварию путем сброса визуализации цели, чтобы быть основной экран во время операции SetMode:

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

HTH,

Xeozim

 Смежные вопросы

  • Нет связанных вопросов^_^