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

Posted

技术标签:

【中文标题】如何让子弹出现在屏幕上(Lua、Love2D)【英文标题】:How to make bullets appear on the screen (Lua, Love2D) 【发布时间】:2022-01-05 08:36:03 【问题描述】:

我正在制作一个关于在太空中躲避子弹的 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.lua:77: 尝试索引本地 'v'(一个数值)

追溯

main.lua:77: 在函数“更新”中

[C]:在函数'xpcall'中

谁能帮帮我?

【问题讨论】:

【参考方案1】:

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

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

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

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

table.insert(listOfBullets, newBullet())

【讨论】:

以上是关于如何让子弹出现在屏幕上(Lua、Love2D)的主要内容,如果未能解决你的问题,请参考以下文章

for 循环是不是遍历 Lua 和 Love2d 中的空表?

如何在 Lua (Love2D) 的库中定义一个类?

在love2d中以随机时间间隔调用lua函数

使用 Lua 在 Love2D 中需要一个共享对象 (.so) 文件

使用lua语言制作贪吃蛇游戏(love2d)蛇对象的设计

lua (love2d): 函数应该没有结束