I'm just learning lua and love2d and I am trying to make an example game to get familiar. I'm following goature's tutorial on youtube and am using his states system to navigate the game. I finished writing the example code for the menu and decided I would like to be able to get back to the menu from the game. The problem is that the game will not load the game state a second time and instead gives me a gray screen. This should be the relavant code.
From the root file main.lua
function clearLoveCallbacks()
love.draw = nil
love.joystickpressed = nil
love.joystickreleased = nil
love.keypressed = nil
love.keyrelease = nil
love.load = nil
love.mousepressed = nil
love.mousereleased = nil
love.update = nil
end
states = {}
function loadState(name)
states = {}
clearLoveCallbacks()
local path = "states/" .. name
require(path .. "/main")
load()
end
function load()
end
function love.load()
loadState("menu")
end
From the menu main.lua
function load()
love.graphics.setBackgroundColor(190, 190, 190, 255)
imgPlay = love.graphics.newImage("Textures/start.png")
imgPlayOn = love.graphics.newImage("Textures/start_on.png")
imgexit = love.graphics.newImage("Textures/exit.png")
imgexitOn = love.graphics.newImage("Textures/exit_on.png")
buttons = {
{imgOff = imgPlay, imgOn = imgPlayOn, x = 400, y = 300 - 64, w = 256, h = 64, action = "play"},
{imgOff = imgexit, imgOn = imgexitOn, x = 400, y = 300 + 64, w = 256, h = 64, action ="exit"}
}
end
function love.mousepressed(x, y, button)
if button == 1 then
for k,v in pairs(buttons) do
local ins = insideBox(x, y, v.x - (v.w/2), v.y - (v.h/2), v.w, v.h) -- must use v. for the rest of the arguments except the first 2 because that x and y defined in arguments of the function
if ins then
if v.action == "play" then
loadState("New_Game") -- loads new game for some reason if i load the menu state from game it won't load the game a secound time
elseif v.action == "exit" then
love.event.quit() -- love2d function to quit
end
end
end
end
end
And from the New_Game main.lua
function load()
require("States/New_Game/entities")
love.graphics.setBackgroundColor(255,255,255,255)
ents.startup()
--local newEnt= ents.Create("new_ent", 128, 128)
ents.Create("enemy_base", -math.random(128, 256), 128)
end
function love.keypressed(key, unicode)
if love.keyboard.isDown("escape") then
loadState("Menu")
end
end