微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在love2d中随机绘制一些东西

如何解决如何在love2d中随机绘制一些东西

我目前正在尝试使用love2d创建碎砖机,但问题是每当使用 math.random()生成随机砖时,love应用程序会多次运行它,并且砖块会不断移动

编辑:所以我想在特定的列上生成积木,但是应该随机选择行。我的基本想法是执行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

解决方法

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

--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

(编辑:已实现的行和列应从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
,

好的,在您编辑问题之后,这听起来更像您在说什么。只需取出该#column循环,并将其设置为在最后一列上创建单元格即可。

love.load()

--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,b )

love.draw()

for b = 1,#block_pos do
    local block  = block_pos[b]

    love .graphics .rectangle( 'line',block_height )
end  --  #block_pos

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。