Hello again,
Thank you everyone for this incredible community. It's been a longtime dream of mine to develop a mobile game. Without Cocos2d and the collective expertise of you all, I would never have this opportunity to realize my dream so quickly.
Ron and I started designing iFist a little over 3 months ago. We threw around a number of ideas, but ultimately decided to run with a proof of concept that I'd been toying with. Over the course of 2 months and a number of lunch meetings, we completed iFist 1.0 and I think we're both very satisfied with how it turned out.
iFist began as a Cocos2d 0.7.2 project, but we wanted to keep up with the framework, so I followed Emil's template for statically linking Cocos2d and this greatly eased the upgrade process. iFist 1.0 was finally built with 0.8.0-beta (r1114) to take advantage of CocosDenshion and SimpleAudioEngine. We use CocosLive to manage our global high scores and Flurry Analytics SDK 1.2 to capture user statistics.
For our particular style of game (survival challenge), I wrote a generic RuleSet class that was used to model each game mode. Each mode was then represented as a collection of variables that controlled the behavior of the game (extra lives, round length, sequence randomization, points, match type, etc.). This made testing different game modes and variations very fast!
For talking between the layers and scenes, we used a game data singleton that managed the selected mode, settings, score functions and reading/writing to the user defaults. This was immensely easier than writing custom -init methods or exposing properties in scenes as my early prototype did.
Our graphics, including the menu buttons, fit on a single 1024x1024 atlas PNG that we created in Photoshop. This sheet along with the sound assets were preloaded during the application start up. This increased the total loading time (~7s on iPhone 3G), but eliminated most of the load in the rest of the game. I want to develop a better solution for managing our assets in the future (multiple smaller atlases?).
Lastly, we tested our code with Instruments and Clang/LLVM. Instruments is still tricky to use, but Clang was a cinch to setup following these instructions:
Find Bugs with Clang Static Analyzer
iFist 1.0 was submitted on July 20 with 2 new users reported (by Flurry) on July 24 and approved for sale on August 3, 2009 (14 days)!
In closing, I just want to say that this is the first open source community that I've tried to integrate myself into and it's my hope that I can give back as much as you've given me. It's a really amazing experience to be apart of Cocos2d.
Thank you!
woebtz
P.S. Matt Gallagher has a great article about singletons and global variables:
Singletons, AppDelegates and top-level data.