Lua Love2D导弹射击

时间:2018-05-20 18:40:51

标签: lua love2d game-development

我正在构建这个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 /////////////////////////////////////--

2 个答案:

答案 0 :(得分: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

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

因此,spawnMissile会覆盖每次通话中的missile,而love.updatelove.draw只会更新并绘制missile。这就是为什么只有一枚导弹存在的原因。

此外,让我在此处链接this guide。它很长,它需要一些lua的知识,我会以不同的方式做事,但它确实涵盖了与射击导弹的太空船相关的所有事情。

答案 1 :(得分:0)

首先,您应该将spawnMissile函数从love.draw函数中删除。在love.update函数之后,它必须是一个人。它也必须使用dt,以便您可以像love.update中的spawnMissile(dt)一样调用它。插入桌子后,您还需要桌子。删除旧照片。看一些YouTube教程。当您看到有人在输入Lua行时,更容易更正您的代码。他们很多...