Posts by Jason

It’s not every day that you’re given the opportunity to revisit old client-based projects, so what a treat it was that Michele Wong-McSween, the author of the Gordon & Li Li children’s book series contacted me last fall about making a “version 2.0” of an app I created for her back in 2012. And I’m happy to report that the new improved Gordon & Li Li: Learn Animals in Mandarin is available on the App Store and Google Play!

The first version of G&L was an iPad-only app. For this new version, we’ve made it available for almost any mobile device: it’s now a universal iOS app as well as an Android app that is optimized for both smartphones and tablets. While most of the beautiful animations by Nam Doan are still the same as they were in the 2012 iteration (“if it ain’t broke, don’t fix it”), almost every “page” of the app now features fun interactive elements that really engage young users – this is the first app I’ve made that my own 19-month-old twins were really reaching for in a big way, which was a huge rush for me as a father and app developer. (In case you were wondering, Declan’s favorite page is the lion, who roars when tapped, and Sadie loves the pig, who jumps into a mud pile, leaving a satisfying “splat!” of mud on the screen.)

The 2015 version of G&L also features a much-improved tracing functionality for teaching children how to write Mandarin characters, stroke-by-stroke, and a new animated introduction by Jon Brzyski. There are also five new “bonus” words, featuring Gordon & Li Li’s favorite foods. Overall, I think we made significant improvements over the first version of the app, and opened it up to a whole new audience beyond just iPad users. I’m really pleased with it – I hope you’ll give it a try!

UPDATE #3 (3/4/2015): Fixed a bug that caused a “completed” event to be triggered upon creating the progress ring. Now “completed” events will only be triggered by ring:goTo() calls made after the ring’s creation. Thanks to Nick for finding this mistake and pointing it out in the comments!

UPDATE #2 (1/23/2015): Fixed a bug that only manifests in Corona SDK build #2015.2544 and later. In build #2015.2544, Corona Labs fixed the finalize() bug that prevented objects’ finalize events from being triggered when their parent display group was removed. I had utilized a brilliant workaround developed by Sergey Lerg, but there was an error in my implementation of his fix that caused a crash when run on build 2015.2544 and later. I fixed that crash by adding a 1ms timer when checking to see if finalize events are being triggered as they should. The fix is not necessary for up-to-date Corona builds, but I’m leaving it in for folks who might be running legacy Corona builds.

UPDATE #1 (1/7/2015): The progressRing module has been updated to ensure that the procedurally-generated mask image reliably meets the requirements for mask images. Previously, it didn’t always work when running on devices whose screen size did not match up with the content width/height defined in an app’s config.lua file.

Something that is occasionally asked about on the Corona Labs forums is how to achieve a circular progress indicator (what I call a “progress ring”). The uses for this type of widget are limitless, but here are a few examples:

countdown timer to show when a player’s turn is up in a turn-based multiplayer or puzzle game

a more visually interesting percentage indicator than the usual horizontal or vertical bar (in a business app)

A number of solutions have been proposed in the forums, often involving the use of sprite objects with X number of frames to cycle through depending on the position of the progress bar. These solutions can work, of course, but I set out to create my own progress ring solution with the following goals in mind:

The movement of the progress ring should be seamless and smooth, regardless of which direction it was moving and/or how quickly (something that can’t happen with sprite-based solutions unless you use a prohibitively high number of frames)

The progress ring must be created solely with code, so that it can be modularized into a single lua file and added to a project with one line of code (again, something that isn’t possible with sprite-based solutions).

The progress ring must be visually customizable through code: colors, size, depth of the “donut hole” (or no donut hole at all), stroke width, etc.

A progress ring object must have simple and easy-to-use methods for controlling it after it’s been created.

And I’m happy to report that I’ve come up with a solution that meets all those requirements and makes it very easy to add a progressRing to any Corona project with just one line of code! READ MORE »

I’m super-thrilled to announce that after years of creating apps for clients, I have finally released an app of my very own: conceived, created, and released as a fully solo endeavor. Social Poetry is an exciting FREE app that puts a 21st-century spin on the traditional “found poetry” style of composition. Use it to mix and match words pulled exclusively from your Facebook news feed, add your own photos, customize your style, and share your creations with the world! With a new set of words every time you open the app, the possibilities are limitless!

Social Poetry is available for iOS and Android (Google Play and Amazon App Store). It’s a free download, with a single in-app purchase that unlocks premium features like access to 100 fonts and unlimited color options, and the ability to create custom word magnets using the keyboard. Please download it now, and remember to leave a review in the App Store!

As the “freemium” app monetization strategy has grown in popularity, many developers have encountered the same problem: how can we give away fully-unlocked copies of our app to reviewers or friends? Apple gives developers 100 free promo codes for each new version of an app to hand out, but Google Play does not, and even so those codes only help if your app doesn’t unlock features via in-app purchase (“IAP”). As of now there is no way for us to hand out IAP promo codes (though there are reports that this may change). To make matters worse, if you try to create your own system for unlocking features, the odds are very good that your app submission will be rejected by Apple’s reviewers. To the best of my knowledge, there’s nothing stopping you from creating your own IAP promo code system on Android, but who has time to create a whole menu system for unlocking content? Fortunately there is an easy way to unlock content on both iOS and Android simultaneously, with very little change to your code – and since this method is completely invisible, it does not trigger an App Store rejection! Read on to find out how… READ MORE »

Last week I posted a tutorial showing how to enable finger painting in your Corona apps, and while I was putting together a sample app for that post I decided I wanted to enable users to change the color of their virtual paint from right within the app. So I did some searching on the web for a “color picker” I could plug into my sample app, and I did find a number of options (here’s one example), but none of them gave me exactly what I was looking for.

The closest fit for my needs was a terrific bit of code that somebody with the user name “StarCrunch” contributed to the Code Exchange last year. StarCrunch’s code was pretty darn close to what I envisioned – and most importantly, he or she had already worked out the math used to power a visual color picker, something I had no interest in doing from scratch. However, there were a few issues I needed to fix in order to fully meet my needs:

I needed Graphics 2.0-compatible code (this is especially important for anything dealing with color, since RGB values are no longer on a 0-255 scale)

I needed the picker to “return” the RGBA values for a picked color so that something could be done with them.

StarCrunch’s code calculated the hex code for a picked color and displayed it on-screen. This is useful information, but just not something I needed.

I needed a way for the user to adjust the alpha value of the picked color using their finger.

I wanted to remove or hide the picker after the user had picked their color.

I wanted my picker set up as an external module that could simply be included into any existing project (for easy “one line of code” integration).

So I set to work creating my own color picker, with StarCrunch’s excellent code to lead the way. The result is colorPicker.lua, my own color picker module that can be added to any Corona project with just one line of code! READ MORE »

Please Do Not Feed The Developers

The Corona SDK tutorials, modules and code snippets that I post on this site are free for you to use, with no expectation of repayment. But a few kind souls have told me that they wanted to toss me a few bucks as a way of saying "thanks," so I've added this donation button. If you like what I'm doing here, and wanted to contribute, feel free. And if not, that's cool too. I'm just glad you're here.