Cocos2D Alpha Book: “unprecedented success”

On October 28, 2010, in book, cocos2d, by Steffen Itterheim

I got an email from Apress. They say the Learn Cocos2D Alpha Book “enjoys an unprecedented success”. Other phrases in that email include “staggering number” (which I can’t disclose) and “great positive feedback”.

Wow, just wow! :)

What’s more, it looks like the book will be released early. Currently, it is scheduled for release on November 30th, 2010. This is still a rough date though, and street date may be off by a couple days.

Tagged with:  

Cocos2D Book, Chapter nil: It’s done!!!

On October 17, 2010, in Announcements, book, cocos2d, by Steffen Itterheim

Chapter nil - EXC_BAD_ACCESS 😀

The book is done! No more chapters, finito.

I WROTE A BOOK!!! I can’t believe it! It took me just about 4 months to write, or 16 weeks, not counting the weeks of proposing the book and the coming weeks in which I’ll be reviewing the edits made by Apress and making last minute changes and additions.

For now, don’t offer me to write another book! I’m done writing books. For this year. So maybe next year. And maybe one about the Corona Game Edition? I’m certainly finding myself interested to finally try out Corona, if only for fun. I’m attracted by their clean and elegant API, the fact that they’re using Lua which I know inside out, and the professional atmosphere associated with it. But don’t worry, those are just thought plays right now.

I’ll certainly keep adding more Cocos2D content to this website of course. If the Alpha Book program and the number of questions I receive by email are any indication of what’s to come, I want to be prepared and be able to cope with a potential onslaught of questions. I’ll make an announcement about that soon, stay tuned.

Summary of working on Chapter 15 - Out Of The Ordinary

I’m not sure if the title will stick, I found it to be very fitting. Out of the ordinary should be the guiding principle for whatever you do. Create something that’s different, and don’t be afraid to be different. Maybe that sounds cheesy and if you don’t get it right away, I know that Chris Guillebeau and his Art of Non-Conformity articles and book will be able to shed at least some light on what I mean by that.

In this last chapter I’ve included a section about where to get help, and not just places where to ask questions and where to find tutorials. I also mean finding free game art and audio, as well as freelancers and tools. I also wrote a section about technologies that may be of interest to Cocos2D game developers, including a complete list of social networking SDKs. But also including server technology as well as ads and analytics.

I devoted several pages to marketing. Marketing yourself and your game by writing a blog and being active on Twitter. The benefits and caveats of public relations (PR) and press releases, and a heading about working with publishers and what you can expect from cooperating with a publisher. Finally I made comprehensive lists for both outstanding Cocos2D games as well as the commercial source code projects that are currently available.

Capital C and D

In case you’re wondering why I’m writing Cocos2D instead of cocos2d, it’s a copyedit thing. Cocos2D is a proper noun and as such it must be capitalized, while the D following a number stands for dimension and the commonly accepted way to write 2D and 3D is with a capital D. Cocos2D is written like this throughout the book, as you can see from the title, and now I actually prefer to write it like this. In its own way the book helps to bring Cocos2D to a new level. I like to think that this is reflected by capitalizing the word.

cocos2d Book, Chapter 15: The Final Chapter

On October 9, 2010, in Announcements, book, cocos2d, by Steffen Itterheim

Chapter 15 - The Final Chapter

This is it. The last one. I don’t know what’s going to be in it. It’s supposed to give the reader a “where to go next” kind of outlook. I hope that one of the places will be here, but obviously there’s tons of places to go and tons of things for cocos2d developers to learn.

If you have a particular idea what should be included in the greater cocos2d developer outlook kind of sense, please let me know!

Summary of working on Chapter 14 - Game Center

Amazing! Simply amazing. I think I fell in love with Game Center in the process, I haven’t worked with a networking API that’s so smooth, straightforward and easy to comprehend. No thanks to Apple’s already excellent step-by-step documentation. Still, there were a couple pitfalls and things that one could forget, and I did, that I’ve obviously included in the chapter.

On the other side, with almost a week late for this chapter, I realized how time consuming network programming is. There’s a lot of testing going on, and especially if you’re testing on two devices the process is incredibly inefficient compared to a simple single-player game. You always have to deploy to two devices for every test, and every time the delay between request and response adds to the time spent on testing. Add to that common network errors such as a drop in connection or something blocking the line with a download, and you’re up for a fun ride.

