[CURRENT] Stick Nodes (Java / LibGDX / Android / iOS App)
Stick Nodes is my most-recent and most-successful project to date. The basic idea behind Stick Nodes is to create your own stickfigure-based animations and export them as a gif/mp4 for others to see. Deceptively simple, Stick Nodes allows for immense creativity by the user, only limited by their imagination.
It was released in September 2014 for Android and November 2014 for iOS. (Stick Nodes was inspired from a program I used a lot when I was younger, Pivot Stickfigure Animator.)
Summary
Stick Nodes is a change of pace for myself. It’s more of a fun way to pass the time rather than an outright game.
The concept is simple, give users a blank canvas and allow them to create animations by creating, adding, and posing multiple stickfigures by manipulating the little nodes on their joints. Users will then be able to export animated gifs/mp4s of their creations in order to share them with others.
Stick Nodes also features a stickfigure library with custom-made stickfigures created by the users (submitted via an in-app submission form).
Here’s a list of some of the main features I have implemented in Stick Nodes (taken from the official website):
- Automatic frame-tweening turned on/off with the click of a button.
- Great variety in segment shape types allows for greater creativity.
- Color/scale on a per-segment basis – easily color your stickfigures.
- Ability to create, save, import, and share stickfigures you create.
- Compatibility with Pivot-created .stk files (version 2.2.7 and earlier).
- Pinch-to-zoom to make animating more convenient and simple.
- Forward and backward onion-skinning for precise animating.
- Clean, simple interface created with mobile devices in mind.
- A “panning mode” to move all stickfigures simultaneously.
- An undo/redo system for up to twenty actions.
- More stuff I’m forgetting…
A few of the most notable points during development:
- Getting a .gif encoder with a good balance between quality and fast encoding that is cross-platform (desktop/Android/iOS) was a huge pain. Since I couldn’t spare development time to learn how to write my own encoder, I came up with another solution – a very nicely put-together Frankenstein of 2 or 3 other solutions I’ve found (each with their own flaw). Worked out very well in the end.
- Very late in development I discovered that under “severe” circumstances, the app would throw StackOverflowErrors if a Node (of a stickfigure) had too many generations of children Nodes attached to it. My method of recursively updating children Nodes through their parent Nodes crashed the app in these situations. A bit of a headache to implement, but using a manually-created Stack/Queue and iterating through the Nodes proved to be a much more efficient method.
- Half way through development, I noted that the font I was using throughout the app did not scale down well on smaller devices. While it is preferred to use Stick Nodes on tablets/large phones, I didn’t want to outright exclude smaller devices, so I had to fix this. The solution was to use distance-field fonts with a custom shader. As a result, the fonts were much more legible on smaller devices.
- Oh, and some GPUs don’t play nice with 3-byte chunks (RGB) and really prefer 4-bytes (RGBA) or else they’ll give you nothing but black pixels. This would’ve been useful information in the past.
- I will no longer take undo/redo for granted. Implementing an undo/redo system was a bit of a headache, but it increased the quality of the app by a good amount and was worth it.
Screenshots
Videos
Here are some tutorial videos I have to help new users get started with Stick Nodes.
Stick Nodes was released to both Android and iOS platforms through the combined power of LibGDX and RoboVM.