我在Love2D中创建了一个简单的2D场景,其中一个正方形直到达到某个点然后停止。问题是,每次没有用户输入或修改代码时,方块会在略微不同的点停止。
这是我的lua
function love.load()
playY = 0
playX = 10
grav = 200
speed = 100
end
function love.draw()
--floor
love.graphics.setColor(0,255,0,255)
love.graphics.rectangle("fill", 0,465,800,150)
--player
love.graphics.setColor(255,255,0,255)
love.graphics.rectangle("fill", playX,playY,10,10)
--debug
love.graphics.print(playY, 100, 5)
love.graphics.print(playX, 100, 15)
end
function love.update(dt)
if playY < 454 then
playY = playY + grav * dt
end
if playY == 456 then
if love.keybord.isDown("right") then
playX = playX + speed * dt
end
end
end
变量playY显示玩家的高度,但每次都会以不同的值停止。
为什么会这样?
答案 0 :(得分:2)
我没有使用过love2d所以我可能完全错了,但根据我对各种GUI的经验:我的猜测是Love2d在空闲事件循环中处理这些调用,所以你不能保证时间步长是每次运行程序时,它都是恒定的或相同的,这将导致每次的位置顺序不同(打印它们,你会看到)。除非love2d具有一个具有相当好的准确性的计时器功能,无论GUI中发生了什么(会令人惊讶),你必须满足于love2d支持的准确性(0.5%,不差)。这意味着您无法使用if something == 456
之类的条件,因为您可能会错过它,更好地使用范围。
答案 1 :(得分:1)
如前所述,dt仅与游戏刷新率一致。该值乘以速度以提供流畅的游戏玩法。
如果这是一名玩家而你希望y停在456,你总是可以写
if playY > 456 then
playY = 456
end
你几乎可以保证playY每次都会停在456,因为它会让玩家重新回到那个位置。