【发布时间】:2020-12-24 18:53:52
【问题描述】:
我正在努力将操纵杆控制添加为键盘控制的一个选项。简而言之,任何键盘或操纵杆输入都会通过 Virtual Control 类进行过滤并返回一个字符串。该字符串由主程序作出反应。该系统工作,但我需要巧妙地操纵操纵杆方面。对于键盘部分,我有区分 love.keyboard.isDown 和 love.keyboard.wasPressed 的代码,因此输入、跳转和其他一次性条目只执行一次。
我最初使用的是操纵杆isGamepadDown,这对于角色运行来说很好,但是用于预播放菜单上的选定选项的相同过程导致输入多次注册。我在想 love.joystick.pressed 是处理这个问题的方法,但我无法得到正确的顺序。有人可以指出我正确的方向吗?谢谢
在 main.lua 中
function love.load()
love.keyboard.keysPressed = {}
joysticks = love.joystick.getJoysticks()
joystick1 = joysticks[1]
joystick2 = joysticks[2]
love.joystick.buttonsPressed = {}
end
function love.keyboard.wasPressed(key)
return love.keyboard.keysPressed[key]
end
function love.joystickpressed(joystick, button)
print(love.joystick.buttonsPressed[button])
return love.joystick.buttonsPressed[button]
end
function love.update(dt)
love.keyboard.keysPressed = {}
for k, joystick in pairs(joysticks) do
love.joystick.buttonsPressed = {}
end
end
在 Virtual Control.lua 中
function MenuInputs()
for k, joystick in pairs(love.joystick.getJoysticks()) do
if joystick:isGamepadDown('back') then
return 'pause'
end
if joystick:isGamepadDown('dpdown') then
return 'down'
end
if joystick:isGamepadDown('dpup') then
return 'up'
end
if joystick:isGamepadDown('dpleft') then
return 'left'
end
if joystick:isGamepadDown('dpright') then
return 'right'
end
if love.joystickpressed(joystick, 'a') or love.joystickpressed(joystick, 'start') then
return 'enter'
end
end
if love.keyboard.wasPressed('space') then
return 'pause'
end
if love.keyboard.wasPressed('s') or love.keyboard.wasPressed('down') then
return 'down'
end
if love.keyboard.wasPressed('w') or love.keyboard.wasPressed('up') then
return 'up'
end
if love.keyboard.wasPressed('a') or love.keyboard.wasPressed('left') then
return 'left'
end
if love.keyboard.wasPressed('d') or love.keyboard.wasPressed('right') then
return 'right'
end
if love.keyboard.wasPressed('enter') or love.keyboard.wasPressed('return') then
return 'enter'
end
end
【问题讨论】:
-
我注意到了一些事情。一是你永远不会调用你的
MenuInputs()函数。除非有东西说它会被自动调用或者其他东西会调用它,否则我认为你可能需要在love.update()或其他东西中调用它。另一个是您的love.update()看起来毫无用处。看起来您所做的只是将一些属性设置为等于一个空对象,并且每次游戏更新时您都在这样做。我认为这样做没有任何意义。 -
只是为了澄清-我只包含了最少的代码。有多种状态调用 MenuInputs(),它适用于键盘和任何需要“isDown”的操纵杆命令。我只需要帮助理解为什么“joystickpressed”返回零。谢谢。
-
打印中是否也打印 nil
标签: lua game-development love2d joystick