我目前正在用love2d在lua編寫遊戲(用於學習目的),今天我想讓窗口大小可調整。 我不想單獨調整每個圖形對象的大小,所以我搜索了網頁,並發現了在這種情況下使用畫布的建議。 (在畫布上繪製所有東西;調整它的大小;繪製它)在love2d中使用canvas導致內存不足錯誤
沒有使用畫布,我的程序使用252,8mb ram,但只要我使用畫布,使用的內存會越來越多,直到程序崩潰。而且,由於我對lua比較陌生,對love2d也是新手,所以我無法找到並擺脫我在代碼中遇到的問題。
我的代碼(用帆布):
我有一個全局變量canvas
這(在我resources.lua
)設置爲:
帆布= love.graphics.newCanvas(STANDARD_SETTINGS.display.width ,STANDARD_SETTINGS.display.height)
(寬度等於1280P和高度720p)的 和在我main.lua
,我在draw()
FUNC這個代碼重刑:
function love.draw()
canvas:renderTo(function()
gameStates[activeState].draw()
end)
canvasImageData = canvas:getImageData()
canvas:clear()
if canvasImage == nil then
canvasImage = love.graphics.newImage(canvasImageData)
else
canvasImage:refresh()
end
canvasImage:setFilter("linear","nearest")
love.graphics.setColor(255, 255, 255, 255)
love.graphics.draw(canvasImage,0,0,0,settings.display.factor,settings.display.factor)
end
沒有畫布,我的代碼看起來是這樣的:
function love.draw()
gameStates[activeState].draw()
end
(表gameStates[activeState]
回報例如mainMenu
- 表與它繪製函數被調用)
順便說一下,調整大小與畫布工作正常,直到內存已滿並且程序崩潰。
幫助真的很感謝!
我不得不更新(清除和重新填充畫布)我的畫布內容每次love.draw叫,但您的代碼完全適用於那也是,thx。 我只需將'canvas:renderTo(mydraw)'放入'draw'函數而不是'load',並且必須在其上方調用'canvas:clear'。 這個沒有內存問題。 =) – frosty
@frosty你說得對,我把它作爲一個繪製畫布的簡單例子,但我已經編輯了答案,以你需要的方式去做。 –