But that alone didn’t account for the one week delay. In the past two weeks I’ve been helping to renovate someone’s apartment, I got a cold, I held a presentation at the Macoun Mac OS X conference (about cocos2d obviously) while still recovering from the cold. Then our pet cat Yoshi had to see the vet and almost died during anesthesia because of a pulmonary edema. On the brighter side I’ve also attended a wedding and wrote a GameKitHelper class for this chapter which contains more stuff than I could describe in the book, including storing achievements which failed transmission, as is recommended but not implemented by Apple’s Game Center Programming Guide.

That’s also why I haven’t been answering emails timely recently. Please be patient, I’ll get to yours soon!

What’s left?

Now that I’m almost finished writing the book, what’s left? Obviously I have to review technical and other edits done by Apress. Current chapter 13 is in technical review while chapter 6 is in editorial review, after which it’s ready for production. So I’ll still be busy reviewing and making changes and additions to chapters during October and probably even November.

Then there’s the issue of the example projects having used three different versions of cocos2d, starting with 0.99.3. That was actually an oversight on my part because at the time I had 0.99.4 available. Luckily those changes are really insignificant for the first few projects. The DoodleDrop game already uses 0.99.4 and so does most of the book’s code. But for the Game Center chapter, I had to migrate the Tilemap project from 0.99.5 beta 1 to beta 3 and that was a huge step. It was easier to simply create a new project from the latest cocos2d template, then re-adding all game source code and resources to the new project. Still, that’s doable.

The bigger issue I have here is the fact that I can’t change anything in the book anymore, so the code should reflect what’s in the book. If the book mentions CCLabel then the code should use CCLabel and not CCLabelTTF. What I think is probably going to be a good compromise is to update the important (final) versions of each chapter’s example projects to cocos2d v1.0 once that is released. Obviously the code supplied with the book will remain as it is described in the book, so the upgraded code would be for reference only and a separate download. Whether I wait for v1.0 depends on how progress towards v1.0 is coming along around the book’s release date some time in December 2010.

In hindsight, I really wished I had used my Xcode template project and used that throughout the book. Back then I decided against it because it was important for me to write the code like almost all cocos2d developers would do. Now I regret the decision because I could have changed the way cocos2d developers start new cocos2d projects for the better. The whole updating process for cocos2d is a major PITA and then some, so I think I need to bring this issue to the table more frequently, more actively. At least until the cocos2d template installation procedure is changed to not copy all of the source code into each new project and then leaving it up to the developer to deal with upgrades.

cocos2d Book, Chapter 14: Game Center

On September 26, 2010, in Announcements, book, cocos2d, by Steffen Itterheim

Chapter 14 - Game Center

This chapter will revolve all around Apple’s Game Center technology. Especially peer to peer networking is very interesting. The idea is to create a small multiplayer room using the Isometric game built in Chapter 11.

I actually had to buy a new iPod Touch 4 to be able to test all the new features. I was blissfully unaware that the more exciting features aren’t available on my iPhone 3G. Darn, technology moves so fast.

Summary of working on Chapter 13 - Pinball Game

I think it’s an amazing game, and I’m happy that several commenters, Twitterers and people I know in real life (you know, those you can actually touch while you’re talking to them) mentioned a pinball game as a possible example. Come to think of it, a pinball game is just great! It’s almost a sandbox that you can add more stuff to it and experiment. And it allowed me to use VertexHelper, which I haven’t been able to mention in the previous chapter.

Also, I’m a big pinball fan. Well, I used to be a computer pinball game crack. Have I ever mentioned that I was a beta tester for Balls of Steels, the pinball game from Apogee/3D Realms? When the shareware table was officially released, the highscore I achieved held the #1 spot for roughly 6 months in the worldwide leaderboard. And I basically stopped playing this game session after about 12 consecutive hours, just because I didn’t see the end of it. I always had the extra balls maxed out and I was still on my first ball. I just got bored.

Anyhow, it was great fun to actually build a pinball table myself. I can now appreciate more than ever how complex it is to create these beasts, be it for real or as a computer simulation. My respect to all game developers who ever built a pinball game, most importantly: the developers of the Pinball Dreams/Fantasies/Illusions series created by DICE, the developer of Epic Pinball James Schmalz and of course the creators of the Balls of Steel game Wildfire Studios.

Of course, when you read this chapter you’ll learn more about the prismatic and revolute joints of Box2d as well as joint limits and motors, among many other things. I’m also excited to see some of the readers turn this baby into a really good pinball game. I admit, this version, it don’t look too good. But as it is, it’s fully functional and incredibly cool for the short time frame I had to develop it in.

Book Feedback: the Spiders got fixed!

On September 22, 2010, in book, by Steffen Itterheim

