My Pet Peeve: Bad menus

Other

Everyone has their own pet peeves, today I’m introducing one of mine.

I’m sick and tired of games on the iPhone having slow, unresponsive menus with minimal feedback!

The Problem

When a user presses a button, they need feedback to know that their input was successful and is being acted on.

If the device doesn’t immediately provide feedback that their input was successful, they will assume that it wasn’t and try again.

This frustrates the user, leaving them thinking your game is poor quality before they have even played it!

What causes it

Usually this is caused by loading something immediately after a menu button is pressed. This makes sense of course, you don’t want to load too many things or you will run out of memory, so you wait until you need it to load it.

Unfortunately loading it at the last moment will leave the user waiting for the resources to load when they should be rendering.

Greatly simplified pseudo-code:

OnTouchFinish:
{
	if (TouchIsOnPlayButton)
	{
		LoadPlayScreen();
		ShowPlayScreen();
	]
}

How to fix it

There are many different ways to negate the intrusion caused here, I’ll details a few, but this is certainly not the definitive list!

Load Less

Perhaps an obvious one, but if you can get by without loading another big background image then you won’t even have this problem!

The game SauceLifter negates the loading problem in this way. They don’t have any image data to load, everything is just vector data which takes up much less disk and memory space leading to MUCH quicker load times.

Maybe you have the same background on each of your menu screens with a different header.
Rather than having a screen sized image for each of them you could store the background separately from the headers. Then you only have the time hit from loading the large image once and a few small hits when loading the headers.

Trick the user

As buildings got taller people complained that it took too long for the elevator to travel to their destination floor. The engineers couldn’t make the elevators faster, as they can only go so fast before they start throwing passengers around. So instead the engineers put mirrors inside the elevator to distract the passengers (checking their hair, make-up etc).

Obviously you can’t add a mirror to distract the user, but you can add in your own distractions: Animated loading screens, trivia laden loading screens, fade to black – load – fade to new screen.

This won’t improve your load time, in fact it can slow it down marginally! But if implemented correctly your user will be tricked into thinking it’s faster, which is the desired result.

Bigger Initial Load

Users are used to games having an initial loading screen, so why not make use of it!

Rather than loading everything as you go, breaking the users flow. Load as much as you can initially, within reason. You don’t want the user to quit before they have even seen the initial menu and there isn’t much point loading the end boss graphics if it won’t be needed any time soon.

Personally I don’t think this fits well on the iPhone as I see the iPhone as a pick-up and play device, I want to spend the majority of my time playing games and the minimum of my time waiting for it to load.

Bejewelled 2 uses this. Once the initial load is done the game is lightning fast. Unfortunately their initial load is LONG, too long!

Load when idle

One way that works particularly well with menu screens is to load when the system is idle.

When the user is presented with a menu screen, they will stop interacting momentarily to read it. You can use this time to load the next menu. If the user immediately taps a button then this will be no worse than lazy loading, but if the user takes a moment when the menu is presented then the illusion that there is no loading will hold.

Compressed Data

The iPhone supports PVRTC image files, an efficient texture compression format.

When loading a PVRTC texture the texture is pulled straight from disk and can immediately be loaded into OpenGL, in comparison a PNG image must be loaded into memory and then decoded before it can be used (CoreGraphics takes care of this for you). The overhead of decoding the PNG image can get big enough that it makes a noticable difference.

In our upcoming game had a 1024×1024 texture that was being lazy-loaded (Loaded after a menu button was pressed). When the image was a PNG there was a very noticeable 2 second delay between pressing the button and having the next screen display. After converting to PVRTC the load became so quick I haven’t yet got around to changing it from using lazy loading!

PVRTC textures also use less memory than uncompressed textures (of course), there can be some small quality loss using compressed textures, so you should play around a bit to get a good balance.

There is a sample showing how to use PVRTC on the iPhone Development site: http://developer.apple.com/iphone/library/samplecode/PVRTextureLoader/index.html

Hopefully some of these will help everyone to improve the usability of their menus so this bugs me no more! If anyone has any questions please ask in the comments :-)

We should have some news to announce on our upcoming game in the next few weeks.

CONTINUE READING

Customers

Other
<mongo_bonz> Hi I got your iPod game last night lol
<mongo_bonz> Now as a custmer can I ask for a rpg like ff7 lol aaarrrrrrrrr

no. lol. :-P Anyone else out there know of one on the app store?

We have 2 games in the pipeline at the moment, neither is an RPG.

Jacob is hard at work drawing, redrawing and re-redrawing the graphics for our second game, he is such a hard man to (self) please! I’ve been working on the coding, the engine for it is 90% complete. It is totally playable and the people we have had testing it have had plenty of positive comments.

Our 3rd game is just a prototype at the moment, the super sexy programmer graphics I’ve created show off the ideas behind it, and the very select few we’ve shown it to are eagerly awaiting more :-)

I’m gonna go kick Jacobs arse and get him to write an article about how difficult it is to create menu screens that are sexy :-P Or maybe just get him to finish the menus and then we could start to post some news about the game :-)

CONTINUE READING