我的移动队列有什么问题?为什么输入会重复?

我正在使用love2d制作一个简单的贪吃蛇游戏,但似乎无法解决代码中的问题。运行时出现的错误是角色的移动基于队列系统,而且似乎受到相同输入的阻塞。非常感谢任何帮助!

love.window.setMode(704,704)

function love.load(arg)
  x = 0
  y = 0

  timer = 0
  points = 0

  moveQueue = {}

  playersize = 32
  screensize = 704

  Applex = love.math.random(0, screensize / playersize) * playersize
  Appley = love.math.random(0, screensize / playersize) * playersize
end

function love.update(dt)

  --输入
  if love.keyboard.isDown( "s" ) and moveQueue[2] ~= 's' then
    table.insert(moveQueue, 's')
  end
  if love.keyboard.isDown( "w" ) and moveQueue[2] ~= 'w' then
    table.insert(moveQueue, 'w')
  end
  if love.keyboard.isDown( "a" ) and moveQueue[2] ~= 'a' then
    table.insert(moveQueue, 'a')
  end
  if love.keyboard.isDown( "d" ) and moveQueue[2] ~= 'd' then
    table.insert(moveQueue, 'd')
  end

  timer = timer + dt
    local timerLimit = 0.15
    if timer >= timerLimit then
        timer = timer - timerLimit

          if moveQueue[1] == 'w' and y > 0 then
            y = y - playersize
            table.remove(moveQueue, 1)
          end
          if moveQueue[1] == 's' and y < screensize - playersize then
            y = y + playersize
            table.remove(moveQueue, 1)
          end
          if moveQueue[1] == 'a' and x > 0 then
            x = x - playersize
            table.remove(moveQueue, 1)
          end
          if moveQueue[1] == 'd' and x < screensize - playersize then
            x = x + playersize
            table.remove(moveQueue, 1)
          end

        if x == Applex and y == Appley then
          points = points + 1

          Applex = love.math.random(0, screensize / playersize) * playersize
          Appley = love.math.random(0, screensize / playersize) * playersize

        end

        print('Tick')
    end

end

function love.draw()

  love.graphics.rectangle("fill", x, y, playersize, playersize)

  love.graphics.setColor(255,0,0)

  love.graphics.rectangle("fill", Applex, Appley, playersize, playersize)

  love.graphics.setColor(255,255,255)

end

很抱歉读起来很长!

点赞
用户6331353
用户6331353
love.window.setMode(704,704)

function love.load(arg)
  x = 0
  y = 0
  timer = 0
  points = 0
  moveQueue = {}
  playersize = 32
  screensize = 704

  Applex = love.math.random(0, screensize / playersize) * playersize
  Appley = love.math.random(0, screensize / playersize) * playersize
end

function love.update(dt)
  --输入
    if love.keyboard.isDown( "s" ) and moveQueue[2] ~= 's' then
        table.insert(moveQueue, 's')
    elseif love.keyboard.isDown( "w" ) and moveQueue[2] ~= 'w' then
        table.insert(moveQueue, 'w')
    elseif love.keyboard.isDown( "a" ) and moveQueue[2] ~= 'a' then
        table.insert(moveQueue, 'a')
    elseif love.keyboard.isDown( "d" ) and moveQueue[2] ~= 'd' then
        table.insert(moveQueue, 'd')
    end

    timer = timer + dt
    local timerLimit = 0.15

    if timer >= timerLimit then
        timer = timer - timerLimit

          if moveQueue[1] == 'w' and y > 0 then
            y = y - playersize
          elseif moveQueue[1] == 's' and y < screensize - playersize then
            y = y + playersize
          elseif moveQueue[1] == 'a' and x > 0 then
            x = x - playersize
          elseif moveQueue[1] == 'd' and x < screensize - playersize then
            x = x + playersize
          end
          table.remove(moveQueue, 1)

        if x == Applex and y == Appley then
          points = points + 1

          Applex = love.math.random(0, screensize / playersize) * playersize
          Appley = love.math.random(0, screensize / playersize) * playersize

        end

        print('Tick')
    end
end

function love.draw()
  love.graphics.rectangle("fill", x, y, playersize, playersize)
  love.graphics.setColor(255,0,0)
  love.graphics.rectangle("fill", Applex, Appley, playersize, playersize)
  love.graphics.setColor(255,255,255)
end

很难确定,因为我不确定你的游戏的功能应该是什么。如果它应该像贪吃蛇一样,那么你做的一些事情让我很困惑,比如那些队列。

我进行了一些调整,看起来它们稍微提高了它的功能。我使用elseif代替了if(这样只有一个键可以一次按下),并将table.remove(moveQueue, 1)移到了if语句外(这样每次调用love.update(dt)时都会从队列中删除一些东西,无论按键按下与否)。

但我不知道这是否符合你的要求,因为我不确定你的游戏应该如何运作。

2020-09-06 00:08:06