在love2d中,在draw
调用之间重置屏幕内容。因此,我无法在上一次draw
操作期间创建的屏幕上添加内容,例如,在上一次迭代期间打印的行下方打印另一行。
我该如何使用爱情游戏引擎来做到这一点。具体来说,我在主游戏区域旁有一个调试区域,我想在该窗口中打印记录的消息。
其他用例会在玩家获胜(或失败)时在游戏区域上绘制一些效果,并在显示对话框时模糊背景。
答案 0 :(得分:0)
我不了解可视调试控制台。但是,可以使用某种Shader方法在绘制调用期间操纵像素。 Here是高斯模糊像素效果的示例:
local graphics = love.graphics
function love.load()
local program = ([[
const float kernel[5] = float[](0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162);
vec4 effect(vec4 color, sampler2D tex, vec2 tex_coords, vec2 pos) {
color = texture2D(tex, tex_coords) * kernel[0];
for(int i = 1; i < 5; i++) {
color += texture2D(tex, vec2(tex_coords.x + i * %f, tex_coords.y)) * kernel[i];
color += texture2D(tex, vec2(tex_coords.x - i * %f, tex_coords.y)) * kernel[i];
}
return color;
}
]]):format(1 / graphics.getWidth(), 1 / graphics.getWidth())
fx = graphics.newPixelEffect(program)
local program = ([[
const float kernel[5] = float[](0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162);
vec4 effect(vec4 color, sampler2D tex, vec2 tex_coords, vec2 pos) {
color = texture2D(tex, tex_coords) * kernel[0];
for(int i = 1; i < 5; i++) {
color += texture2D(tex, vec2(tex_coords.x, tex_coords.y + i * %f)) * kernel[i];
color += texture2D(tex, vec2(tex_coords.x, tex_coords.y - i * %f)) * kernel[i];
}
return color;
}
]]):format(1 / graphics.getHeight(), 1 / graphics.getHeight())
fy = graphics.newPixelEffect(program)
print(fx:getWarnings())
print(fy:getWarnings())
canvas_x = graphics.newCanvas(graphics.width, graphics.height)
canvas_y = graphics.newCanvas(graphics.width, graphics.height)
end
t = 0
function love.draw()
t = t + 0.02
local x = 400 + math.sin(t) * 400
local y = 300 + math.sin(t * 0.8) * 300
graphics.setCanvas(canvas_x)
graphics.push()
graphics.translate(x, y)
graphics.rotate(t * 1.3)
graphics.rectangle("fill", -10, -50, 20, 100)
graphics.pop()
graphics.setPixelEffect(fx)
graphics.setCanvas(canvas_y)
graphics.draw(canvas_x, 0, 0)
graphics.setPixelEffect(fy)
graphics.setCanvas(canvas_x)
graphics.draw(canvas_y, 0, 0)
graphics.setPixelEffect()
graphics.setCanvas()
graphics.draw(canvas_x, 0, 0)
end
答案 1 :(得分:0)
Love2ds默认循环(调用love.draw)会自动清除屏幕。 参见https://love2d.org/wiki/love.run
要避免这种情况,您可以使用自己的运行函数并删除love.graphics.clear(),也可以使用画布https://love2d.org/wiki/Canvas。