Particle system for newbies(rain,snow,smoke,etc)
Author |
Message |
Homer_simpson
|
Posted: Sat Jan 03, 2009 6:01 pm Post subject: Particle system for newbies(rain,snow,smoke,etc) |
|
|
i've seen that a lot of you like to make animations with turing, so here's a little tutorial on how you can incorporate a particle system into your animations. you could use it to make rain, snow,smoke,etc
here's the steps to creating a particle system
set a type for particles with its required attributes in this example we're going to setup a rain system meaning every drop of rain will be a particle.
every drop of rain has a few attributes : x position, y position, falling speed
so we declare:
type Particle_Type :
record
x, y,speed : real
end record
now we need a lot of these particles so we declare an array of this type
so we declare an array of a 100 particles:
var Particles : array 1 .. 100 of Particle_Type
now we have to give these particles their initial values :
for i : 1 .. 100
Particles (i).x := Rand.Int (0, maxx) %randmize the x position of rain droplets from 0 to maxx
Particles (i).y := Rand.Int (0, maxy) %randmize the y position
Particles (i).speed := Rand.Int (3, 5) %randmize the speed of drops rain
end for
after we've setup all of our particles it's time to move them and draw them
so we start our animation loop like so:
loop
move particles
draw particles
check to see if the particles need to be renewed
clear the screen
end loop
in code:
loop %main animation loop
cls %clear the screen
for i : 1 .. MaxParticles %inside this loop we go through all the particles 1 by 1
Particles (i).y -= Particles (i).speed %move down the drop of rain
if Particles (i).y <= 0 then %if drop of rain has fallen to the ground, reset it's values
Particles (i).y := maxy %set it's y location back to the top again
Particles (i).x := Rand.Int (0, maxx) %randmize the x position of rain droplets from 0 to maxx
Particles (i).speed := Rand.Int (3, 5) %randmize the speed of drops rain
end if
Draw.ThickLine (round (Particles (i).x), round (Particles (i).y), round (Particles (i).x), round (Particles (i).y + (Particles (i).speed)), 3, 11) %draw the drop of rain
end for
View.Update%update the screen
end loop
put it all together and you get:
Quote: View.Set ("offscreenonly")
colorback (blue)
const MaxParticles := 500
const startfirex := 100
const startfirey := 100
const smokelength := 300
type Particle_Type : %declare type
record
x, y, speed : real
end record
var Particles : array 1 .. MaxParticles of Particle_Type %declare array of type that you've made
for i : 1 .. MaxParticles % give particles their initial x,y value
Particles (i).x := Rand.Int (0, maxx) %randmize the x position
Particles (i).y := Rand.Int (0, maxy) %randmize the y position
Particles (i).speed := Rand.Int (3, 5) %randmize the y position
end for
loop %main animation loop
cls %clear the screen
for i : 1 .. MaxParticles %inside this loop we go through all the particles 1 by 1
Particles (i).y -= Particles (i).speed %move down the drop of rain
if Particles (i).y <= 0 then %if drop of rain has fallen to the ground, reset it's values
Particles (i).y := maxy %set it's y location back to the top again
Particles (i).x := Rand.Int (0, maxx) %randmize the x position of rain droplets from 0 to maxx
Particles (i).speed := Rand.Int (3, 5) %randmize the speed of drops rain
end if
Draw.ThickLine (round (Particles (i).x), round (Particles (i).y), round (Particles (i).x), round (Particles (i).y + (Particles (i).speed)), 3, 11) %draw the drop of rain
end for
View.Update
end loop
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
Homer_simpson
|
Posted: Sat Jan 03, 2009 6:28 pm Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
here's a slight variation for motivation:
Quote: View.Set ("offscreenonly")
colorback (blue)
const MaxParticles := 1500
const startfirex := 100
const startfirey := 100
const smokelength := 300
type Particle_Type : %declare type
record
x, y, vx, vy : real
end record
var Particles : array 1 .. MaxParticles of Particle_Type %declare array of type that you've made
proc renewp (i : int, x, y, vx, vy : real)
Particles (i).x := x %randmize the x position
Particles (i).y := y %randmize the y position
Particles (i).vx := vx %randmize the y position
Particles (i).vy := vy %randmize the y position
end renewp
for i : 1 .. MaxParticles % give particles their initial x,y value
renewp (i, 400, Rand.Int (1, 300), Rand.Int (1, 50) / 10, Rand.Int (1, 50) / 10)
end for
loop %main animation loop
cls %clear the screen
for i : 1 .. MaxParticles %inside this loop we go through all the particles 1 by 1
Particles (i).x -= Particles (i).vx %move down the drop of rain
Particles (i).y += Particles (i).vy %move down the drop of rain
Particles (i).vy -= .9
if Particles (i).y <= 0 then %if drop of rain has fallen to the ground, reset it's values
renewp (i, 400, 300, Rand.Int (1, 50) / 10, Rand.Int (1, 50) / 10)
end if
% drawfilloval(round (Particles (i).x), round (Particles (i).y), round ( (Particles (i).vx)), round ( (Particles (i).vy)), 11) %draw the drop of rain
%drawdot(round (Particles (i).x), round (Particles (i).y), 11) %draw the drop of rain
%Draw.ThickLine (round (Particles (i).x), round (Particles (i).y), round (Particles (i).x-Particles (i).vx), round (Particles (i).y+Particles (i).vy), 2,abs(round (Particles (i).vy+90))) %draw the drop of rain
drawline (round (Particles (i).x), round (Particles (i).y), round (Particles (i).x - Particles (i).vx), round (Particles (i).y + Particles (i).vy), (round (Particles (i).vy + 60)))
%draw the drop of rain
end for
View.Update
end loop
|
|
|
|
|
|
revangrey
|
Posted: Sat Jan 03, 2009 10:10 pm Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
umm maybe a mod might want to fix the:
const startfirex := 100
const startfirey := 100
I think you left that in from the smoke program you wrote...
speaking of that how would you move the smoke to a different area of the screen?
or should I have posted this in the Turing Help section?
|
|
|
|
|
|
Insectoid
|
Posted: Sat Jan 03, 2009 10:25 pm Post subject: RE:Particle system for newbies(rain,snow,smoke,etc) |
|
|
To make snow move on the horizontal axis as well, you can add in (in code not following yours)
[code]
particle.x += Rand.Int (-1, 1)
[code]
This will make the snow look more like snow.
To turn this into smoke, just make the snow move up, make the particles smaller and limit the X to the chimney/burning tree/whatever. Hmm...I'm going to have to try that, might be fun
Great job. Loved the rainbow waterfall!
EDIT: Just made some smoke. Just modified homer's code.
Turing: |
View.Set ("offscreenonly")
colorback (blue)
const MaxParticles := 1000
const startfirex := 100
const startfirey := 100
const smokelength := 300
var smokeX := 50
var smokeWidth := 10
var smokeVel := 1
type Particle_Type : %declare type
record
x, y, speed : real
end record
var Particles : array 1 .. MaxParticles of Particle_Type %declare array of type that you've made
for i : 1 .. MaxParticles % give particles their initial x,y value
Particles (i ).x := Rand.Int (smokeX, smokeX + smokeWidth ) %randmize the x position
Particles (i ).y := Rand.Int (0, maxy) %randmize the y position
Particles (i ).speed := 3 %randmize the y position
end for
loop %main animation loop
for x : 1 .. MaxParticles
smokeX + = smokeVel
cls %clear the screen
for i : 1 .. MaxParticles %inside this loop we go through all the particles 1 by 1
Particles (i ).y + = Particles (i ).speed %move down the drop of rain
if Particles (i ).y >= maxy then %if drop of rain has fallen to the ground, reset it's values
Particles (i ).y := 0 %set it's y location back to the top again
Particles (i ).x := Rand.Int (smokeX, smokeX + smokeWidth ) %randmize the x position of rain droplets from 0 to maxx
Particles (i ).speed := 3 %randmize the speed of drops rain
end if
Particles (i ).x + = Rand.Int (- 1, 1)
Draw.Dot (round (Particles (i ).x ), round (Particles (i ).y ), grey) %draw the drop of rain
end for
View.Update
if smokeX > smokeWidth or smokeX < 50 then
smokeVel * = - 1
end if
delay (10)
View.Update
end for
end loop
|
|
|
|
|
|
|
Homer_simpson
|
Posted: Sun Jan 04, 2009 1:14 am Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
i'm glad u found the code useful
|
|
|
|
|
|
Nick
|
Posted: Wed Jan 07, 2009 1:00 am Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
I did a bit of work I hope you like it .
Description: |
|
Download |
Filename: |
Particle.zip |
Filesize: |
1.78 KB |
Downloaded: |
767 Time(s) |
|
|
|
|
|
|
Homer_simpson
|
Posted: Wed Jan 07, 2009 9:23 pm Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
that's the proper way of doing it, with imported classes and procedures... nice +bits
|
|
|
|
|
|
saltpro15
|
Posted: Fri Jan 16, 2009 9:16 pm Post subject: RE:Particle system for newbies(rain,snow,smoke,etc) |
|
|
Thanks a lot for the code Homer!! I've spent a very long time trying to figure out how to make a good particle engine
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
iproballer
|
Posted: Sun Jun 06, 2010 1:13 pm Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
How can you make it go behind something, other objects so that its raining in the background?
|
|
|
|
|
|
Cezna
|
Posted: Sun Jun 06, 2010 1:32 pm Post subject: RE:Particle system for newbies(rain,snow,smoke,etc) |
|
|
@ iproballer
You would just draw the particles after you draw whatever is in the foreground.
You might also want to make the colour of the particles darker (assuming the background is black, but they would be lighter if it was white), and the particles size smaller.
For future reference, try not to post to such old topics.
If you have a question, create a new topic.
Source: The Rules, necroposting section
|
|
|
|
|
|
montesser
|
Posted: Wed Nov 10, 2010 2:50 pm Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
Hey, i was wondering if there was a way to change the particles into little yellow or white stars, im trying to do a space travel game and this would be great for it
Homer_simpson @ Sat Jan 03, 2009 6:01 pm wrote:
put it all together and you get:
Quote: View.Set ("offscreenonly")
colorback (blue)
const MaxParticles := 500
const startfirex := 100
const startfirey := 100
const smokelength := 300
type Particle_Type : %declare type
record
x, y, speed : real
end record
var Particles : array 1 .. MaxParticles of Particle_Type %declare array of type that you've made
for i : 1 .. MaxParticles % give particles their initial x,y value
Particles (i).x := Rand.Int (0, maxx) %randmize the x position
Particles (i).y := Rand.Int (0, maxy) %randmize the y position
Particles (i).speed := Rand.Int (3, 5) %randmize the y position
end for
loop %main animation loop
cls %clear the screen
for i : 1 .. MaxParticles %inside this loop we go through all the particles 1 by 1
Particles (i).y -= Particles (i).speed %move down the drop of rain
if Particles (i).y <= 0 then %if drop of rain has fallen to the ground, reset it's values
Particles (i).y := maxy %set it's y location back to the top again
Particles (i).x := Rand.Int (0, maxx) %randmize the x position of rain droplets from 0 to maxx
Particles (i).speed := Rand.Int (3, 5) %randmize the speed of drops rain
end if
Draw.ThickLine (round (Particles (i).x), round (Particles (i).y), round (Particles (i).x), round (Particles (i).y + (Particles (i).speed)), 3, 11) %draw the drop of rain
end for
View.Update
end loop
|
|
|
|
|
|
Insectoid
|
Posted: Thu Nov 11, 2010 8:12 pm Post subject: RE:Particle system for newbies(rain,snow,smoke,etc) |
|
|
of course. Instead of drawing dots, you draw stars. Turing even has a built-in function for it.
If you understand the code you won't have any trouble making it do damn near whatever you want.
|
|
|
|
|
|
montesser
|
Posted: Fri Nov 12, 2010 10:33 am Post subject: Re: Particle system for newbies(rain,snow,smoke,etc) |
|
|
well heres the problem, im new to turing and im still learning the program, i can post a code for you to witness what my program is, but other than that. Im still trying to work this code, and ive been able to change the dots to white and the background to black, just not sure what part of the code or how i would have to change it to make them into stars.
PT 2. also, i was wondering how i got it to clear the screen, when i put a delay and cls, it only slows down the animations not stop them
|
|
|
|
|
|
|
|