love2d lua中的鼠标点击漏洞

下面是一个我自己写的有自我解释性的love2d程序示例。变量'state'决定游戏的状态,即'play'和'menu'。初始状态为'menu',期望在此处的第一次右键单击时,状态将更改为'play',并且在进一步的第二次右键单击时,由于结果是将变量printMsg设为true,因此在函数'love.draw()'内打印消息。

function love.load()
    state ='menu'
end

function love.draw()
    if printMsg == true then
        love.graphics.print('mousepressed')
    end
end

function love.mousepressed(x, y, button)
    if state =='menu' and button == 1 then
        state ='play'
    end
    if state =='play' and button == 1 then
        printMsg = true
    end
end

我在这里有2个问题:

  1. 即使在第一次单击时,程序也倾向于认为第一次单击也是第二次单击,因此会打印消息。

  2. 在不必创建一个变量'printMsg'来实际打印消息的情况下,我想在按下按钮的同时打印消息。我的意思是:

function love.load()
    state ='menu'
end

function love.draw()
end

function love.mousepressed(x, y, button)
    if state =='menu' and button == 1 then
        state ='play'
    end
    if state =='play' and button == 1 then
        love.graphics.print('mousepressed')
    end
end

但不幸的是,这个没有任何输出。

任何答案都会得到赞赏。

原文链接 https://stackoverflow.com/questions/69893295

点赞
stackoverflow用户2858170
stackoverflow用户2858170

你进入了第二个 if 语句,因为你将 'play' 赋值给了 state,所以第二个 if 语句的条件为 true。

如果只需要发生其中一个事情:

if state == 'menu' and button == 1 then
  state = 'play'
elseif state == 'play' and button == 1 then
  love.graphics.print('mousepressed')
end

或者

if button == 1 then
  if state == 'menu' then
    state = 'play'
  elseif state == 'play' then
    love.graphics.print('mousepressed')
  end
end

或者如果只有这两个选项,你可以省略其中一个条件:

if button == 1 then
  if state == 'menu' then
    state = 'play'
  else
    love.graphics.print('mousepressed')
  end
end

请注意,此打印不会产生任何输出。默认情况下,Love2d 在调用 love.draw 之前会清除屏幕。因此,在 love.draw 之外打印的内容不被考虑在内。

要么专门在 love.draw 中进行绘制,要么通过实现自己的 love.run 来避免清除帧缓冲区。

2021-11-09 08:46:12
stackoverflow用户11740758
stackoverflow用户11740758

标准文本颜色为:黑色

而标准背景颜色也是:黑色

因此我猜它被打印出来了,但你看不见它。

love.draw() 中的 love.graphics.print() 前尝试使用 love.graphics.setColor(1, 1, 1, 1)

(在每个可绘制的对象之前)

请查看:https://love2d.org/wiki/love.graphics.setColor

2022-01-26 16:35:43