New Blazing Fast Particle Engine & More Game Actions in v0.9.7

Posted on October 2, 2014

Every game on the market utilizes particle effects to add another level of visual eye candy to the game. Now you can as well with the new blazing fast Particle engine inside of GameBuilder Studio. There are also a number of new actions that will be very helpful when making tower defense, and first person shooter games. There is a new Move Toward action for accelerating objects toward a certain position, a Find Objects In Range action to search for objects within a certain distance, a Conditional action for checking property values before triggering a nested action, and many more.

Actions are now a lot more powerful with the new global Game property called "Game.CurrentActionData". This is a context aware property that changes for every action triggered and exposes relevant information from the parent action being executed. Not all actions utilize this new property but check the release notes for details.

NEW Particle Engine

Particles can be rendered using a single texture or animated frames from a sprite sheet. Hundreds of particles can be displayed on screen with just a single GPU draw call which makes the system perform exceptionally well even on mobile. There are currently two recommended visual editors that can be used to create your visual effects, Particle Designer (mac only), and One Design's free browser based particle editor. Both editors export a standard .pex particle configuration file that can be imported into GameBuilder Studio.

Follow the "Getting Particle Effects Into GameBuilder Studio" tutorial to get started. There are also a couple places you can find particle presets to get you started. 

Move Toward Action

Move Toward Action

There is a new action that will handle moving an object towards a given position. This could be used for enemy artificial intelligence logic that chases the main character around or just to move an object to a certain position in space. There is also a "Rotate to Heading" toggle to calculate the rotation needed for the object to face in the direction it is headed.

Find Object & Find Object In Range Action

Find Object & Find Object In Range Action

Searching for objects in your scene by type or within a certain distance has become a lot easier. Use the new Find Object action to search by a source entity type or by an object mask (type) that has been defined on the object's spatial. This will allow you to filter your search results. The search will be performed and the nested action will be triggered for every object found. This functionality is only valuable if you can access the entity that was found during the search. This action will loop through each object found and create a temporary property on the new global property located under "Game.CurrentActionData". The name of the temporary property with the entity's information is called "foundEntity". Use that property (Game.CurrentActionData.foundEntity) to access data on the currently found entity. A common use for an action like this is if you wanted to search for objects close to a turret in a tower defense game and lock onto the target.

Rotate Toward Action

Rotate an object to face a certain target spatial. Control the rotation speed to gradually rotate to a target or turn on snap to target.

URL Loader Action

If you have the knowledge to setup your own servers or you want to post data from your game to a remote service use the URL Loader action. It will allow you to make server calls and send the properties on a Data component from your game and get a response in either plain text or a JSON object. This becomes very powerful especially if you needed to load a list of objects at runtime and display information based on what is returned. The returned data is temporarily stored on the dynamic context aware property at Game.CurrentActionData.loadedData. To access and store the information returned use a Change Property action and store the returned data on a Data component.

The JSON object that is formed is a standard JSON object that can contain either Strings, Numbers, or Array values. If there is an array present in your returned json string such as: 

{objectList: [ Name1, Name2, Name3 ] }.

You could store the returned value of the property "objectList" to a property on a Data component then use a Loop action to loop through each entry in the "objectList" array using an expression that looks like this, Self.DataComponent.objectList[0] ... objectList[1] ... etc...

This is a feature for advance users because it requires knowledge of servers and JSON syntax.

