【问题标题】:Lua Love2D Missile ShootingLua Love2D 导弹射击
【发布时间】:2018-10-30 11:35:30
【问题描述】:

我正在制作这个 2D 卷轴,其中有一艘只发射导弹的小型太空船。我能够以正确的速度发射导弹,但在发射第一枚导弹后,下一枚导弹越来越快。

另外,当我发射一枚导弹时,如果我在第一枚导弹离开屏幕之前再发射一枚,第一枚导弹就会消失,只有第二枚可见。

有人可以帮我解决这个问题吗?谢谢

代码如下:

--///////////////////////////////////// LOAD FUNCTION /////////////////////////////////////--
function love.load()
sprites = {}
  sprites.sky = love.graphics.newImage("sprites/sky.png")
  sprites.plane = love.graphics.newImage("sprites/tiny_ship.png")
  sprites.missile = love.graphics.newImage("sprites/missile.png")

  spaceShip = {}
  spaceShip.x = 150
  spaceShip.y = 100
  spaceShipSpeed = 150

  missiles = {}
  end
--///////////////////////////////////// UPDATE FUNCTION /////////////////////////////////////--
function love.update(dt)
  if love.keyboard.isDown("down") then
    spaceShip.y = spaceShip.y + spaceShipSpeed * dt
  end
  if love.keyboard.isDown("up") then
    spaceShip.y = spaceShip.y - spaceShipSpeed * dt
  end
  if love.keyboard.isDown("left") then
    spaceShip.x = spaceShip.x - spaceShipSpeed * dt
  end
  if love.keyboard.isDown("right") then
    spaceShip.x = spaceShip.x + spaceShipSpeed * dt
  end

 if love.keyboard.isDown("space") then
   spawnMissile()
 end

 for i, m in ipairs(missiles) do
   missile.x = missile.x + missileSpeed * dt
    end

end
-- /////////////////////////////////////END OF UPDATE FUNCTION/////////////////////////////////////--

--/////////////////////////////////////DRAW FUNCTION///////////////////////////////////// --
function love.draw()
  love.graphics.draw(sprites.sky, 0, 0, nil, 0.5, 0.5)
  love.graphics.draw(sprites.plane, spaceShip.x , spaceShip.y, nil, nil, nil, sprites.plane:getWidth()/2, sprites.plane:getHeight()/2)

--puts the missile sprite in the same position as the spaceship--

  for i,m in ipairs(missiles) do
    love.graphics.draw(sprites.missile, missile.x, missile.y, nil, nil, nil, sprites.missile:getWidth()/2, sprites.missile:getHeight() /2)

  end
--Function missile : sets variables for missile location and speed and updates them in the Missiles Table whenever a missile is shot--
  function spawnMissile()
    missile = {}
    missile.x = spaceShip.x
    missile.y = spaceShip.y
    missileSpeed = 50
    table.insert(missiles, missile)


end
end
--/////////////////////////////////////END OF DRAW FUNCTION /////////////////////////////////////--

【问题讨论】:

    标签: lua love2d game-development


    【解决方案1】:

    最好先打通lua book。

    代码有很多问题。最杰出的:

    function spawnMissile()
        missile = {}
        //lines skipped
        table.insert(missiles, missile)
    end
    

    创建一个名为missile 的全局变量,它肯定应该是local missile = {}。

    那么,你所有的循环都是这样的:

    for i, m in ipairs(missiles) do
       missile.x = missile.x + missileSpeed * dt
       //doing some stuff with missile
    end
    

    i 和 m 是在整个 for 循环中变化的变量。 i 是一个索引,m 是存储在该索引处的表元素。而不是使用m,您的代码只处理甚至不应该存在的全局变量missile。

    因此,spawnMissile 在每次调用时都会覆盖missile,而love.update 和love.draw 只会更新和绘制missile。这就是为什么只有一枚导弹存在的原因。


    另外,让我在这里链接this guide。很长,需要一些lua知识,我会做不同的事情,但它确实涵盖了与发射导弹的太空船有关的所有内容。

    【讨论】:

      【解决方案2】:

      首先,您应该将 spawnMissile 函数从 love.draw 函数中取出。在 love.update 函数之后它必须是单独的。它也必须使用 dt,以便您可以在 love.update 中像 spawnMissile(dt) 一样调用它。一旦你有一个表格插入,你还需要 table.remove 旧的枪击。看看一些 YouTube 教程。当您看到有人输入 Lua 行时,更正您的代码会容易得多。很多...

      【讨论】:

        猜你喜欢
        • 2015-04-09
        • 2017-09-19
        • 2022-01-05
        • 2016-04-21
        • 2017-09-04
        • 2020-07-19
        • 2020-01-03
        • 2013-05-14
        • 1970-01-01
        相关资源
        最近更新 更多