Difference between revisions of "Particles"

From GiderosMobile
 
(8 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
'''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/>
 
'''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:''' [[Special:MyLanguage/Sprite|Sprite]]<br/>
+
'''Inherits from:''' [[Sprite]]<br/>
  
 
=== Description ===
 
=== Description ===
 
A particle system which allows to draw several identical dots or bitmaps, with varying colour and orientation.
 
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 ===
 
=== Example ===
<source lang="lua">
+
'''Particles 2D'''
 +
<syntaxhighlight lang="lua">
 
-- gideros particles
 
-- gideros particles
 
local particleGFX = Texture.new("gfx/yourgfx.png")
 
local particleGFX = Texture.new("gfx/yourgfx.png")
Line 41: Line 44:
  
 
stage:addEventListener(Event.ENTER_FRAME, onEnterFrame)
 
stage:addEventListener(Event.ENTER_FRAME, onEnterFrame)
</source>
+
</syntaxhighlight>
 +
 
 +
'''Particles 3D'''
 +
<syntaxhighlight lang="lua">
 +
application:setBackgroundColor(0x5500ff)
 +
 
 +
local abs, cos, sin, random = math.abs, math.cos, math.sin, math.random
 +
 
 +
-- set up the 3D view and projection
 +
local sw, sh = application:getContentWidth(), application:getContentHeight()
 +
local projection = Matrix.new()
 +
projection:perspectiveProjection(60, sw/sh, 0.01, 1000) -- fov, aspect, near, far
 +
local view = Viewport.new()
 +
view:setProjection(projection)
 +
view:setPosition(sw/2, sh/2)
 +
view:setScale(sw, -sh, 1)
 +
 
 +
-- a particle set showing a bubble, for a fountain
 +
local fountain = Particles.new(true, true)
 +
--fountain:setTexture(Texture.new("bubble.png"))
 +
 
 +
-- position
 +
fountain:setX(0)
 +
fountain:setY(0)
 +
fountain:setZ(0)
 +
 
 +
-- order
 +
view:setContent(fountain)
 +
stage:addChild(view)
 +
 
 +
-- look at it
 +
view:lookAt(0,-4,-2, fountain:getX(),fountain:getY(),fountain:getZ(), 0,1,0)
 +
 
 +
-- our emitter for fountain
 +
function Particles:fountain()
 +
local da = random()*6.28
 +
local dh = cos(os:clock()/2)
 +
local dr = random()*.001+.008*sin(os:clock()/2)
 +
self:addParticles({
 +
{
 +
x=0, y=0, z=0,
 +
size=.04, ttl=196,
 +
speedY=.02+.02*abs(dh), speedX=dr*sin(da), speedZ=dr*cos(da),
 +
decay=vector(1,1,1), acceleration=vector(0,-.0005,0),
 +
color=random(0xff00ff),
 +
}
 +
})
 +
end
 +
 
 +
-- game loop
 +
stage:addEventListener(Event.ENTER_FRAME,function(e)
 +
for i = 1, 8 do fountain:fountain() end
 +
end)
 +
</syntaxhighlight>
  
 
{|-
 
{|-
Line 51: Line 107:
 
[[Particles:clearTexture]] ''clears texture for all particles''<br/><!--GIDEROSMTD:Particles:clearTexture(slot) clears texture for all particles-->
 
[[Particles:clearTexture]] ''clears texture for all particles''<br/><!--GIDEROSMTD:Particles:clearTexture(slot) clears texture for all particles-->
 
[[Particles:getDeadParticles]] ''gets dead particles''<br/><!--GIDEROSMTD:Particles:getDeadParticles() gets dead particles-->
 
[[Particles:getDeadParticles]] ''gets dead particles''<br/><!--GIDEROSMTD:Particles:getDeadParticles() gets dead particles-->
[[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: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:getNumParticles]] ''gets the number of active particles''<br/><!--GIDEROSMTD:Particles:getNumParticles() gets the number of active particles-->
 
[[Particles:getParticleAcceleration]] ''gets particle acceleration''<br/><!--GIDEROSMTD:Particles:getParticleAcceleration(i) gets particle dacceleration-->
 
[[Particles:getParticleAcceleration]] ''gets particle acceleration''<br/><!--GIDEROSMTD:Particles:getParticleAcceleration(i) gets particle dacceleration-->
 
[[Particles:getParticleAngle]] ''gets particle angle''<br/><!--GIDEROSMTD:Particles:getParticleAngle(i) gets particle angle-->
 
[[Particles:getParticleAngle]] ''gets particle angle''<br/><!--GIDEROSMTD:Particles:getParticleAngle(i) gets particle angle-->
Line 66: Line 123:
 
[[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: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:scaleParticles]] ''scales or resizes all particles in this sprite''<br/><!--GIDEROSMTD:Particles:scaleParticles(scale,absolute) scales or resizes all particles in this sprite-->
 
[[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:setMinimumSize]] ''sets particles minimum size''<br/><!--GIDEROSMTD:Particles:setMinimumSize(minSize) sets particles minimum size-->
 
[[Particles:setParticleAcceleration]] ''sets particle acceleration''<br/><!--GIDEROSMTD:Particles:setParticleAcceleration(i,acceleration,accelerationAlpha,accelerationGrowth,accelerationAngular) sets particle acceleration-->
 
[[Particles:setParticleAcceleration]] ''sets particle acceleration''<br/><!--GIDEROSMTD:Particles:setParticleAcceleration(i,acceleration,accelerationAlpha,accelerationGrowth,accelerationAngular) sets particle acceleration-->
 
[[Particles:setParticleAngle]] ''sets particle angle''<br/><!--GIDEROSMTD:Particles:setParticleAngle(i,angle) sets particle angle-->
 
[[Particles:setParticleAngle]] ''sets particle angle''<br/><!--GIDEROSMTD:Particles:setParticleAngle(i,angle) sets particle angle-->

Latest revision as of 03:04, 17 November 2025

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

application:setBackgroundColor(0x5500ff)

local abs, cos, sin, random = math.abs, math.cos, math.sin, math.random

-- set up the 3D view and projection
local sw, sh = application:getContentWidth(), application:getContentHeight()
local projection = Matrix.new()
projection:perspectiveProjection(60, sw/sh, 0.01, 1000) -- fov, aspect, near, far
local view = Viewport.new()
view:setProjection(projection)
view:setPosition(sw/2, sh/2)
view:setScale(sw, -sh, 1)

-- a particle set showing a bubble, for a fountain
local fountain = Particles.new(true, true)
--fountain:setTexture(Texture.new("bubble.png"))

-- position
fountain:setX(0)
fountain:setY(0)
fountain:setZ(0)

-- order
view:setContent(fountain)
stage:addChild(view)

-- look at it
view:lookAt(0,-4,-2, fountain:getX(),fountain:getY(),fountain:getZ(), 0,1,0)

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

-- game loop
stage:addEventListener(Event.ENTER_FRAME,function(e)
	for i = 1, 8 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:setMinimumSize sets particles minimum size
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