【问题标题】:How do I randomly select an object from a table in Lua?如何从 Lua 中的表中随机选择一个对象?
【发布时间】:2014-11-21 20:44:51
【问题描述】:

我正在尝试添加一个从表目标中随机选择对象的函数。我在某处读到您可以使用targets[math.random(#targets)],但是当我这样做时,它不会只是重置其中一个目标而不管resetTarget() 调用如何,它实际上不会使下一个目标随机。

local targets    -- an array of target objects

local bomb = display.newImage("bomb.png")
local asteroid = display.newImage("asteroid.png")
local balloon = display.newImage("balloon.png")

targets = { bomb, asteroid, balloon }

function createTarget()
    for i = 1, #targets do
        local t = targets[i]
        t.x = WIDTH + 50   -- start slightly off screen to the right
        t.y = math.random(100, HEIGHT - 100)   -- at random altitude
    end
end

function resetTarget(obj)
    createTarget()
end

function detectHits()
        -- Do hit detection for ball against each target
    local HIT_SLOP = BIRD_RADIUS * 2  -- Adjust this to adjust game difficulty
    for i = 1, #targets do
        local t = targets[i]
        if math.abs(t.x - bird.x) <= HIT_SLOP 
                and math.abs(t.y - bird.y) <= HIT_SLOP then
            -- Hit
            isBomb(t)
            isAsteroid(t)
            isBalloon(t)
            resetTarget(t)
            updateScore()
        end
    end
end

【问题讨论】:

    标签: random lua coronasdk lua-table


    【解决方案1】:

    这可行,但您需要对 currentTarget 的前向引用。

    你对随机目标的作用是什么?

    local newTarget = function()
        local rand = math.random(1,#targets)
        currentTarget = target[rand]
        doSomething()
    end
    

    【讨论】:

    • 随机目标以detectHits()为目标,然后调用resetTarget(t),这需要调用createTarget(),它应该创建一个随机目标。
    • 另外,你的代码行 currentTarget = targers[rand] 应该是 currentTarget = targets[rand]。另外,我相信编写lua函数的标准方法如下... function newTarget()...
    • 最好使用#targets 而不是table.maxn(targets)
    • # 在第一个 nil 值处停止,table.maxn 不会。
    • @Jeremy 虽然table.maxn 在 Lua 5.1(这是 Corona 现在使用的版本)中工作,但它在 Lua 5.2 中被删除
    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2019-02-04
    • 2021-03-17
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多