Release Notes v0.9.7


  • Added NEW Particle Engine Renderer & Particle Emitter action (start, stop, pause, resume particle emission).
  • Added Mesh Rendering Flag to Spine Animation Renderers (Skinned Mesh rendering is now optimized to 1 draw call).
  • Added Find Object action. Search for specific object by entity type or object type and execute an action for each object found.
  • Added Find Object In Range action. Search for the closest object within a specified range. Filter by entity type or object type.
  • Added Move Toward action to move an object to a certain destination. Also allows you to rotate the object to face the direction it is heading in.
  • Added Rotate Toward action to rotate an object and face it at a given target spatials' position.
  • Added URL Loader action. Send data to a server using a Data Component or concatenated string with parameters and receive a response as a string or JSON object.
  • Added Global context aware expression property called "CurrentActionData" under the global "Game" property for actions to store relevant accessible action data. The property changes constantly depending on the current action being executed.
    • Loop action has "index" property for current position of the loop.
    • Find Object action has "foundEntity" property that holds the current entity found during a search.
    • Find Object In Range action has "foundEntity", "foundSpatial", "foundSpatialDistance" properties that hold the in range search information of the the current entity found and distance.
    • URL Loader action has a "loadedData" property that is used to store any loaded data from a server call. (This requires editing of security permissions when testing locally)
  • Added Spine Animation action event triggers. Trigger an action on Start, on Complete, & on End Of Animation Track.
  • Added Spine Bone Constraint action. Override the position or rotation of Spine skeleton bones. Or set the base bone position before any animation is applied to it.
  • Added Spine Event Listener action. Context property is called "spineEventValue" exposes the value of the keyframed event defined in Spine.
  • Added Boolean (true / false) property comparison conditions to Rules component.
  • Added Null checks (is Set / is Not Set) property comparison conditions to Rules components.
  • Added Toggle Property action. Toggle a Boolean (true/false) or Integer property just by specifying a property reference. Great for easily turning things on and off.
  • Added Conditional action. Triggers nested actions only if the property condition successfully evaluates to true.
  • Added Display Name property to Android platform builds for displaying a custom app name (under an app icon for example).
  • Added "Environment" system property to Global "Game" object (Game.System.Environment). Used to report which operating system environment your game is currently running on ("windows", "mac", "android", "ios", "web").
  • Added FullScreenScale property to Global "game" object which calculates the current amount of scale difference between your base screen size set in GameBuilder Studio and the full screen size/dimensions that your game is currently running on. This helps with scaling up or down assets.
  • Added Restriction to Component and Object naming that prevents spaces from being added.
  • Added iPhone 6 Plus icon support (180x180, 87x87).
  • Added Back button to Keyboard Input condition in Rules component (Can be used for back button on device).
  • Upgraded Admob plugin to latest Google Admob sdk 6.11.1 and added support for Smart Banner size.
  • Upgraded Adobe AIR SDK to v15.0 with support for iOS 8.
  • Upgraded Spine plugin to support latest version 2.0 with IK support.
  • Converted all cloned objects to be a "type" of its' source entity. All cloned objects/entities have an alias property that is the name of the source entity. Used for filtering searches based on source entity type.

Most Notable Bug Fixes:

  • Fixed iOS 8 App store submission errors with the latest version of the Application Loader. (Apple recently changed the required configuration files for app store submissions)
  • Fixed the mouse down condition to always evaluate to true while mouse button is down.
  • Fixed GPU Lost context support on mobile devices when screen falls asleep and context gets released and is restored.
  • Fixed Blend mode support restricting selection to only the supported blend modes for both Software and GPU 2D rendering. Use blend mode "None" for non transparent images.
  • Fixed Removal/Deleting of linked assets respecting reference count.
  • Fixed Layer dragging while trying to drag select the input text of an object layer.
  • Fixed New and Cloned objects numbering.
  • Fixed Spine AS3/Starling Runtime heavy performance when rendering skinned meshes.
  • Fixed Move action logic to move objects using linearVelocity.

Known Issues

  • No undo/redo in Assets panel, Action properties, or Template tab.
  • No undo/redo when importing external projects.
  • Conditions on a Rules component are not sortable.
  • You can not use objects with the same name in a different level. Requires renaming of entities.

Whats Next?

  • Multi-Resolution / Screen Scaling Support (Top Priority)
  • Built-In Image Compression
  • Tile Map Renderer (From Tiled Editor)
  • Path Finding Support
  • Facebook Plugin
  • GameCenter Plugin

Thanks for reading this blog post. Spread the word!


Pages: 1 All
Amazing! Keep up the good work. I'm excited to use these new features.
6 years ago
Wow! Thanks guys.
6 years ago
Pages: 1 All

Anyone can leave a comment!

You just need to signup for an account or log-in before you can comment.