【发布时间】: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)中引入更多功能?