我目前正在用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你说得对,我把它作为一个绘制画布的简单例子,但我已经编辑了答案,以你需要的方式去做。 –