LOVE2d-子弹不射击

时间:2015-02-10 00:12:54

标签: windows lua love2d

所以我正在玩一个教程脚本,我添加了一个跟随玩家运动的炮塔。这个炮塔应该每隔几秒就向玩家射击一次。在我添加碰撞或定时镜头之类的东西之前,我发现子弹镜头实际上并没有显示出来。所以我把它设置为按键,只是为了测试,而不是,不工作。

Full Code

你看错了什么?注意:运行时我没有收到错误,子弹只是不显示!

1 个答案:

答案 0 :(得分:0)

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建议的数组。

  • 没有什么可以阻止子弹使负速度击中玩家或玩家被多个子弹击中,因此可以将它们添加到{{1} }和remEnemy表多次,这将搞乱删除以后。

  • 删除条目(由Etan Reisner提及)时发生的索引转换也存在。

对于您的用例,通过将对象添加到集合来标记要删除的对象似乎是对我来说最好的方法:

remShot

然后如果发生碰撞或子弹有负速度则

local remShots = {}

并删除,反向迭代以避免移位索引。

remShots[i] = true

性能

for i=#enemyShots,1,-1 do if remShots[i] then table.remove(enemyShots, i) end end 向下移动索引上方的所有元素以填补空白。在这里的代码中,循环删除了多个元素,因此它们被移动了不止一次,但只要你的表格不是很大,这个删除过程就可以了。

我注意确定你在第一个项目符号点上的用途,但你也可以使用table.remove来避免检查与你已经被标记为删除的玩家的碰撞锻炼了:

remPlayer