Page 1 of 2
Nothing happens when I call function in other script/file?
Posted: Thu Feb 23, 2012 9:00 pm
by ziodice
Uh...I hope I'm doing this right...so, I'm trying to make this ball/physics game where you control a ball, and you need to get to a certain spot on the level, and you can reverse gravity. So, I made a basic "level" where you can just move the ball around, and then I tried to make it so when you press "enter" it goes to the next level, which is located in a different lua script/file whatever. So, I wrote this code in main.lua, in function love.load.
And in lev1.lua, I have code that just clears everything to background color, and then draws the ball and the ground back. So back in main.lua, I told it in function love.update
because that's the name of the first function in lev1.lua...so, when I go into my terminal and run it, it runs fine, but I press enter and nothing happens. Everything else is working. Tell me if you need the full code, I can like, pastebin it or something I guess. Sorry if this is incomprehensible. Also note that the things I wrote are not all of the code in the functions.
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 9:17 pm
by Ellohir
Are you checking well that when you push "enter" something happens? Try debugging your code adding some prints on the caller function and on the load function. Without the code it's impossible to help you more.
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 9:18 pm
by ziodice
Debugging with console? I'm sadly using ubuntu, and I read that console is windows only.
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 9:44 pm
by Nixola
Nope, you only have to run your file via terminal, by giving the command 'love path/of/your/floder/or/love/file'
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 9:54 pm
by ziodice
Alright, so, I got the console to work (Thanks!) BUT, when I press enter, it does NOT produce the text I need it to. So, should I copy paste my entire "main.lua" and "lev1.lua"?
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 9:56 pm
by Nixola
You can pack them in a .love file (select both them, right click one of them, click on compress, create a .zip file, rename it into filename.love instead of filename.zip) and then upload it here... But I think copy/paste is better, unless you have a lot of files/code or images, music or other files
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 10:00 pm
by ziodice
lev1.lua
Code: Select all
local function lev1()
print ("Working")
levdraw()
end
function levdraw()
love.graphics.clear()
love.graphics.setColor(255, 0, 0)
love.graphics.circle("fill", objects.ball.body:getX(), objects.ball.body:getY())
love.graphics.polygon("fill", objects.ground.shape:getPoints())
end
main.lua
Code: Select all
function love.load()
require 'lev1.lua'
world = love.physics.newWorld(0, 0, 650, 650)
world:setGravity(0, 700)
world:setMeter(64)
objects = {}
objects.ground = {}
objects.ground.body = love.physics.newBody(world, 650/2, 625, 0, 0)
objects.ground.shape = love.physics.newRectangleShape(objects.ground.body, 0, 0, 650, 50, 0)
objects.ball = {}
objects.ball.body = love.physics.newBody(world, 650/2, 650/2, 15, 0)
objects.ball.shape = love.physics.newCircleShape(objects.ball.body, 0, 0, 20)
objects.ceiling = {}
objects.ceiling.body = love.physics.newBody(world, 650/2, 0, 0, 0)
objects.ceiling.shape = love.physics.newRectangleShape(objects.ceiling.body, 0, 0, 650, 50, 0)
love.graphics.setBackgroundColor(104, 136, 248)
love.graphics.setMode(650, 650, false, true, 0)
end
function love.update(dt)
world:update(dt)
xBall = objects.ball.body:getX()
yBall = objects.ball.body:getY()
if xBall >= 650 then
objects.ball.body:setX(0)
end
if xBall < 0 then
objects.ball.body:setX(650)
end
if yBall < 0 then
objects.ball.body:setY(650/2)
world:setGravity(0, 700)
objects.ball.body:applyForce(0, 0)
end
if love.keyboard.isDown("up") then
world:setGravity(0, -700)
objects.ball.body:applyForce(0, -100)
elseif love.keyboard.isDown("down") then
world:setGravity(0, 700)
elseif love.keyboard.isDown("right") then
objects.ball.body:applyForce(400, 0)
elseif love.keyboard.isDown("left") then
objects.ball.body:applyForce(-400, 0)
elseif love.keyboard.isDown("r") then
objects.ball.body:setY(650/2)
objects.ball.body:setX(650/2)
world:setGravity(0, 700)
elseif love.keyboard.isDown("enter") then
print ("Working")
lev1()
end
end
function love.draw()
love.graphics.setColor(0, 0, 0)
love.graphics.print("Press 'up' to reverse gravity", 0, 30)
love.graphics.print("Press 'down' to return gravity to it's original state", 0, 50)
love.graphics.print("Press 'left' or 'right' to move", 0, 70)
love.graphics.print("Please note that gravity changes do not apply until you move", 0, 90)
love.graphics.setColor(72, 160, 14)
love.graphics.polygon("fill", objects.ground.shape:getPoints())
love.graphics.setColor(0, 0, 0)
love.graphics.polygon("fill", objects.ceiling.shape:getPoints())
love.graphics.setColor(193, 47, 14)
love.graphics.circle("fill", objects.ball.body:getX(), objects.ball.body:getY(), objects.ball.shape:getRadius(), 20)
end
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 10:07 pm
by Nixola
1) Key has to be 'return', according to
the wiki
2) If you use love.keyboard.isDown(), everything in the 'if' gets run every frame, if the 'return' key is down, if you want it to be run only once, when the key is pressed, you have to define another callback, outside of love.update/draw/load,
love.keypressed, like so:
Code: Select all
function love.keypressed(key, unicode --[[not needed now]])
if key == 'return' then
--do whatever you want to do
end
end
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 10:11 pm
by ziodice
Now I get an error upon hitting "enter" (Or "return", I guess...). "Attempt to call global "lev1" (a nil value)
Re: Nothing happens when I call function in other script/fil
Posted: Thu Feb 23, 2012 10:15 pm
by Nixola
Ehm... I forgot 3)
'
3) the lev1 function is local, that means that only other functions inside 'lev1.lua' can run it, you have to delete that 'local' before its name to make it work