2013-01-18

Platforms Overview & Appropriated Frameworks

Okay, I already have a very precise idea of what my first game will be, I'll post about it later, it will be something very simple, mainly to find my feet. But before I start anything, I need to choose two crucial things : first, the platform, on which OS(s) will the game run ? on which kind of device(s) ?, second, of course, the langage, just so I can choose the appropriate tools, softwares and SDK.

OSs - what you need to know

Android Apple / iOS Microsoft / Windows Linux
SDK or Framework Android SDK OS X SDK iOS SDK XNA It's complicated...
Open-Source Yes No No No Yes
Dev Center Android Developers Apple Developer XNA Developer Center
Free Tools Yes Yes Yes Yes
Mobile Market Share (buyers) 75% (19%) 15% (26%) 3.6% ( ?) 0
Devices or OS Phones, Tablets, Kindle Fire (to a certain extent) OS X iPhone, iPad Phones, Tablets, Xbox, Windows PC
Upcoming devices Ouya, Shield (portable),Gamestick Surface Pro, Surface-like tablet-PCs from other manufacturers Steam Box
There are several other platforms out there (rim's blackberry os, nokia's symbian, samsung's bada and more recently tizen,...) but I only wanted to cover the main ones. I'm not interested in developping on some underground platform with scarce tools and have to debug half their mistakes on my own, I just want to have fun and focus on my games.
Android has already won the mobile market, but it is still booming, invading the tablet market thanks to low-cost tablets like the Nexus, and now with many consoles announced for 2013 Android is unquestionably the most popular platform today. From a developer's perspective, it is really appealing for many reasons :
  • Android apps are written in Java, which is one of the most popular languages today. Which means : large community, support, documentation, and all of it for free on the web, and even if you need to learn it from scratch, you're not wasting your time because you'll always find a use for it.
  • They deliver their SDK along with a customized version of eclipse ready to use, no installation or tweaks required. You can get started in no time.
  • Futhermore, it is possible to test your app directly on your computer, because they added a little virtual machine that simulates a great variety of devices (including of course Samsung's Galaxy S3, Google's Nexus 7, ...). No physical device required.
  • Uploads and upgrades on Google Play are fast and easy.
  • It is open source, so whatever you're doing, you get the impression it is not for google, someday an android fork can appear that will have nothing to do with google and your game will still run on it; it seems that easy, but it's not, really. No strings attached.
The former biggest item in the mobile industry, Apple's iOS, is now way behind in second place. In the video games area, Apple's offer remains very limited :
  • They have no device exclusively dedicated to gaming.
  • You need a mac to use their tools, and you can only test your app on an actual device. If you don't have any of those, getting started might get a bit expensive.
  • Apparently, you need at least a week to make an update available.
  • Apps are written in Objective-C, which is a very obscure version of C made by and uniquely for Apple.
Finally, you have Microsoft that has built a very developer-friendly ecosystem over the years with Visual Studio which is a very powerful and yet easy to use developping suite that you can also get for free in a lighter version called Express. With XNA you can easily develop a game working on each of their platforms, and that includes the Xbox, which makes it the most accessible console for indie developpers, though that's about to change with the Ouya.

Languages and Cross Platform Development

First, let's have a look at which language can be used for each of the forementioned platforms.
Java C++ Objective-C C# VB HTML5
Android Yes Yes No No No Yes
iOS No No Yes No No Yes
Windows 8 (Metro) No Yes No Yes Yes Yes
Xbox No Yes No Yes Yes Yes
The best solution seems to be HTML5, but it's not that easy. Every platform supports HTML5, but they don't support the same specifications for HTML5. The W3C makes the standards but anybody who knows a little about web development knows that each browser has its own way of reading html/css/javascript, generally to allow the developper to go further than what was intented by the standards. It's always a mess, and depending on the functionnality your website (or webgame) is using, you'll have to detect the platform, have different version of your code, and also you'll have to clean it up e regularly to meet the new specifications. Not only that, but also your code will always be read by an interpreter, so the game will be slower than if it were developped using the native technology. I think HTML5 is well suited for little games aiming at cross platform editing, and I might even give it a shot.
Aside from that, Java is just for Android (and Linux, and Windows) and Objective-C is only good for iOS, while C#/VB are dedicated to Microsoft. So if you're looking for something that will work on several platforms, but without giving up speed, you're only left with C++. It's no surprise because there's a long tradition for C++ in the game dev area. The only downside is that it doesn't work for iOS, which means you'll have to give up iPhones and iPads. Anyway the same C++ code won't work on all these platforms, so you'll have to build a specific launcher for each platform and have different versions of your code, because you'll need to use the different APIs from Google and Microsoft.
If you want your game to be available on different platform, there is another way to go, probably the simplest : cross platform development tools. They either translate or adapt your code, and they take various languages in input, so it can broaden your choice if you're really confortable with one language in particular. You can find a nice list here. While choosing one, pay attention to their translation process, as most of them will produce HTML5. Also, most of them are not free. The only exceptions are cocos2d-x and SDL which are both free and produce native code.
edit 03-15 : the list on the website referenced above does not include Libgdx, which is free, open source and at least as good as the others.

Making a choice...

... depends on your situation. Are you seriously considering a career in game dev, or are you only looking for some fun on your spare time ? Do you aim at one specific os or do you not care at all ? What are your current ressources in terms of software and hardware ? What is your favourite language ? Do you have patience, or do you want everything quick ? Are you willing to pay for a better tool, and how much ? I cannot tell you what the best answer is for you. What I can do, however, is to guide you through my process.
  • Choosing the platform makes a good starting point. Personally, I don't want to be tied down, I like to keep my options opened, so I am going for the cross platform thing. After that, it's only a matter of elimination. I'm not a fan of Apple, I don't like how they put a lock on everything, and as I said before, I don't like to be tied down, but if you choose Apple, it will only work with Apple, so you'll have to eat the same fruit for the rest of your life; no, but seriously, you're left with a very narrow choice, and then everybody gets the same thing, and uniformity is just so boring. What about Microsoft ? As most people, I am really not pleased by the turn they have been taking lately : what exactly are they trying to do with windows 8 ? are they trying to lock windows with their store ? I won't consider Linux until dual screening works right "out-of-he-box". Seems I'm left with Android.
  • Even though the Android dev bundle comes with a VM for testing, I think it's better left for checking the display on various screens, but actually testing the game, how it responds, should always be done on a real device. Well, that's fine because I already have three Android phones, and soon enough, a tablet.
  • Next thing, the language. I'm very fluent in Java, I've used it a lot over the past few years and I really like it. I also have a very solid background in webmastering (obviously that's why I'm having a blog and not a personal website : I've done so much HTML/CSS/JavaScript/PHP it's not fun anymore). But hey, let's spice things up a little : I'll be using C++ this time ! I just think it's better suited for video games and I know I won't be working with Android all my life, so at least I want to try this.
  • Finally, the tool. Since I'm looking for something free, I am left with little choice. Only 2 games for Android are listed on SDL's website, while there are 424 in this category on cocos2d-x's, and there you go !
Final combo : Cross Platform starting on Android with Cocos2D-x !
edit 03-15 : No it's not the final combo! Not anymore!

No comments:

Post a Comment