Как вы запускаете функцию рисования только один раз на Love2d

В настоящее время я пытаюсь создать космическую игру 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 рисовал только один набор звезд и не создавал постоянно новые звезды и уничтожал исходные.

Спасибо,


person ReltonTolpo    schedule 18.02.2016    source источник


Ответы (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
person lhf    schedule 18.02.2016
comment
Спасибо за ответ, и я реализовал ваш код, но когда запустил его, появилась строка: love.graphics.rectangle(fill, star[i].XPosition, star[i].YPosition, star[i].Size, star[i] .Size) имеет ошибку при попытке индексировать нулевое значение, как мне это исправить, я не знаю, так как не вижу, где он индексирует нулевое значение. - person ReltonTolpo; 18.02.2016
comment
@ReltonTolpo: я исправил ошибку в коде. Попробуй это сейчас. - person Nicol Bolas; 18.02.2016
comment
@NicolBolas Я отредактировал свой код, но я все еще получаю ошибки, на этот раз ошибка: попытка индексировать локальную «звезду» (числовое значение), эта ошибка находится в той же строке, что и предыдущая - person ReltonTolpo; 18.02.2016
comment
РЕДАКТИРОВАТЬ: я решил проблему, добавив: для i звезда в звездах ipairs делает в строке оператора - person ReltonTolpo; 18.02.2016