Love2d将一个对象移动到屏幕上

我试图使用键盘输入来将标签移动到屏幕上。目前只有向下和向左是有效的。我的代码如下。

debug = true
down = 0
up = 0
left = 0
right = 0
text = 'non'

x = 100
y = 100

dx = 0
dy = 0
function love.load(arg)

end

function love.update(dt)
    if love.keyboard.isDown('escape') then
        love.event.push('quit')
    end

    if up == 1 then
        dy = -1
    end
    if up == 0 then
        dy = 0
    end

    if down == 1 then
        dy = 1
    end
    if down == 0 then
        dy = 0
    end

    if right == 1 then
        dx = 1
    end
    if right == 0 then
        dx = 0
    end

    if left == 1 then
        dx = -1
    end
    if left == 0 then
        dx = 0
    end
end

function love.keypressed(key)
  if key == 'up' or key == 'w' then
      text = '上'
            up = 1
  end
    if key == 'down' or key == 's' then
      text = '下'
            down = 1
  end
    if key == 'right' or key == 'd' then
      text = '右'
            right = 1
  end
    if key == 'left' or key == 'a' then
      text = '左'
            left = 1
  end
end

function love.keyreleased(key)
    text = 'non'

    if key == 'up' or key == 'w' then
        up = 0
    end
    if key == 'down' or key == 's' then
        down = 0
    end
    if key == 'right' or key == 'd' then
        right = 0
    end
    if key == 'left' or key == 'a' then
        left = 0
    end
end

function love.draw(dt)
    x = x + dx
    y = y + dy
    love.graphics.print(text, x, y)
end

实验表明,love.update(dt)部分中if语句的顺序影响了哪些方向有效,但我无法让所有4个方向同时有效。

点赞
用户2172815
用户2172815

love.updatelove.draw 更改为下面这个样子:

function love.update(dt)
    if love.keyboard.isDown('escape') then
        love.event.push('quit')
    end

    dx, dy = 0

    if up == 1 then
        dy = -1
    end

    if down == 1 then
        dy = 1
    end

    if right == 1 then
        dx = 1
    end

    if left == 1 then
        dx = -1
    end

   x = x + dx * dt
   y = y + dy * dt
end

function love.draw(dt)
    love.graphics.print(text, x, y)
end

当你检查输入时,如果按钮被按下,你会正确地分配它们的值,但也会检查按钮是否没有被按下,然后取消分配该值。因此,如果按下了“上”键,则检查“下”键未被按下会立即覆盖已分配的值。此外,你可能希望根据目标 FPS(如果不是使用固定时间步长),通过 dt 值缩放 dx 和 dy,使移动速度不受机器 FPS 的影响相同。

2016-05-06 00:40:18