如何在 love2d 中随机绘制物体

我正在尝试使用 love2d 创建打砖块游戏,但问题是每当我使用 **math.random()**来生成随机砖块时,love2d 应用程序会多次运行它,导致砖块不断移动。

编辑:所以我想在特定的列中生成砖块,但行应该是随机选择的。我的基本想法是,如果 math.random(2) == 1 则使用 for 循环来绘制砖块,但问题是它每一秒都得更新/绘制一次,而砖块不断闪烁/移动。我只想随机(仅随机选择 y 坐标,我的 x 坐标是固定的)在执行代码时绘制它一次,但它总是在闪烁。

我面临的问题- https://youtu.be/AJB5vH7yfHc

我的代码

    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
点赞
用户3342050
用户3342050

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

--VIRTUAL_WIDTH, VIRTUAL_HEIGHT  = love .graphics .getDimensions( )

block_pos  = {}  --  存储方块位置的表格
rows, columns  = 5, 8  --  你可以决定行与列的数量,从0开始

chance_of_block  = 75  --  放置方块的概率

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

(编辑:注意行和列应该从0索引开始,这样它们才能在屏幕上对齐)


然后使用love.draw()绘制它们

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
2020-10-17 00:53:05
用户3342050
用户3342050

好的,编辑了一下问题,这听起来更符合你的意思。只需去掉那个 #column循环,并将其设置为在最后一列创建单元格。

love.load()

--VIRTUAL_WIDTH, VIRTUAL_HEIGHT  = love .graphics .getDimensions()

block_pos  = {}  --  存储块位置的表
rows, columns  = 30, 20  --  你决定有多少

chance_of_block  = 33  --  放置块的几率%

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

col  = columns -1  --  不要循环遍历列,只需使用最后一列

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 )

love.draw()

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
2020-10-17 07:14:17