Lua Love2D ракетная стрельба - PullRequest
0 голосов
/ 20 мая 2018

Я строю этот 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 /////////////////////////////////////--

1 Ответ

0 голосов
/ 21 мая 2018

Это действительно хорошая идея - сначала прочитать книгу lua .

Код имеет множество проблем.Наиболее выдающееся:

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.Вот почему присутствует только одна ракета.


Кроме того, позвольте мне связать это руководство здесь.Это долго, требует некоторых знаний о Луа, я бы поступил по-другому, но он наверняка охватывает все, что связано с космическими кораблями, которые стреляют ракетами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...