Just a quick note: the single most requested respectively criticized part of my book was in Chapter 4 where I’m introducing the moving spiders. The @interface code was missing from the book as well as the line in the init method calling one of the new methods. These are added now, so the code works directly from the book. It should be in the next chapters & code update (but don’t ask me when, I don’t know either).

Thanks for letting me know about it, and in general for all the great feedback! What amazes me most is that there wasn’t a single person saying that the book isn’t good, or not good enough, or could be so much better if only … Normally one has to expect at least a certain percentage of responses to be less than happy, but no, every single one was positive, even those with criticism. And a few very overwhelmingly appreciative. I can’t say thank you enough for all of that praise, it’s been a great source of inspiration and motivation, especially at the times when I was super-busy and working 14-hour days for a week. Thank you! :)

Amazon Book Reviews

I thought it’ll be great to see some of the cocos2d book reader reviews appearing on Amazon. If you’d like to write a review, I’d really appreciate it, because right now there are none. Here are the links to the cocos2d book for every Amazon store worldwide:

Amazon.com (United States)
Amazon.ca (Canada)
Amazon.co.uk (United Kingdom)
Amazon.de (Germany)
Amazon.fr (France)
Amazon.co.jp (Japan)

Please mention that you read the book in its Alpha form. I don’t want anyone to think that the reviews are hoaxed because they came in before the book came out. Not everyone may be aware of Apress’ alpha program, and pre-release reviews are often viewed with skepticism.

Btw, Amazon.com lists the book’s release date as December 30th. Right now that’s just a rough date, like I said earlier, the goal is to get the book out in time for Xmas. Hopefully even several weeks before Xmas.

Tagged with:  

cocos2d Book, Chapter 13: Physics Game

On September 20, 2010, in Announcements, book, cocos2d, by Steffen Itterheim

Chapter 13 - Physics Game

After the introduction of the physics engines Box2d and Chipmunk, this chapter will focus on one physics engine in greater depth by making a physics game using Box2d.

What kind of game? If you have an idea real quick let me know, because I haven’t decided yet. I was thinking about a space game with gravity but also a bit like Pinball, or more like a Sandbox game with some optional goals. Or something else entirely. The only caveat is: it has to be do-able in less than a week while also writing the chapter and I should be able to illustrate some details about the physics engine! That’s no mean feat.

Summary of working on Chapter 12 - Physics Engines

I basically split this chapter in half and gave each of the two physics engines, Box2d and Chipmunk, a good treatment. Initially I started with the templates provided by cocos2d, just to get all the code together and not having to talk about setting up the Xcode project. I quickly realized that the application templates are inadequate, erroneous and outdated, probably because they have barely been maintained as both Box2d and Chipmunk matured. They seriously need a refresher, and I was thinking that maybe I’ll turn the two projects for this chapter into cocos2d application templates for physics engines, replacing the current ones and using my Xcode template project, so that I don’t need to go in and change them every time cocos2d gets an update.

Anyway, both physics engines got their treatment and I built the same project for both. So now you can actually compare them, side-by-side, be it performance or behavior or just plain coding style or number of lines.

Unfortunately, there’s a lot to talk about even for just doing the basics. I got both projects to the point of adding more boxes to the world, then adding rudimentary collision detection and a simple joint example with 4 bodies strung together. There wasn’t enough space for more. But I did foresee it which is why I planned in the Physics Game chapter as a follow-up. Let me know real quick if you have an idea for a simple physics game, or send me a link to an existing game on the App Store. Ideally within the next 24 hours.

My Opinion

I once again realized why some developers may be preferring Chipmunk because it is more “direct” and easier to pickup, as in you just add a new callback method and that’s that. I can see that but it’s very misleading. Chipmunk is making me cry by throwing all those one-letter e, u, i, f, m, p, etc. fields at me, so I’ll have to remember that u is for friction, for example. I’m not a machine! And because you can’t hide private fields in C those are exposed as well, adding to the confusion. I found myself having to look up a lot of things frequently in the Chipmunk manual. The bad thing is, it’s a manual, and not an API reference - but I keep having to use it like it were an API reference by using search a lot. Box2d provided a much cleaner API and both a manual and an API reference, which made it a lot less painful to figure things out, to look things up.

People’s arguments about which physics engine is better often runs along the lines of language, features, performance, memory footprint and what not. But if I have to choose, I’d say both are fairly complete and mature physics engines, so for me the choice is really about API design and documentation. And in that area, Box2d is the clear winner in my book. Of course, I kept a neutral tone writing the book, I don’t want to bias anyone because at the end of the day, the important thing is that you can make a great game with both engines, and not everyone is familiar with C++ and that’s a very daunting language to learn.

Tagged with:  

Chapter 12 - Physics Engines: Box2d & Chipmunk

