Problem to separate lua files

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
Post Reply
joaovvr
Prole
Posts: 4
Joined: Tue Jun 24, 2014 8:09 pm

Problem to separate lua files

Post by joaovvr »

Hey guys,
I've already finished my game and it was running normal(without any problems), but it's all in main.lua file and i decided to separate in other files like enemy.lua, player.lua,...
I was doing this when I stumbled upon a problem I can not describe, but I'll post the code of the game here so you know better what it is.

I really hope you guys can help me, because once it works out and files get separated and the game running without any problem, finally I'll be able to add more things and finish the game :rofl:

I apologize for the source code be in portuguese :death:
my first game.love
(644.14 KiB) Downloaded 108 times
User avatar
player_258
Prole
Posts: 9
Joined: Thu Jun 20, 2013 3:37 pm

Re: Problem to separate lua files

Post by player_258 »

hi !

browsing through your code the first problem i found was this:

Code: Select all

nave = {}

-- Configurações da Nave --
function novaNave(x, y)
  nave = {}
  nave.x = x or 0
  nave.y = y or 0
  --more code
end

function nave.load()
  -- Cria a nave --
  nave = novaNave(largura / 2 - 32, altura - 96)
end

function nave.update(dt)
 --code
end

function nave.draw()
 --code
end

in the first line you create an empty table called "nave"
in the nave table you create the update and draw callbacks
nave.update
nave.draw

when love.load is ran, it calls nave.load which then calls novaNave(x, y)
novaNave(x, y) overwrites your current "nave" table with an empty one, then
you set values for position, image, size, etc

because of this, nave.update, nave.draw dont exist anymore because
you overwrote them.

what i think you meant to do was this

Code: Select all

nave = {}

-- Configurações da Nave --
function novaNave(x, y)
  local nave = {} --create a new local table, not overwriting the global one
  nave.x = x or 0
  nave.y = y or 0
  --stuff
  return nave --return it to whoever called it
end

function nave.load()
  -- Cria a nave --
  naveObject = novaNave(largura / 2 - 32, altura - 96) --a new naveObject
end
notice that i changed "nave" to "naveObject" because otherwise i would be overwriting
nave (the one with the update and draw callbacks) again.

otherwise you could just use this dirty fix

Code: Select all

nave = {}

-- Configurações da Nave --
function novaNave(x, y)
  nave.x = x or 0
  nave.y = y or 0
  --more code
end

function nave.load()
  -- Cria a nave --
  novaNave(largura / 2 - 32, altura - 96)
end
this would add position, image, etc variables to your current nave table
that would result in a huge nave table with update and draw callbacks, position, image, size, etc variables
not that is a bad thing performance wise, but still

that should fix the first problem that appears when you click the start button. :awesome:
sorry if i make any english mistake, not my native language
Post Reply

Who is online

Users browsing this forum: Bing [Bot], Semrush [Bot] and 1 guest