love.timer.sleep

General discussion about LÖVE, Lua, game development, puns, and unicorns.
Post Reply
Findo777
Prole
Posts: 36
Joined: Tue Feb 25, 2014 4:09 am

love.timer.sleep

Post by Findo777 »

function attack(s)
debounce = false
bulletxpos = xpos
bulletypos = ypos
love.graphics.setColor(255,255,255)
love.timer.sleep(s * 1)
Bullet = love.graphics.draw(bullet,bulletxpos,bulletypos - less)
love.timer.sleep(s * 1)
EXP1 = love.graphics.draw(exp1,bulletxpos,bulletypos - less)
love.timer.sleep(s * 1)
EXP2 = love.graphics.draw(exp2,bulletxpos,bulletypos - less)
love.timer.sleep(s * 1)
EXP3 = love.graphics.draw(exp3,bulletxpos,bulletypos - less)
space_pressed = false
debounce = true
end


I call it with s being 1


Problem: instead of animating then waiting 1 second, then animating more, it just waits 4 seconds then zooms through the animation/
It also pauses all the scripts, not just this function
What is the problem? :(


I think you may have to use delta time.
If you know what to do, just please write out my script in that way and tell me which function to put it in,
I have been confused on this for days.
User avatar
verilog
Citizen
Posts: 97
Joined: Thu Nov 03, 2011 3:15 am
Contact:

Re: love.timer.sleep

Post by verilog »

Questions of this nature should be posted in the Support and Development section. Anyway, in what part of the game loop are you calling the attack(s) function? Perhaps inside the draw function? I'm not entirely sure what are you trying to accomplish, but It seems that you need to read how löve works: here's an excellent overview by the great kikito that should give insight of how the framework works and how to set-up a simple game loop.

As for the love.timer.sleep halting the current thread activity, well, it is working as intended. From the wiki: [love.timer.sleep] pauses the current thread for the specified amount of time. If you're running your code in just one thread, it will completely pause the main loop. If you're trying to animate something, an animation is usually rendered one frame per x amount of time (usually [milli]seconds) within the love.draw() function, no need to use love.timer.sleep.

Now, if you are trying to update an image's position (x and y), and generally updating the state of your simulation, that's accomplished inside the love.update(dt) function:

Code: Select all

function love.update(dt)
 bullet.x =  bullet.x + bullet.vx * dt -- horizontal position
 bullet.y =  bullet.y + bullet.vy * dt -- vertical position
end
Next, you just render the image according to the new position (that gets updated every frame):

Code: Select all

function love.draw()
 love.graphics.draw(bullet.img, bullet.x, bullet.y) -- remember to load the resources first! (see love.load())
end
Please, do not forget to use the

Code: Select all

[/b] tags next when referring to code. Even better, how about posting the complete love file?
davisdude
Party member
Posts: 1154
Joined: Sun Apr 28, 2013 3:29 am
Location: North Carolina

Re: love.timer.sleep

Post by davisdude »

I'm not sure how to do it using love.timer.sleep, but I have an animation utility you may use if you'd like. :)
GitHub | MLib - Math and shape intersections library | Walt - Animation library | Brady - Camera library with parallax scrolling | Vim-love-docs - Help files and syntax coloring for Vim
Findo777
Prole
Posts: 36
Joined: Tue Feb 25, 2014 4:09 am

Re: love.timer.sleep

Post by Findo777 »

I am calling the attack() in a draw function because it draws, anyhow,
could you show me how to add...like... .5 a wait before each animation?
I do not need it to move, just to animate, (its an explosion).

Thanks for your help, and sorry for using the wrong forum.
davisdude
Party member
Posts: 1154
Joined: Sun Apr 28, 2013 3:29 am
Location: North Carolina

Re: love.timer.sleep

Post by davisdude »

Using my utility, (linked above), you do this:

Code: Select all

Animation = require( 'Animation' )

