I noticed that my game was making a lot of calls to StringTokenizer and other String-related classes during significant portions of its load time. My game spent nearly 50% of its load time chugging away at Strings somewhere. This perplexed me for weeks until I noticed some calls to BitmapFont. I knew that BitmapFont had some expensive operations but I didn’t realize that just creating a new instance is very expensive.
I went about consolidating all the BitmapFont instances into one shared instance in the main Game class. I then passed the reference to this instance into the constructors for whatever classes needed to write text to the screen. Going from 4 instances of BitmapFont to just 1 shaved about 4 seconds off the load time. That’s a huge improvement when my game used to take 8 seconds to load on my Evo 4G.
So if method profiling yields several groups of StringTokenizer calls lasting around 1-2 seconds during your game’s loading phase, check if you are using more than one instance of BitmapFont. If all of your text uses the same font style and size, try using one shared instance.
I envisioned Pocket Fan to be a novelty app. What else would you call an app that displayed an animated fan? It certainly wasn’t supposed to be useful. My perception changed when I got this comment on the Android Market:
Can’t sleep without the sound of a fan. This is almost perfect for power outages. Just needs to stay open and not black screen after 1 minute.
When I first read that comment, I thought to myself “He can just set his screen to never time out…” and went back to work on my game. Then I saw a post on reddit entitled “I can’t sleep unless you’re near me…”. It was just a picture of a box fan, but it all clicked for me then. Pocket Fan could be used as a sound machine or noise generator. Read more
For those of you that actually know what you’re doing in Eclipse, you can skip this post. For the rest of us, I wanted to share a quick tip for debugging libgdx in Eclipse.
Make sure to set the debugger to break on GdxRuntimeException or any other libgdx exceptions you want to inspect. This Stack Overflow post shows how.
If you don’t set the debugger to catch these exceptions, you’ll likely find that it breaks execution in the OpenGL thread, which is generally not very helpful, because the code that threw the original exception is in your game thread.
I decided to try out Google’s Page Speed extension for Chrome to see how fast my site loads.
Without optimization, my Page Speed Score was 59/100. After I implemented Page Speed’s suggestions, my score went up to 92/100.
You may notice that the URL you’re seeing at the top of the page is not agalsoftware.com, but joelagalsoff.com. Or maybe I’ve already fixed the problem by the time you read this. Either way, I broke my domain and then my WordPress installation. Read more