如何使子弹出现在屏幕上(Lua,Love2D)



我正在制作一个关于在太空躲避子弹的2d游戏。我试着这样做,子弹在屏幕顶部的随机位置产生,然后掉到底部,这样玩家就可以躲避它们。这是我到目前为止的代码:

function love.load()
timer = 0
background = love.graphics.newImage("space_background.png")
bullet = {
x = 300,
y = 0,
image = love.graphics.newImage("bullet.png"),
width = love.graphics.getWidth(image),
height = love.graphics.getHeight(image),
speed = 10  }
listOfBullets = {}
car = {
x = 100,
y = 100,
size = 5,
angle = 0,
image = love.graphics.newImage("classic_car.png")
}
end
function love.update(dt)
timer = timer + dt
if love.keyboard.isDown("left") then
car.x = car.x - 200 * dt
end
if love.keyboard.isDown("right") then
car.x = car.x + 200 * dt
end
if love.keyboard.isDown("up") then
car.y = car.y - 200 * dt 
end

if love.keyboard.isDown("down") then
car.y = car.y + 200 * dt
end
car.angle = car.angle + 1 * dt
if love.keyboard.isDown("r") then
timer = 0
car.x = 100
car.y = 100
car.angle = 0
end
table.insert(listOfBullets, math.random(1, 799), bullet.y)
for i,v in ipairs(listOfBullets) do
v:update(dt)
end
end
function love.draw()
love.graphics.draw(background, 0, 0)
love.graphics.print({"Score: " .. math.floor(timer), white}, 20, 550, 0, 2)
love.graphics.draw(car.image, car.x, car.y, 
car.angle, 1, 1, car.image:getWidth()/2, car.image:getHeight()/2)
for i,v in pairs(listOfBullets) do
love.graphics.print(v, 100, 100)
end
end

每次我尝试运行程序时,它都会给我同样的错误,我不知道这意味着什么,也不知道如何解决它:

错误

main.loa:77:尝试索引本地'v'(数值(

追溯

main。lua:77:在函数"更新"中

[C] :在函数"xpcall"中

有人能帮我吗?

错误消息显示v是一个数字。冒号表示法需要获取值v.update,这是一个索引操作,但不可能对数字进行索引。

那么为什么v是一个数字呢

这可以通过读取table.insert的文档来解释。在语句table.insert(listOfBullets, math.random(1, 799), bullet.y)中,将bullet.y(即0(插入到listOfBullets内的随机索引中。

我不知道你想在那里做什么,但我认为你工作代码的下一步是定义一个创建新项目符号的构造函数,并将你的insert调用更改为类似于

table.insert(listOfBullets, newBullet())

最新更新