为什么我的lua脚本每次运行时都会得到不同的值?

时间:2014-05-10 08:36:39

标签: lua love2d

我在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显示玩家的高度,但每次都会以不同的值停止。

enter image description here enter image description here enter image description here

为什么会这样?

2 个答案:

答案 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,因为它会让玩家重新回到那个位置。