My Cross Platform Game Engine Adventure

I’ve been searching and testing game engines for my ongoing project. I thought it would be a good post to talk about this adventure. The game engines I’ve tested and my experiences/thoughts about them:


Cocos2d-x:
 Cpp port of Cocos2d which is a very well known and commonly used game framework.

Things I like

  • A very good game engine
  • Nice community behind it
  • A very wide future set
  • Native language so its fast, really fast
  • Can output for every major mobile platforms

Things I didn’t like

  • Hard to get started because of lack of tutorials.
  • An unusual approach for game developers who has flash background
  • You have to setup for each platform
  • You may have to write lots of workarounds


Flash – Starling
 : 
Actionscript port of Sparrow.

Things I like

  • It’s a really well designed game engine
  • Nice community behind it
  • Is fast enough for 2d games
  • Can output for every major mobile platforms
  • Can benefit from opensource as3 libraries
  • One setup, deploy everywhere
  • Lots of tutorials and examples for startups

Things I didn’t like

  • Disadvantages of starling are mainly because flash platform.
  • No threading ( mobile ) which is vital for AI and network
  • It takes time to compile and test on device.
  • There is not an elegant approach for native extensions.
  • Your code can be decompiled ( change ipa to zip > decompress > show the package contents of app file > decompile the swf )
  • It’s not fast as native


Marmalade SDK
C++ engine for cross platform development

Things I like

  • It’s a stable and commonly used engine
  • Output is really fast so you don’t have to worry about performance
  • Have elegant native extension approach
  • Nice feature set
  • Can deploy every major platform with no effort
  • It is used by game companies.
  • Good examples

Things I didn’t like

  • It’s not a game framework actually 🙂 It may be a base to your framework
  • Needs a wrapper
  • Hard to learn
  • You can’t find any tutorial except marmalade’s own site
  • Support is limited (mainly for premium users)


IwGame :
 A free game engine designed over Marmalade SDK. Uses an xml like language called XOML for generating content

Things I like

  • Unlike marmalade sdk it targets game development
  • Has a great documentation about xoml development ( 230 pages of book )
  • Nice feature set
  • Can benefit all of the advantages of marmalade
  • Is coming with an complete game example

Things I didn’t like

  • It’s aim is developing all the game logic from xml which is not suitable for lots of game programmers
  • There is not enough documentation and wrong examples for direct coding (coding with cpp not xml )
  • Doesn’t have an api doc so you have to check the book for everything.
  • Poor forum support
  • Doesn’t have a good structure, its open to make mistakes very easy.
  • Work in progress, team leader states that it is a base for a commercial product.


Corona
:
 A cross platform game engine focused on lua. I checked this engine like a year ago so my comments about it may not be so true.

Things I like

  • Easy to learn
  • Nice feature set
  • Because of lua you don’t need to compile everytime. When you save your file the game scene is updated automatically
  • Allows native extensions

Things I didn’t like

  • Lack of proper IDE.
  • When a performance issue occurs you may not do anything about it.

Emo – Framework: A lite, easy to learn cross platform framework which uses it’s own scripting language. ( I’ve just checked it for half a day so I may overcriticise )

Things I like

  • Easy to learn
  • Open source

Things I didn’t like

  • Squirrel is an easy to learn scripting language but there is not an ide support for this language. Which means you have to change all of your work setup.
  • Unlike lua, squirrel know-how is not re-usable for other platforms

Unity 3D: A very well known commercial product which is used for lots of games.

Things I like

  • A solid system works for every major platform
  • Easy to learn
  • No need to compile every change, easy to test
  • Rich feature set
  • Has an embedded editor and a very nice component architecture

Things I didn’t like

  • God damn expensive for 2d games ( if you don’t want to show unity splash page on startup it costs 4500 $ for ios and android)
  • It’s focus is not 2d so you have to buy extra tools for 2d. ( sprite manager, ezgui etc.)
  • Asset store is also ridiculously expensive, community is not mature enough to share information and code.
  • Simplest application file size is 8 mb.


Haxe
:
 An opensource cross platform flash like architecture compatible with every platform.

