Even the cute Om Nom requires your assistance to fight gravity, bubbles and spider in the quest for Candy. It is a lovely word and it reminds of all the Goodies. Thereby aptly used by developer Mike Dogan from x-pressive.com. There are two offering from them the first one was Particle Candy, an engine for particle effects used in CoronaSDK and the other that was released later, Text Candy an FX engine for creating text effects.
In this review we are looking at Particle Candy, the current version that is available if you were to purchase the same would be version 1.0.18, however the version we got for review was 1.0.15, so if there are any features that might have been missed than the ones that you can use might be due to that version difference. (This was a bit strange as many developers request that we review the latest version or an alpha version that will be released soon, in this case we were provided an older version.) One of the reasons I believe this has been the case is that the version 1.0.15 is compatible with the stable release of CoronaSDK (#591) after which several features were added, which are not available to all, just the subscribers.
What is Particle CandyBefore we can attempt that, let us look at the basics, what is a particle? Without going too much into the details of atoms and ions, etc. A particle is a small bit of a substance that behave in a particular manner as it has it's own density, weight and other characteristics. So what does that have to do with Gaming or Applications development? When we turn on the tap, water gushes out, now water is not a solid block of geometrical shapes, it is a collection of several hundreds and thousands of water *particles*. The tap is a good example of what a particle engine is, and the water is a good example of the particles that flow from it. As previously mentioned, particles have their own properties. They can obey gravity, they can defy gravity. Water on one hand is a particle that obeys gravity, where as Smoke defies gravity and blows upwards.
What is a particle engineIn computing terms this is also called an emitter, It emits particles. The example of tap was used earlier to explain as that is the best way to do so, turn on the tap and particles start to flow, turn off the tap and they stop. This third party library "Particle Candy" is an emitter engine.
Why do I need Particle CandyInteresting question, like Physics brings in realism to the game, particles add to that perception of reality. Think smoke billowing from a crashed plane or a burning rooftop, water falling from waterfalls, rain pitter-pattering it enhances the visual appeal of the game. If you are a gamer that has played any of the console stuff like on XBox360, PS3 or so on, you will almost relaise that if there were none of those fx and sparks flying when you scraped walls, or slashed swords, smoking guns, the games would have been dull. The entire evolution of gaming that has evolved would have been a waste. It would have been glorified colourful graphics from monochromatic 8-bit sprites.
If you use things like GameSalad, Moai, Sparrow, Cocos2D and several other frameworks, you will notice that straight out of the box, there are Particles available for use. Even the new iPad based app/editor/emulator Codify, now called Codea (I guess) has particles in-built. CoronaSDK lacked this amongst a few other key features. Even LÖVE has a particle engine built-in.
So like you have super heroes to the rescue, Mike has spend a great deal of time and effort in making available a particle engine for the developers/users of CoronaSDK. At the time when this project was started, the feature set available in Corona was very limited and despite those limitations, Mike managed to provide a brilliant contender.
So what do I doThe first step in using Particle Candy in your apps is to include the file as any other third party lua library would be added in CoronaSDK.
particles = require("lib_particle_candy")
Now, the app would be particle enabled.
The next step would be to create an emitter and the important part is to place the emitter in the location where you might want it to emit from. This can be anywhere, gravity and force (this is not physics based, but the emitter defines the behaviour of the particles) will take over making the particles move accordingly. However physics based particles can also be added.
particles.CreateEmitter("myEmitter", posX, posY, rotationAngle, fVisisble, fLooping)
The other slightly tedious task is to define the particles. This could have been used with defaults to provide a particular type of particle by default. However since you have to do this once, it is passable, tedious but manageable. The attributes of the particles are things like
imagePath, imageWidth and imageHeight, directionVariation (this allows for a random spread than a laser sharp straight beam of particles) velocityVariation (a range of speed, some smoke particles can be lighter where as other might not be so) rotationVariation (this allows for a range of rotation than having a templated particle, specially in the case of let's say a confetti emitter, square particles do not fly out just as fixed, they can be rotated at random) alphaStart (if the particle starts it life with an alpha value, which could be invisible or visible or any value in-between) fadeInSpeed, fadeOutSpeed, fadeOutDelay, scaleStart, scaleVariation, scaleInSpeed, scaleOutSpeed, scaleOutDelay, emissionShape, emissionRadius, killOutsideScreen and lifeTime
Quite a handful to deal with, but once configured, each particle is an entity in itself. It knows what it will look like, it has a pre-defined life, it has major points when it will start to scale, fade-in, fade-out, rotate, etc and even to the point that if the particle is faster and goes off-screen before it's lifetime is over, it can be removed. Very useful as there is no point in spending CPU cycles moving a particle that is outside the screen and not going to be visible. However if as a developer you believe that it should make a comeback, more like a re-entry into the atmosphere after reaching into outer-space, then just setting that killOutsideScreen to false will not kill the particle and it will be removed once the lifetime is reached.
To create special FX, not just a stream of particles flowing from an emitter, you might need to setup several emitters that will create these particles. There is another pleasantly surprising feature of Particle Candy that also can be used to attach sound to the particle emitter. So rather than manage the explosions via Particle Candy and then sound separately, it integrates them together to provide the best synchrony.
PotentialIt is but a surprise that like many *young* developers have chosen the Physics engine as their complete salvation package for making games, Particle Candy is not as yet tapped for that. Looking at the Features Tour video, can provide so many ideas on games that a lot of folks are trying to work on. Attractor fields, repulsion fields, animated sprite sheets, bouncing particles, changing weights, images, layering, event listeners for times when the particles are killed.
PerformanceThis is a rather very important question that a lot of pro-developers ask, they push the CPU to the extreme to get that every last bit of the CPU cycle to work for their app. If you are a Pro or a hobbyist/beginner, Particle Candy is quite optimised, so as a developer you can focus on using it and be assured that any future release will have further optimisation included.
SummaryHaving played with particle engines since the time they were a hot topic around 2000 and one of the most common projects to create by those learning C++ to better their concepts of classes and object oriented development to the engines available in other frameworks, despite the fact that most other frameworks offer near direct access to actually drawing it onto the graphics card of your device which is severely abstracted and sandboxed on CoronaSDK, Particle Candy is very responsive and smooth. Even with a couple of emitters pumping particles like crazy, the performance is acceptable.
When you purchase Particle Candy, the developer provides the entire library as lua source code in good faith that the purchaser shall not distribute this in any form other than as part of their app in compiled form. So for those that want to learn about some good practices in development, here is an opportunity to see a wonderfully created engine, it could be inspiring for some budding developers.
The website has several amazing demos, samples and a much better help API documentation than that of CoronaSDK.
ScreenshotsThis is one review where we find ourselves in a precarious position without screenshots, the reason being like in the past when news reporters spoke about HD TV or widescreen TV, we could not really understand that concept as we were looking at it on our low res, non HD and non Widescreen TVs. It is similar to the point when retina display was released, users of iPhone3 could not really understand what the fuss was all about, what was so special or different about retina display. So screenshots will not do justice to the visual marvels that Particle candy can offer, so we have some video links instead.
All of these samples are available with the package to try out in the simulator.
Software : Particle Candy
Version : 1.0.15
Publisher : Mike Dogan
Website : http://www.x-pressive.com
Platform : CoronaSDK/Lua
Price : € 39.95
However there is a special offer, where one can purchase one of the Libraries at full price and get the other at half price. Since both are priced the same, it is simply put a 25% off if both are purchased, however you do not have to buy them at the same time, if you have purchased one, you get a coupon code which can be used to provide the appropriate discount.
And we have a copy of ParticleCandy for one lucky winner, all you need to do
1. Follow @whatsin4me
2. Retweet the message "Read reviewme.oz-apps.com, follow @whatsin4me and RT this msg. You might win a copy of #ParticleCandy from #xpressive"
Disclaimer: X-pressive.com have made this offer available with the following conditions
1. If you are the winner, you shall respect the copyright and intellectual property of the developers and *NOT* distribute the lua source code of Particle Candy to anybody. It is for you and is to be intended for use by yourself alone.
2. This is a complementary copy and there shall be no updates available unless you have purchased a copy of Particle Candy
3. You shall have fun with Particle candy... (we added that one, that was not from x-pressive.com, but I am sure they will want the same for you)
You can Follow us on Facebook by liking our page at