【问题标题】:Why do we make a separate function for detecting input for other classes为什么我们要创建一个单独的函数来检测其他类的输入
【发布时间】:2020-05-15 02:02:03
【问题描述】:

这是来自 CS50 的游戏开发讲座。 我们已经有一个表来检测main.lua 中的输入(即love.keyboard.keysPressed):

function love.keypressed(key)
    -- add to our table of keys pressed this frame
    love.keyboard.keysPressed[key] = true

    if key == 'escape' then
        love.event.quit()
    end
end

但我们仍然在main.lua 中制作了另一个函数以在其他类中使用:

function love.keyboard.wasPressed(key)
    return love.keyboard.keysPressed[key]
end

使用示例(类名:bird.lua):

-- just sample code, ignore the functionality
if love.keyboard.wasPressed('space') or love.mouse.wasPressed(1) then
    self.dy = -5
    sounds['jump']:play()
end

整个游戏的代码可以找到here

感谢你们花时间阅读这个问题

编辑:据我了解,

【问题讨论】:

  • love.keypressed 是一个事件处理函数,每次用户按键时都会自动调用该函数。手动调用love.keyboard.wasPressed 来回答“现在是向下还是向上?”的问题
  • 我们为什么不使用love.keyboard.keysPressed 而不是love.keyboard.wasPressed
  • 它可能会减少耦合。 “低耦合是指一个模块通过简单稳定的接口与另一个模块交互,不需要关心另一个模块内部实现的关系”-en.wikipedia.org/wiki/Coupling_(computer_programming)
  • 在您的bird.lua 示例中,包装函数允许两个条件表达式都是函数调用。这是一件小事,但他们可能只想保持一致,而不是检查一个表并为另一个调用函数。此外,由于这是针对课程的,也许未来的作业会在love.keyboard.wasPressed(key) 中引入更多功能?

标签: lua love2d


【解决方案1】:

函数love.keypressed(key) 不返回任何内容,并且表love.keyboard.keysPressed[key]main.lua 更新后重置,因此我们调用一个函数在特定时间直接执行任何输入检查(即love.keyboard.wasPressed)

【讨论】:

    【解决方案2】:

    哈,我刚刚遇到了这个搜索相同的问题。我认为它是鸟类处理自己的关键检测/移动。

    由于love.keyboard.keypressed 是一个全局函数,它总是会执行,并且你必须检查你处于什么状态/在 main.lua 中处理鸟的运动——这样(传递 waspressed 为一个函数),bird 类保留与之关联的代码,而 main 保留更高级别的非特定代码

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多