Things I like

  • Easy to learn for flash developers
  • Has a very good native extension implementation
  • Has threading
  • Very good community support ( Forum, irc etc. )
  • Better performance then flash
  • Lots of IDE support ( My favorite IntelliJ has official support )
  • Easy to publish every platform
  • Lots of opensource flash tools are also available for haxe

Things I didn’t like

  • Is hard to debug
  • It takes time get used to setup IDE
  • If you are not familiar with terminal or command line, it may be weird to get used to

My choice is Haxe because I have a solid Actionscript background and it’s been very easy to adopt Haxe. It doesn’t have the drawbacks of flash and it is working half speed of native. I’m considering to write a sparrow like game framework over cpp but I don’t think it will be soon 🙂

I would be very happy to hear your opinions about these frameworks.

Advertisements

12 thoughts on “My Cross Platform Game Engine Adventure

  1. Great list! Thanks for putting it together, pretty accurate too.

    I am a big fan of Haxe, big kudos to Nicolas Cannasse the main inventor. However I do not consider Haxe a framework or a game engine, but a platform independent language. Matter of fact, Haxe could be used within most of the above game engines in your list.

    I have recently co-founded Lanica together with Carlos Icaza, ex Ansca CEO, the company behind Corona and Kota Iguchi, the main engineer behind the Emo – Framework. Both two frameworks mentioned in your list. We have combined forces to build Platino, a game engine on top of Appcelerator Titanium. I hope to see Platino soon in your list and hear your feedback.

    Thanks again for sharing!

  2. @BrunzoFonzi sure haxe is not an game framework or engine, as you said it’s a platform. What i ment was a cross platform solution. I didn’t need a game framework for flash neither ( it solves pretty much everything) . Haxe choice is not a permanent thing, I’ll be constantly checking cross platform solutions 🙂

    • @Javier I haven’t checked them deeply yet. As I know Gideros is very like Corona. Moai is on check list, I know it has been used by Double Fine. I’ll dive into it when I have free time.

  3. I’m another developer who has trotted a similar path… and found that Haxe offers the “best bang for the buck” when to comes to multiplatform development. It balances language productivity, performance overhead, active community, library support, and debugging tools. There are minor gripes I have here and there, but haXe really has the least amount of cons for what it does.

  4. I’ve used cocos2d for a few years (and as3 before that), but I’m experimenting with Monkey for some cross-platform stuff. I really like it 🙂 Similar to haxe.

  5. I also spent a lot of time recently researching this topic but didn’t have enough time to actually work with each engine a bit. So thank you for taking the time and writing your conclusions.

    I decided to go with HaxeFlixel, a port of the popular Flixel game engine for haxe. The performance is pretty great, even on an older mobile phone.

    My biggest problem so far is that Haxe is just a little bit finicky and obtuse. For example:

    * You can’t have packages that start with upper case (ex: Source.Utils.Timer has to be source.utils.Timer)
    * Haxe code completion in Flash Develop stops working when there’s a compiler error.
    * You can have multiple classes in one file, and access them directly, but you have to import the class that matches the filename in order to use it (can’t even reach class through it’s full scope). For example

    in Foo.hx
    package foo;
    class Foo {}
    class FooHelper {}

    in Bar.hx
    package bar;
    class Bar extends foo.FooHelper <- can't find class!

    you must have:
    import foo.Foo;
    class Bar extends FooHelper <- works now

    • Sam thanks for your comments. I use intelliJ for haxe development but that issue exist with IntelliJ also. I build and test via terminal. it takes time to get used to it but it is not a big problem for me.

      Yesterday i figured out that citrus engine is ported on haxe also. this is very promising because biggest advantage of flash was the community support and as I see haxe gains actionscript community day by day 🙂

      My biggest problem with import was haxe doesn’t allow to import “com.emrahozer.characters.*”. This is a problem for me because there are over 30 character classes that I instantiate with reflection and haxe doesn’t allow instantiate via reflection without importing the target class.

  6. As i see, Haxe’s popularity is rising day by day. To tell truth Haxe is pretty fast platform and easy to use for AS. developers like me. Especially after Nape Engine’s sucsess, i was thinking to write some parts of my AS projects with Haxe. and the things you have told about Haxe is true. when it comes to debug, you see the haxe’s ugly face! 😀

    Good article, thanks.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s