function love.load() 
	local BallImage = love.graphics.newImage( 'Animation.png' )
	local BallImageWidth = BallImage:getWidth()
	local BallImageHeight = BallImage:getHeight()
	local BallQuad = {
		love.graphics.newQuad( 0, 0, 82, 70, BallImageWidth, BallImageHeight ), 
		love.graphics.newQuad( 82, 0, 82, 70, BallImageWidth, BallImageHeight ), 
		love.graphics.newQuad( 164, 0, 82, 70, BallImageWidth, BallImageHeight ), 
		love.graphics.newQuad( 0, 82, 82, 70, BallImageWidth, BallImageHeight ), 
		love.graphics.newQuad( 82, 82, 82, 70, BallImageWidth, BallImageHeight ), 
		love.graphics.newQuad( 164, 82, 82, 70, BallImageWidth, BallImageHeight ), 
	}
	Ball = Animation.New( BallImage, {
		Bouncing = {
			Delay = .5, -- This is half a second. Change it to meet your needs. 
			unpack( BallQuad ),
		}
	} )
end

function love.draw() 
	Ball['Bouncing']:Draw()
end

function love.update( dt ) 	
	Ball['Bouncing']:Update( dt )
end
GitHub | MLib - Math and shape intersections library | Walt - Animation library | Brady - Camera library with parallax scrolling | Vim-love-docs - Help files and syntax coloring for Vim
Findo777
Prole
Posts: 36
Joined: Tue Feb 25, 2014 4:09 am

Re: love.timer.sleep

Post by Findo777 »

uh..... I don't see any of my explosion variables there
davisdude
Party member
Posts: 1154
Joined: Sun Apr 28, 2013 3:29 am
Location: North Carolina

Re: love.timer.sleep

Post by davisdude »

Code: Select all

Animation = require 'Animation'

bullet = love.graphics.newImage( 'bullet' ) -- Other picture files, etc. 
-- Other pictures and other variables. 
BulletShouldAnimate = false

function love.load()
	Bullet = Animation.New{
		exp1, 
		exp2, 
		exp3, 
		Delay = .5, -- Whatever the delay between pictures is. 
	}
end

-- Other code

function attack(s)
	debounce = false
	bulletxpos = xpos
	bulletypos = ypos
	love.graphics.setColor(255,255,255)
	love.timer.sleep(s * 1)
	Bullet = love.graphics.draw(bullet,bulletxpos,bulletypos - less)
	love.timer.sleep(s * 1)
	EXP1 = love.graphics.draw(exp1,bulletxpos,bulletypos - less)
	love.timer.sleep(s * 1)
	EXP2 = love.graphics.draw(exp2,bulletxpos,bulletypos - less)
	love.timer.sleep(s * 1)
	EXP3 = love.graphics.draw(exp3,bulletxpos,bulletypos - less)
	space_pressed = false
	debounce = true
	
	expShouldAnimate = true
end
Two things:
1. This would be a lot easier if you gave us the whole code.
2. No offense, but you could have actually tried to do it yourself. It's a good way to learn. :)
GitHub | MLib - Math and shape intersections library | Walt - Animation library | Brady - Camera library with parallax scrolling | Vim-love-docs - Help files and syntax coloring for Vim
User avatar
Jeeper
Party member
Posts: 611
Joined: Tue Mar 12, 2013 7:11 pm
Contact:

Re: love.timer.sleep

Post by Jeeper »

I belive he missunderstands what love.timer.sleep is used for... Someone should add a huge red text on the wiki saying that it is NOT used as a timer.
Findo777
Prole
Posts: 36
Joined: Tue Feb 25, 2014 4:09 am

Re: love.timer.sleep

Post by Findo777 »

Jeeper wrote:I belive he missunderstands what love.timer.sleep is used for... Someone should add a huge red text on the wiki saying that it is NOT used as a timer.

Hey uh, I have another post called "Delay on Loop" and I could reallly use some help on that.. thanks
I realized .sleep stops the whole thing, so I'm going to stick with dt
Post Reply

Who is online

Users browsing this forum: Google [Bot] and 69 guests