Difference between revisions of "Particles"

From GiderosMobile
 
(26 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
'''Supported platforms:''' <br/>
+
<!-- GIDEROSOBJ:Particles -->
 +
'''Supported platforms:''' [[File:Platform android.png]][[File:Platform ios.png]][[File:Platform mac.png]][[File:Platform pc.png]][[File:Platform html5.png]][[File:Platform winrt.png]][[File:Platform win32.png]]<br/>
 
'''Available since:''' Gideros 2016.06<br/>
 
'''Available since:''' Gideros 2016.06<br/>
 +
'''Inherits from:''' [[Sprite]]<br/>
 +
 
=== Description ===
 
=== Description ===
<translate>Particles sprite (alpha), which allows to draw several identical dots or bitmaps with varying colour and orientation</translate>
+
A particle system which allows to draw several identical dots or bitmaps, with varying colour and orientation.
 +
 
 +
'''Note''': starting from '''Gideros 2022.5''', Particles 3D was added
 +
 
 +
=== Example ===
 +
'''Particles 2D'''
 +
<syntaxhighlight lang="lua">
 +
-- gideros particles
 +
local particleGFX = Texture.new("gfx/yourgfx.png")
 +
local stars = Particles.new()
 +
stars:setTexture(particleGFX)
 +
stage:addChild(stars)
 +
 
 +
-- GAME LOOP
 +
function onEnterFrame(e)
 +
if (e.time // 1) % 4 == 0 then
 +
stars:addParticles({
 +
{
 +
x=math.random(480),y=math.random(320),
 +
size=32,angle=math.random(360),
 +
color=0xff00ff,alpha=0.8,
 +
ttl=16*2,
 +
speedX=0.01,speedY=0.01,speedAngular=0.15,
 +
speedGrowth=0.9,
 +
},
 +
{
 +
x=math.random(480),y=math.random(320),
 +
size=16,angle=math.random(360),
 +
color=0x00ffff,alpha=0.8,
 +
ttl=16*16,
 +
speedX=0.02,speedY=0.02,speedAngular=0.2,
 +
speedGrowth=-0.1,
 +
},
 +
})
 +
end
 +
end
 +
 
 +
stage:addEventListener(Event.ENTER_FRAME, onEnterFrame)
 +
</syntaxhighlight>
 +
 
 +
'''Particles 3D'''
 +
<syntaxhighlight lang="lua">
 +
-- Set up a fullscreen 3D viewport
 +
local sw,sh=application:getContentWidth(),application:getContentHeight()
 +
local view=D3.View.new(sw,sh,45,0.1,1000)
 +
stage:addChild(view)
 +
local scene=view:getScene()
 +
 
 +
-- We will embed our particles in a 3D mesh, to enable depth testing
 +
local sc=Mesh.new(true)
 +
scene:addChild(sc)
 +
-- A particle set showing a bubble, for a fountain
 +
local fountain=Particles.new(true,true)
 +
fountain:setTexture(Texture.new("Bubble.png",true))
 +
sc:addChild(fountain)
 +
fountain:setX(0)
 +
fountain:setY(0)
 +
fountain:setZ(0)
 +
 
 +
-- Our emitter for fountain
 +
function Particles:fountain()
 +
local da=math.random()*6.28
 +
local dh=math.cos(os:clock()/2)
 +
local dr=math.random()*.001+.008*math.sin(os:clock()/2)
 +
self:addParticles({
 +
{
 +
x=0,y=0,z=0,
 +
size=.05,ttl=200,
 +
speedY=.025+.025*math.abs(dh),speedX=dr*math.sin(da),speedZ=dr*math.cos(da),
 +
decay=vector(1,1,1),acceleration=vector(0,-.0005,0),
 +
color=math.random(0x0, 0xffffff),
 +
}
 +
})
 +
end
 +
 
 +
-- Look at it
 +
view:lookAt(0,4,3, 0,0,0)
 +
 
 +
-- Game loop
 +
stage:addEventListener(Event.ENTER_FRAME,function(e)
 +
for i=1,16 do fountain:fountain() end
 +
end)
 +
</syntaxhighlight>
 +
 
 
{|-
 
{|-
 
| style="width: 50%; vertical-align:top;"|
 
| style="width: 50%; vertical-align:top;"|
 +
 
=== Methods ===
 
=== Methods ===
[[Particles.new]] ''<translate>Create new particles group</translate>''<br/>
+
[[Particles.new]] ''creates new particles group''<br/><!--GIDEROSMTD:Particles.new() creates a new particles group-->
[[Particles:addParticles]] ''<translate>Add particles</translate>''<br/>
+
[[Particles:addParticles]] ''adds particles''<br/><!--GIDEROSMTD:Particles:addParticles(particles) adds particles-->
[[Particles:clearTexture]] ''<translate>Clear texture for all particles</translate>''<br/>
+
[[Particles:clearTexture]] ''clears texture for all particles''<br/><!--GIDEROSMTD:Particles:clearTexture(slot) clears texture for all particles-->
[[Particles:getParticleAngle]] ''<translate>get particle angle</translate>''<br/>
+
[[Particles:getDeadParticles]] ''gets dead particles''<br/><!--GIDEROSMTD:Particles:getDeadParticles() gets dead particles-->
[[Particles:getParticleColor]] ''<translate>Get color and alpha value of particle</translate>''<br/>
+
[[Particles:getNearestParticle]] ''gets the index of the nearest particle to the given point''<br/><!--GIDEROSMTD:Particles:getNearestParticle(x,y) gets the index of the nearest particle to the given point-->
[[Particles:getParticleDecay]] <br/>
+
[[Particles:getNumParticles]] ''gets the number of active particles''<br/><!--GIDEROSMTD:Particles:getNumParticles() gets the number of active particles-->
[[Particles:getParticlePosition]] ''<translate>get position of particle</translate>''<br/>
+
[[Particles:getParticleAcceleration]] ''gets particle acceleration''<br/><!--GIDEROSMTD:Particles:getParticleAcceleration(i) gets particle dacceleration-->
[[Particles:getParticleSize]] ''<translate>get size of particle in pixels</translate>''<br/>
+
[[Particles:getParticleAngle]] ''gets particle angle''<br/><!--GIDEROSMTD:Particles:getParticleAngle(i) gets particle angle-->
[[Particles:getParticleSpeed]] ''<translate>Get speed of particle</translate>''<br/>
+
[[Particles:getParticleColor]] ''gets particle color and alpha value''<br/><!--GIDEROSMTD:Particles:getParticleColor(i) gets particle color and alpha value-->
[[Particles:getParticleTag]] <br/>
+
[[Particles:getParticleDecay]] ''gets particle decay factor''<br/><!--GIDEROSMTD:Particles:getParticleDecay(i) gets particle decay factor-->
[[Particles:getParticleTtl]] ''<translate>get initial time to live of particle</translate>''<br/>
+
[[Particles:getParticleExtra]] ''gets particle extra value''<br/><!--GIDEROSMTD:Particles:getParticleExtra(i) gets particle extra value-->
[[Particles:getParticles]] <br/>
+
[[Particles:getParticlePosition]] ''gets particle position''<br/><!--GIDEROSMTD:Particles:getParticlePosition(i) gets particle position-->
[[Particles:isPaused]] <br/>
+
[[Particles:getParticleSize]] ''gets particle size in pixels''<br/><!--GIDEROSMTD:Particles:getParticleSize(i) gets particle size in pixels-->
[[Particles:removeParticles]] ''<translate>Remove particles by index in table or as arguments</translate>''<br/>
+
[[Particles:getParticleSpeed]] ''gets particle speed''<br/><!--GIDEROSMTD:Particles:getParticleSpeed(i) gets particle speed-->
[[Particles:setParticleAngle]] ''<translate>set angle of particle</translate>''<br/>
+
[[Particles:getParticleTag]] ''gets particle associated tag''<br/><!--GIDEROSMTD:Particles:getParticleTag(i) gets particle associated tag-->
[[Particles:setParticleColor]] ''<translate>set color of particles</translate>''<br/>
+
[[Particles:getParticleTtl]] ''gets particle initial time to live''<br/><!-- GIDEROSMTD:Particles:getParticleTtl(i) gets particle initial time to live-->
[[Particles:setParticleDecay]] <br/>
+
[[Particles:getParticles]] ''gets particles''<br/><!--GIDEROSMTD:Particles:getParticles(set,tag) gets particles-->
[[Particles:setParticlePosition]] ''<translate>set position of particle</translate>''<br/>
+
[[Particles:isPaused]] ''tells if the Particle set is paused''<br/><!--GIDEROSMTD:Particles:isPaused() tells if the Particle set is paused-->
[[Particles:setParticleSize]] ''<translate>set size of particle</translate>''<br/>
+
[[Particles:removeParticles]] ''removes particles by index in table or as arguments''<br/><!--GIDEROSMTD:Particles:removeParticles(particle indeces) removes particles by index in table or as arguments-->
[[Particles:setParticleSpeed]] ''<translate>Set speed of particles</translate>''<br/>
+
[[Particles:scaleParticles]] ''scales or resizes all particles in this sprite''<br/><!--GIDEROSMTD:Particles:scaleParticles(scale,absolute) scales or resizes all particles in this sprite-->
[[Particles:setParticleTag]] <br/>
+
[[Particles:setParticleAcceleration]] ''sets particle acceleration''<br/><!--GIDEROSMTD:Particles:setParticleAcceleration(i,acceleration,accelerationAlpha,accelerationGrowth,accelerationAngular) sets particle acceleration-->
[[Particles:setParticleTtl]] ''<translate>set time to live</translate>''<br/>
+
[[Particles:setParticleAngle]] ''sets particle angle''<br/><!--GIDEROSMTD:Particles:setParticleAngle(i,angle) sets particle angle-->
[[Particles:setParticlesTag]] <br/>
+
[[Particles:setParticleColor]] ''sets particle color''<br/><!--GIDEROSMTD:Particles:setParticleColor(i,color,alpha) sets particle color-->
[[Particles:setPaused]] <br/>
+
[[Particles:setParticleDecay]] ''sets particle decay factor''<br/><!--GIDEROSMTD:Particles:setParticleDecay(i,decay,decayAlpha,decayGrowth,decayAngular) sets particle decay factor-->
[[Particles:setTexture]] ''<translate>Set texture to all particles</translate>''<br/>
+
[[Particles:setParticleExtra]] ''sets particle extra value''<br/><!--GIDEROSMTD:Particles:setParticleExtra(i,extra) sets particle extra value-->
 +
[[Particles:setParticlePosition]] ''sets particle position''<br/><!--GIDEROSMTD:Particles:setParticlePosition(i,x,y) sets particle position-->
 +
[[Particles:setParticleSize]] ''sets particle size''<br/><!--GIDEROSMTD:Particles:setParticleSize(i,size) sets particle size-->
 +
[[Particles:setParticleSpeed]] ''sets particle speed''<br/><!--GIDEROSMTD:Particles:setParticleSpeed(i,x,y,a,s) sets particle speed-->
 +
[[Particles:setParticleTag]] ''sets particle tag''<br/><!--GIDEROSMTD:Particles:setParticleTag(i,tag) sets particle tag-->
 +
[[Particles:setParticleTtl]] ''sets particle time to live''<br/><!--GIDEROSMTD:Particles:setParticleTtl(i,ttl) sets particle time to live-->
 +
[[Particles:setPaused]] ''pauses or resumes the Particle set''<br/><!--GIDEROSMTD:Particles:setPaused(paused) pauses or resumes the Particle set-->
 +
[[Particles:setTexture]] ''sets texture to all particles''<br/><!--GIDEROSMTD:Particles:setTexture(texture,slot) sets texture to all particles-->
 +
 
 
| style="width: 50%; vertical-align:top;"|
 
| style="width: 50%; vertical-align:top;"|
 +
 
=== Events ===
 
=== Events ===
 
=== Constants ===
 
=== Constants ===
 
|}
 
|}
 +
 +
{{GIDEROS IMPORTANT LINKS}}

Latest revision as of 20:28, 21 September 2023

Supported platforms: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.pngPlatform html5.pngPlatform winrt.pngPlatform win32.png
Available since: Gideros 2016.06
Inherits from: Sprite

Description

A particle system which allows to draw several identical dots or bitmaps, with varying colour and orientation.

Note: starting from Gideros 2022.5, Particles 3D was added

Example

Particles 2D

-- gideros particles
local particleGFX = Texture.new("gfx/yourgfx.png")
local stars = Particles.new()
stars:setTexture(particleGFX)
stage:addChild(stars)

-- GAME LOOP
function onEnterFrame(e)
	if (e.time // 1) % 4 == 0 then
		stars:addParticles({
			{
				x=math.random(480),y=math.random(320),
				size=32,angle=math.random(360),
				color=0xff00ff,alpha=0.8,
				ttl=16*2,
				speedX=0.01,speedY=0.01,speedAngular=0.15,
				speedGrowth=0.9,
			},
			{
				x=math.random(480),y=math.random(320),
				size=16,angle=math.random(360),
				color=0x00ffff,alpha=0.8,
				ttl=16*16,
				speedX=0.02,speedY=0.02,speedAngular=0.2,
				speedGrowth=-0.1,
			},
		})
	end
end

stage:addEventListener(Event.ENTER_FRAME, onEnterFrame)

Particles 3D

-- Set up a fullscreen 3D viewport
local sw,sh=application:getContentWidth(),application:getContentHeight()
local view=D3.View.new(sw,sh,45,0.1,1000)
stage:addChild(view)
local scene=view:getScene()

-- We will embed our particles in a 3D mesh, to enable depth testing
local sc=Mesh.new(true)
scene:addChild(sc)
-- A particle set showing a bubble, for a fountain
local fountain=Particles.new(true,true)
fountain:setTexture(Texture.new("Bubble.png",true))
sc:addChild(fountain)
fountain:setX(0)
fountain:setY(0)
fountain:setZ(0)

-- Our emitter for fountain
function Particles:fountain()
	local da=math.random()*6.28
	local dh=math.cos(os:clock()/2)
	local dr=math.random()*.001+.008*math.sin(os:clock()/2)
	self:addParticles({
		{
			x=0,y=0,z=0,
			size=.05,ttl=200,
			speedY=.025+.025*math.abs(dh),speedX=dr*math.sin(da),speedZ=dr*math.cos(da),
			decay=vector(1,1,1),acceleration=vector(0,-.0005,0),
			color=math.random(0x0, 0xffffff),
		}
	})
end

-- Look at it
view:lookAt(0,4,3, 0,0,0)

-- Game loop
stage:addEventListener(Event.ENTER_FRAME,function(e)
	for i=1,16 do fountain:fountain() end
end)

Methods

Particles.new creates new particles group
Particles:addParticles adds particles
Particles:clearTexture clears texture for all particles
Particles:getDeadParticles gets dead particles
Particles:getNearestParticle gets the index of the nearest particle to the given point
Particles:getNumParticles gets the number of active particles
Particles:getParticleAcceleration gets particle acceleration
Particles:getParticleAngle gets particle angle
Particles:getParticleColor gets particle color and alpha value
Particles:getParticleDecay gets particle decay factor
Particles:getParticleExtra gets particle extra value
Particles:getParticlePosition gets particle position
Particles:getParticleSize gets particle size in pixels
Particles:getParticleSpeed gets particle speed
Particles:getParticleTag gets particle associated tag
Particles:getParticleTtl gets particle initial time to live
Particles:getParticles gets particles
Particles:isPaused tells if the Particle set is paused
Particles:removeParticles removes particles by index in table or as arguments
Particles:scaleParticles scales or resizes all particles in this sprite
Particles:setParticleAcceleration sets particle acceleration
Particles:setParticleAngle sets particle angle
Particles:setParticleColor sets particle color
Particles:setParticleDecay sets particle decay factor
Particles:setParticleExtra sets particle extra value
Particles:setParticlePosition sets particle position
Particles:setParticleSize sets particle size
Particles:setParticleSpeed sets particle speed
Particles:setParticleTag sets particle tag
Particles:setParticleTtl sets particle time to live
Particles:setPaused pauses or resumes the Particle set
Particles:setTexture sets texture to all particles

Events

Constants