【问题标题】:Generate a random number, but every random seconds in LUA/Love2d生成一个随机数,但在 LUA/Love2d 中每隔随机秒
【发布时间】:2014-08-01 23:49:42
【问题描述】:

我正在尝试每隔随机秒生成一个随机数(最终目的是不时随机更改块的颜色)。

为此,我正在使用 Hump 库 (http://vrld.github.io/hump/#hump.timer)。

这是我目前的代码,我是 LUA/Love2d 编码的真正初学者。 它生成一个数字,并每秒钟显示一次,而不是每秒钟显示一次……(但也会生成随机秒钟)。 我真的不明白为什么它不起作用。

local Timer = require "timer"

function love.load()
    text="t"
    number2=1
end

local f = function()
math.randomseed(os.time())
    number = math.random( 2,10 )
    text="in " .. number2 .. " seconds (random)...  random number =" .. number
    return true
end

function love.update(dt)

    number2 = math.random( 2,4 ) 
    Timer.update(number2)
    Timer.addPeriodic(number2, f)
end

function love.draw()
    love.graphics.print( text, 330, 300 )
end

感谢您的帮助!

【问题讨论】:

  • 在您的程序中只调用一次math.randomseed(os.time())
  • 我的错,我删除了 love.update 中的那个,但问题仍然存在。
  • 在更新后的代码中,你在love.update中仍然调用了f,这意味着math.randomseed仍然被多次调用。
  • 好的,我现在明白了。我还需要在函数中移动'number2',而不是在'love.update'中调用'f'......但是我遇到了每0.1秒打印一次文本的问题,所以我再次更改了代码并出现了与 Henri Ilgen 下面的建议类似!

标签: random lua love2d


【解决方案1】:

虽然我不熟悉 Hump,但您似乎可以轻松地使用计时器的 add 函数来达到您的目的,因为它会在 x 秒后恰好调用一次该函数,从而允许您以不同的延迟安排下一次执行:

local timer = require("timer")
local text = ""

local function tick()
  -- Generate random number
  local newNumber = math.random(2, 10)
  local newDelay  = math.random(2,  4)
  text = ("Current number: %d, next in %d seconds!"):format(newNumber, newDelay)

  -- Actually schedule the next call
  timer.add(newDelay, tick)
end


function love.load()
  tick()
end

function love.update(dt)
  timer.update(dt)
end

function love.draw()
  love.graphics.print(text, 330, 300)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多