I created a web app that lets you generate radial (circular) progress indicators from any source image you give it. This is necessary because Roblox doesn’t support clipping masks for images. There are other ways to make a radial progress indicator, but nothing will match the quality of using pre-rendered images. Since UI elements are locked to integral coordinates, using dynamically rotated segments creates some pretty undesirable results.
I’m not the first one to make something like this, but I created this tool because I felt like I could improve upon what’s already been done. Notably:
- You can generate the images directly in your browser, no need to download anything or even server-side code.
- The ability to export the sprite sheet across multiple images, so you can get super-smooth quality, even for slow-moving progress indicators.
- You can preview how the animation will look right in the browser as you change the settings, no need to guess-and-check. Just set the preview speed to the slowest you think the bar will move in your game, and then tune the rest of the settings until it looks smooth.
Here is a link to the web app.
The project is open source on GitHub. The web app is hosted on GitHub Pages, so no need to worry about any servers of mine going down. You can also just build it locally if you want. A Lua module is provided along with some instructions to help you get started using this in Roblox.
Examples
Both clockwise and counter-clockwise are supported. Exported images are smooth and anti-aliased. Attain best results by keeping the “Size” of each image on the sprite sheet close to the size at which you display it in game.
Works with any kind of image your browser can render (even SVG!)
See the actual sprite sheet for the above image here.. This one is split across two images. The provided module handles switching between them with no extra effort on your behalf.
Final thoughts
For displaying these indicators at arbitrary sizes (i.e. not fixed offset size), consider taking these extra steps:
- Run your final sprite sheets through this process for extra sharpness and to eliminate fuzzy outlines.
- Add some transparent padding around your source image before importing it in the web app to prevent edge bleeding. (Padding may be supported as a setting in the app eventually.)
I hope you find this useful to make high quality radial progress indicators in your games. Feel free to report any problems or suggestions as an issue on the GitHub repository. Contributions welcome as well.