I Wish It Would Rain Down

When Phil Collins sang that song here , little did he know that one day there would be someone that would create a library that would help developers fulfill his wish. Well, the idea is not alone about rain, but particles. How about creating particles in CoronaSDK, there are libraries that do something like that, but as many developers want to take a test-drive, the developer of this library wanted the users to get an idea from the videos alone.

So cam along another developer that wanted to work on a library and also create it for mass consumption, i.e. the user community. So Jeff Strahan, aka jstrahan as he is known on the Corona forums, has created the 'Graffiti PS' PS standing for Particle System. I wanted to write a tutorial on this on using the system, but I feel that the code that Jeff has to demonstrate the same is much better. Have a look at the videos on this product.

There are two versions that Jeff has created, one that is the FREE version for all to test drive which is limited, not crippled in any way, and a full version that one can buy and try out a variety of effects.

The free GraffitiPS file can be gotten by tweeting details about the same, you can find that page here . I have not tried the other offering that is commercially available, but since I have worked closely on this one with Jeff, I can tell you that is is pretty optimised and works with Director, etc. So there are no new hoops to jump through.

Look at the various things that you can do with this library here . The best part is that it comes with a PDF documentation file, that explains how to use it.

I am sure that Jeff wouldn't mind me showing the main.lua used for the demonstration of the GraffitiPS

----------------------------------
--  star Field        --
--  for use with gPS       --
----------------------------------

display.setStatusBar( display.HiddenStatusBar )

local gPS = require( "gPS" )
local rdm = math.random

local bGroup = display.newGroup()
local mGroup = display.newGroup()
local fGroup = display.newGroup()

local bg = display.newRect(bGroup, 0,0,320,480)
   bg:setFillColor(0,0,0)
local moveTxt, startStar, endStar

local txt = {"Beta","2 of","gPS","for","cSDK","©","2011"}

---------------------------------------------------------------------------------------------------------
function moveTxt()
   for a=1, #txt do
        words = txt[a]
            local intro = { 
               imgStart = { 
                  life = 3000+(a*800), 
                  alpha = 1,
                  stroke = {}, 
                  size = {16,16},
                  color={255,255,0,255}, 
                  scale = {7,1},
                  pos = {160, 600,0,0,0}},
               imgEnd = {
                 alpha = 0.7, 
                 scale = {0.5,0.5}, 
                 pos = {0,-340,0,0,0,move = 1, ease = easing.linear}},
               imgInfo = {group = bGroup,max = 10, text = words}}
    gPS.newText(intro)
  end
  timer.performWithDelay(10000, startStar )
end
---------------------------------------------------------------------------------------------------------
function startStar()
  for a = 1, 20 do
    local star1 = { 
        imgStart = { 
             life = rdm(200,500), alpha = 0, 
             size = {1,1}, stroke={}, 
             pos = {160,240,rdm(-20,20),rdm(-20,20)},
             color={200,200,200,200}},
 imgEnd = { 
             onComplete = endStar, alpha = 0.3, 
             scale ={1,1},
             pos={0,0,0,0,move = 1, ease = easing.inExpo}},
 imgInfo = { 
            group = fGroup, max = 60}}
     
    if star1.imgStart.pos[3]< 0 then 
        star1.imgEnd.pos[1] = rdm(-30,-0) 
    else 
        star1.imgEnd.pos[1] = rdm(0,30) 
    end
    if star1.imgStart.pos[4]< 0 then 
        star1.imgEnd.pos[2] = rdm(-30,-0) 
    else 
        star1.imgEnd.pos[2] = rdm(0,30) 
    end     
    gPS.newCircle(star1)
  end  
end
---------------------------------------------------------------------------------------------------------
function endStar(params)  
  local star2 = {
                imgStart = { 
                       life = rdm(500,800), alpha = 0.3, 
                       size = {1,1}, scale={},
                       stroke={}, 
                       pos = {params.pos[1],params.pos[2],0,0},
                       color={200,200,200,200}},
  imgEnd = { 
                      onComplete = startStar, alpha = 1, scale ={1,1},
                      pos={0,0,0,0,move = 1, ease = easing.outQuad}},
  imgInfo = { group = mGroup, max = 40}}

  if params.pos[1]< 160 then 
                     star2.imgEnd.pos[1] = rdm(-400,0) 
                else 
                     star2.imgEnd.pos[1] = rdm(0,400) 
                end
  if params.pos[2]< 240 then 
                     star2.imgEnd.pos[2] = rdm(-500,0) 
                else 
                     star2.imgEnd.pos[2] = rdm(0,500) 
                end

  gPS.newCircle(star2) 
end


---------------------------------------------------------------------------------------------------------
moveTxt()

It's that simple...

So tweet the message at Jeff's site and get a FREE copy of the code and try it in your projects, if you wish, for more control and stuff, you can purchase the full version.

Comments

Popular Posts