This chapter gives you an introduction to physics engines and what they can do. Since cocos2d supports two physics engines out of the box, Box2d and Chipmunk, I will explain how to do the same things in both physics engines and I aim to cover at the very least the basic elements like shapes, joints and collisions.

Because choosing either physics engine is often done on subjectively. Some developers may prefer the Object-Oriented C++ nature of Box2d while others may feel more comfortable with the C-based interface of Chipmunk (*). At the very least I want to present both and show their strength and weaknesses by example.

(*) Note: there is an Objective-C binding for Chipmunk made by Howling Moon Software. It’s free to use on Mac OS X and iPhone Simulator but costs $200 per title if you want to publish to the App Store. I believe that most cocos2d developers wouldn’t mind spending up to $30 on a tool or library that is essential, that is why I included Zwoptex and Particle Designer in the book. This product however is in a different ballpark price-wise.

On the other hand, the free Chipmunk SpaceManager also aims to offer better integration with cocos2d-iphone and promises a simplified Objective-C interface. I will have a look at the SpaceManager and then decide whether I’ll discuss it in the book, I say it’s likely. Another physics tool that has gotten some attention is the VertexHelper which I’ll at the very least will refer to.

Summary of working on Chapter 11 - Isometric Tilemaps

Isometric tilemaps rock! That is, if you can get all those nasty issues solved. Even though all the issues like graphics glitches at tile edges, correct z-ordering and the proper blend functions have all been discussed and solved by now, it’s still very challenging to get an isometric tilemap on the screen and a player walking over it, with no glitches at all. I believe this chapter will give a lot more developers the chance to delve into the exciting world of isometric tilemaps. I too learned a lot making this example game, and part of me now wants to write an old-school isometric RPG game. Again. For the n-thousand-th time. Sigh. Some day, some day …

Anyhow, the project I made over the course of this chapter features properly z-ordered tiles and a player sprite, which moves tile-by-tile over the isometric tilemap. You control the player by simply touching in the direction relative to the player that he should move to. One specialty of this project is that the player always remains centered on the screen, he doesn’t move at all! It’s simply the tilemap that is moved under him, which makes a couple things much easier.

Nevertheless you also learn how to find the tile coordinates for a tile that you touch on the screen. And how to avoid the isometric, diamond-shaped tilemap to show the “outside” of the world by adding a border around the tilemap and limiting movement to the playable area. Similarly, the blocking tiles like walls, mountains and houses all block the player’s movement by drawing over the map with a collision layer and a tile whose property is set to “block_movement”.

In the meantime, if you want to gain a better understanding of how isometric tilemaps work, I can recommend the Isometric Projection article by Herbert Glarner. And in case you’re wondering how I suddenly and dramatically increased my art skills, I’ll be honest: I didn’t. I used the terrific tilesets from David E. Gervais which are published under the Creative Commons License. It means you are free to to copy, distribute and transmit those tiles as long as you credit David Gervais as their creator. You can download these tiles from Pousse Rapiere’s website or you can directly download them all at once as 6.4 MB ZIP file here. If you like to hear it from the man, here’s a bit of insight and history from David explaining how these tiles were made.

cocos2d Book, Chapter 11: Isometric Tilemaps

On September 6, 2010, in Announcements, book, cocos2d, by Steffen Itterheim

Chapter 11 - Isometric Tilemaps

After Chapter 10 introduced Tiled and working with orthogonal tilemaps it’s time to step things up a notch and delve into isometric tilemaps. It starts with basic principles of isometric tilemaps and editing before going into detail on what’s different code-wise compared to orthogonal tilemaps. Obviously this has to include how to determine which isometric tile was touched and how to move a character across an isometric tilemap.

Summary of working on Chapter 10 - Working with Tilemaps

This chapter introduces you to tilemaps, what they are and what benefits and tradeoffs they provide. Without a doubt the most popular editor for tilemaps for use with cocos2d is the Tiled Map Editor. I explain how to use it over several pages before going into code and actually loading your first tilemap using cocos2d’s CCTMXTiledMap class.

Loading a tilemap is just half the story. You’ll also learn how to manipulate the tilemap layers and individual tiles, as well as scrolling the tilemap and centering the touched tile on screen. The code takes care that the tilemap is never scrolled outside its boundaries.

While working with the Object Layer feature of Tiled (CCTMXObjectGroup in cocos2d) I noticed it’ll be handy to display the rectangles on the screen. So you’ll also learn a little custom drawing using OpenGL ES respectively cocos2d’s wrapper functions in CCDrawPrimitives.

Tagged with:  
Page 5 of 7« First...34567