【问题标题】:How do you run a draw function only once on Love2d你如何在 Love2d 上只运行一次绘图功能
【发布时间】:2016-05-30 14:30:09
【问题描述】:

我目前正在尝试创建Love2d太空游戏,我正在尝试为运气不佳的星星创建随机生成,我创建星星的功能是:

function space.drawStars()

    for i = 1, space.starNum do
        love.graphics.setColor(255, 255, 255)
        space.starSize = love.math.random(1, 10)
        space.starXPosition = love.math.random(1, 1200)
        space.starYPosition = love.math.random(1, 750)
        love.graphics.rectangle("fill", space.starXPosition,space.starYPosition, space.starSize, space.starSize)
    end

end

我目前使用这个函数遇到的问题是,当它运行时,Lua 似乎多次运行该函数并且星星在不断变化。我已经尝试将此函数的内容放在我的主类的 load() 函数中,但由于它需要在我的绘图函数中,它不会生成星星。

请有人帮助我如何让这个函数只运行一次,这样 Lua 只绘制一组星星,而不是不断地创造新的星星并摧毁原来的星星。

谢谢,

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    创建一次开始。像这样的东西(未经测试):

    local stars = nil
    
    local function createStars()
        if stars==nil then
            stars={}
            for i = 1, space.starNum do
                stars[i] = {
                    Size = love.math.random(1, 10),
                    XPosition = love.math.random(1, 1200),
                    YPosition = love.math.random(1, 750),
                }
            end
        end
    end
    
    function space.drawStars()
        createStars()
        for _, star in ipairs(stars) do
            love.graphics.setColor(255, 255, 255)
            love.graphics.rectangle("fill", star.XPosition, star.YPosition, star.Size, star.Size)
        end
    end
    

    【讨论】:

    • 感谢您的回答,我已经实现了您的代码,但是当运行它时:love.graphics.rectangle("fill", star[i].XPosition, star[i].YPosition, star [i].Size, star[i].Size) 出现“试图索引一个零值”的错误我如何纠正这个我不知道,因为我看不到它在哪里索引一个零值
    • @ReltonTolpo:我修复了代码中的一个错误。立即尝试。
    • @NicolBolas 我已经编辑了我的代码,但我仍然遇到错误,这次错误是:“尝试索引本地'star'(一个数字值)”thsi 错误在同一行和上一个一样
    • 编辑:我通过在语句行添加:“for i, star in ipairs stars do”解决了这个问题
    猜你喜欢
    • 1970-01-01
    • 2021-02-20
    • 2021-01-31
    • 2019-11-12
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多