如何让子弹出现在屏幕上(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 中的空表?