LOVE2d- 子弹没有发射。

所以我正在尝试一个教程脚本,我已经添加了一个炮塔,跟随玩家的移动。这个炮塔应该在几秒钟内向玩家开火。在我添加任何碰撞或定时射击之前,我发现子弹射击实际上没有被显示出来。所以我将其设置为按键测试,但是不行。

完整代码

你有发现任何问题吗?注意:当我运行它时,没有错误出现,子弹只是没有出现!

点赞
用户2726734
用户2726734

love.keyreleased(key) 把 shift 键视为一个单独且独立的键,因此“X”将不会发生。相反,使用“x”来触发一次射击。

function love.keyreleased(key)
    if key == 'x' then
        shoot()
    end
end

一旦解决了这个问题,你的碰撞检测中就会出现问题:

  • player 并没有像第 52 行的 for ii, vv in ipairs(player) do 所示那样被用作数组。

  • 没有任何限制,使得子弹可以具有负速度并且同时击中一个玩家,或者一个玩家被多个子弹击中,它们可能会被添加到 remEnemyremShot 表中多次,这将会在删除时引起混乱。

  • 删除条目时发生的索引移动(由 Etan Reisner 提到)也存在。

对于你的用例,给对象打标记以通过将其添加到集合中来删除似乎是最好的方法:

local remShots = {}

然后,如果有碰撞或子弹具有负速度,则为

remShots[i] = true

要删除,请倒序迭代以避免移位索引。

for i=#enemyShots,1,-1 do
  if remShots[i] then
    table.remove(enemyShots, i)
  end
end

性能

table.remove 移除的所有元素都会向下移动以填补空白。在这里的代码中,循环删除了多个元素,所以它们被移位超过一次,但只要你的表不是很大,这个删除过程就可以了。

我不确定你在第一条符号点上想要什么,但是当你解决了这个问题时,也可以使用 remPlayer 来避免检测已经被标记为删除的玩家与碰撞:

if not remPlayer[ii] and CheckCollision...
2015-02-10 14:58:02