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

我正在制作一个2D游戏,让玩家在太空中闪避子弹。我尝试在屏幕顶部的随机位置生成子弹,并让它们向下掉落,以便玩家可以闪避它们。 以下是我目前的代码:

function love.load()
计时器 = 0

背景 = love.graphics.newImage("space_background.png")

子弹 = {
    x = 300,
    y = 0,
    image = love.graphics.newImage("bullet.png"),
    width = love.graphics.getWidth(image),
    height = love.graphics.getHeight(image),
    speed = 10  }

子弹列表 = {}

汽车 = {
    x = 100,
    y = 100,
    size = 5,
    angle = 0,
    image = love.graphics.newImage("classic_car.png")
}
end

function love.update(dt)
    计时器 = 计时器 + dt

    if love.keyboard.isDown("left") then
        汽车.x = 汽车.x - 200 * dt
    end

    if love.keyboard.isDown("right") then
        汽车.x = 汽车.x + 200 * dt
    end

    if love.keyboard.isDown("up") then
        汽车.y = 汽车.y - 200 * dt
    end

    if love.keyboard.isDown("down") then
        汽车.y = 汽车.y + 200 * dt
    end

    汽车.angle = 汽车.angle + 1 * dt

    if love.keyboard.isDown("r") then
        计时器 = 0
        汽车.x = 100
        汽车.y = 100
        汽车.angle = 0
    end

    table.insert(子弹列表, math.random(1, 799), 子弹.y)

    for i,v in ipairs(子弹列表) do
        v:update(dt)
    end
end

function love.draw()
    love.graphics.draw(背景, 0, 0)
    love.graphics.print({"得分:" .. math.floor(计时器), white}, 20, 550, 0, 2)
    love.graphics.draw(汽车.image, 汽车.x, 汽车.y,
        汽车.angle, 1, 1, 汽车.image:getWidth()/2, 汽车.image:getHeight()/2)
    for i,v in pairs(子弹列表) do
        love.graphics.print(v, 100, 100)
    end
end

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

错误

main.lua:77: attempt to index local 'v' (a number value)

Traceback

main.lua:77: in function 'update'

\ [C ]: in function 'xpcall'

请问有人能帮我吗?

原文链接 https://stackoverflow.com/questions/70138697

点赞
stackoverflow用户3574628
stackoverflow用户3574628

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

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

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

我不知道您想要做什么,但我认为您迈向可运行代码的下一步是定义一个构造函数来创建新的子弹,并将您的 insert 调用更改为类似以下的代码:

table.insert(listOfBullets, newBullet())
2021-11-27 21:29:18