Random 如何在love2d中随机抽取某样东西

Random 如何在love2d中随机抽取某样东西,random,lua,random-seed,love2d,Random,Lua,Random Seed,Love2d,我目前正在尝试使用love2d创建砖块分解器,但问题是无论何时使用math.random()生成随机砖块,love应用程序都会多次运行,砖块会不断移动 编辑:所以我想在特定的列上生成砖块,但行应该是随机选择的。我的基本想法是做数学运算。random(2)==1,然后使用for循环绘制砖块,但问题是它每秒钟更新/绘制一次,砖块不断闪烁/移动。我只是想随机(只随机选择y坐标,我的x坐标是固定的)在执行代码时画一次,但它一直在闪烁 我面临的问题- 我的代码 for y = 0, VIRTUAL

我目前正在尝试使用love2d创建砖块分解器,但问题是无论何时使用math.random()生成随机砖块,love应用程序都会多次运行,砖块会不断移动

编辑:所以我想在特定的列上生成砖块,但行应该是随机选择的。我的基本想法是做数学运算。random(2)==1,然后使用for循环绘制砖块,但问题是它每秒钟更新/绘制一次,砖块不断闪烁/移动。我只是想随机(只随机选择y坐标,我的x坐标是固定的)在执行代码时画一次,但它一直在闪烁

我面临的问题-

我的代码

    for y = 0, VIRTUAL_HEIGHT- 4, 10 do
        if math.random(2) == 1 then
            love.graphics.rectangle('line', VIRTUAL_WIDTH - 10, y, 5, 10)
        end
    end

在love.load()中生成块位置


好的,在你编辑了这个问题之后,这听起来更像你所说的。只需取出#列循环,并将其设置为在最后一列上创建单元格

love.load()


如果在draw函数中生成随机砖块,那么每次绘制新帧时都会生成它们。所以如果你画60帧每秒,那么你每秒生成60块新砖块。您可能需要在内部生成砖块的条件。你的问题有点让人困惑,我不太清楚你在问什么。@Sam是的,问题是砖块每60年代产生一次。我只想在应用程序启动时生成一次砖块(为不同级别生成随机放置的砖块),希望它对您有所帮助。{在我的代码中,砖块被dt更新。}“所以我改变了,我尝试在load函数和draw函数中初始化一个随机变量,如果值相等,那么它就会绘制砖块”这是一种方法,但我认为你没有显示足够的代码来解决问题的确切原因。@MukeshIngham我更新了帖子,希望我现在能更好地解释我的问题。这会随机选择砖块颜色,但位置不是随机生成的。我尝试删除RGB颜色部分。在此之后,这段代码只是在相同的位置绘制砖块,我尝试了多次,减少了生成的机会。你必须“输入错误”或者你的虚拟宽度、虚拟高度设置错误,因为它在这里工作得很好。非常感谢这项工作。我想画一个特定尺寸的砖块,所以我在love.graphics.rectangle中改变了这个尺寸。这个网站上的人真的很有帮助
--VIRTUAL_WIDTH, VIRTUAL_HEIGHT  = love .graphics .getDimensions( )

block_pos  = {}  --  table to store block positions
rows, columns  = 5, 8  --  you decide how many

chance_of_block  = 75  --  % chance of placing a block

block_width  = math .floor( VIRTUAL_WIDTH /columns )
block_height  = math .floor( VIRTUAL_HEIGHT /rows )

for  row = 0,  rows -1  do
    for  col = 0,  columns -1  do

        if love .math .random() *100 <= chance_of_block then
            local xpos  = col *block_width
            local ypos  = row *block_height

            local red   = love .math .random()
            local green = love .math .random()
            local blue  = love .math .random()

            block_pos[ #block_pos +1 ] = { x = xpos,  y = ypos,  r = red,  g = green,  b = blue }
        end  --  rand

    end  --  #columns
end  --  #rows
for b = 1, #block_pos do
    local block  = block_pos[b]

    love .graphics .setColor( block.r,  block.g,  block.b )
    love .graphics .rectangle( 'fill',  block.x,  block.y,  block_width,  block_height )
end  --  #block_pos
--VIRTUAL_WIDTH, VIRTUAL_HEIGHT  = love .graphics .getDimensions()

block_pos  = {}  --  table to store block positions
rows, columns  = 30, 20  --  you decide how many

chance_of_block  = 33  --  % chance of placing a block

block_width  = math .floor( VIRTUAL_WIDTH /columns )
block_height  = math .floor( VIRTUAL_HEIGHT /rows )

col  = columns -1  --  don't loop through columns, just use final column

for  row = 0,  rows -1  do

    if love .math .random() *100 <= chance_of_block then
        local xpos  = col *block_width
        local ypos  = row *block_height

        block_pos[ #block_pos +1 ] = { x = xpos,  y = ypos }
    end  --  rand

end  --  #columns

r, g, b  = 0.5, 0.5, 0.0
love .graphics .setColor( r, g, b )
for b = 1, #block_pos do
    local block  = block_pos[b]

    love .graphics .rectangle( 'line',  block.x,  block.y,  block_width,  block_height )
end  --  #block_pos