All posts by Aymeric

About Aymeric

Interactive developer.

Unity2D the Good, the Bad and the Ugly.

Hey guys, after more than one year working with Unity, I thought it was time to give some feedbacks. With Thomas (aka Gsynuh) we worked on a 3D game which has been canceled unfortunately. Anyway we were really happy to use Unity3D for this project instead of using Away3D (we’re mostly AS3 developers).

Now Thomas is working full time on A Blind Legend (we will provide you soon a blog report on this exciting project!), built with Unity3D. On my side I will help him on specific tasks, I’ve also several AS3 projects, and one game in progress using Unity2D.

For those of you who don’t know me, I worked on the Citrus Engine and so I’m very familiar with Starling framework (a 2D API). This background precision is important to understand my approach of Unity2D.

The Good
We were really happy of Unity’s Editor (we all know its Unity strength) working on the 3D game, and I really enjoy to use it with Unity2D. If you’ve never worked with Unity2D have a look on this great tutorial. I have long dreamed of something similar for the Citrus Engine but it would require many days of work. So we have some custom cheap editors which do their job really great on big project, but they are missing lots of features. Basically when you make a small 2D game with Starling, you create / display / position everything via code.

One of the key feature of Unity’s Editor is the ability to script Editor to create your own tool inside Unity. I didn’t try it myself, but Thomas did and he loves it.

With Unity 4.6, there is the new GUI. I started my Unity2D game project with NGUI but dropped it as soon as I tested new Unity’s GUI! They made an excellent job, kudos guys. With Starling, we use Feathers for complex UI which works great but it’s a pain to add/customize, and the api is complex. A big app made with Feathers will be out soon and of course they will be a new blog post. Using Unity new GUI it was really easy to built our custom UI and even a designer could manipulate it thanks to the Editor.

Unity also comes with a really strong Vector math librarie. In AS3 I often used Nape (even if don’t use the physics at all) just for having a strong Vector math library. In Unity2D you can do directly amazing things:

while(Vector2.Distance(transform.pos1, pos2) > .01f)
	transform.pos1 = vector2.MoveTowards(transform.pos1, pos2, speed * Time.delta)

The Bad
Ok, so that was for the good things. Wait, what!? What about Unity2D itself? I think its overkill. Unity2D is base on Unity3D, and we’re still manipulating Vector3 to move our objects.

An other thing is coordinate manipulation. We’re often switching between Camera.main.ScreenToWorldPoint and Camera.main.WorldToScreenPoint. This kind of manipulation is classical in a 3D API but not all in a 2D one. In the following code, I put my stairs sprite in the bottom right corner. This is the crazy code:

SpriteRenderer stairs = GameObject.Find("Level/stairs").GetComponent<SpriteRenderer>();
stairs.transform.position = new Vector3(Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, 0, 0)).x - stairs.bounds.size.x / 2, -Camera.main.ScreenToWorldPoint(new Vector3(0, Screen.height, 0)).y + stairs.bounds.size.y / 2, 0);

It seems that Unity2D has the wind in its sails from the game developer community, but I wonder how they deal with some features. Let’s take a basic one : how to put a blur filter on a SpriteRender? I didn’t find a simple way, even after looking on the Unity Asset Store. My conclusion is that I’ve to write my own material with custom shader for the blur effect. And it would be the same for some other filters ColorMatrixFilter, DisplacementMapFilter… Are you serious, no one is using filter? Why are they not included by default, for a 3500€ framework that’s a shame!?

An other crazy thing is the impossibility to mask / clip 2D SpriteRenderer via Unity2D API. You will have to create your own shaders. This one is working fine.

An other thing which highlight the limit of Unity2D API is to work with TextureAtlas/SpriteSheet. Unity2D support them, and they have a great tool named Sprite Packer which is very useful. Note that you may also use TexturePacker. So Unity may combine sprites into a SpriteSheet (with many options), that’s great. However you can’t access to those sprites via code. For accessing the sprite needed you have to define a public property in your code and give the sprite reference via the editor.
Or if you really want to do it via code (and often you will!) you have to put them in the Resources folder and load them at runtime:

public List<Texture2D> spriteSheets; //note that here you make the link via the editor
private List<Sprite> _sprites = new List<Sprite>();
 
//loading texture in memory
for (int i = 0; i < spriteSheets.Count; ++i)
	_sprites.AddRange(Resources.LoadAll<Sprite>("world_three/symbols" + i).ToList<Sprite>());
 
//getting a Sprite
static public Sprite GetSprite(List<Sprite> sprites, string name) {
 
	for (int i = 0; i < sprites.Count; ++i) {
 
		if (sprites[i].name == name)
			return sprites[i];
	}
 
	return null;
}

It isn’t very programmer friendly, isn’t it?

An other strange thing is the layer system: Order in Layer. You will expect that two sprites can’t have the same layer, but they can. So does the last object created will be on top or behind the previous one? It depends. Of what? No idea. Even if you move the object inside the Hierarchy, it doesn’t change anything. Even worse, if you have a Sprite Render’s child the order in layer doesn’t refer to the parents one but to the global one! You can imagine easily the nightmare on complex game… Why on earth each object hasn’t its own index and each children too according to their parents like in any display-list framework!?

The Ugly
There are bad things in Unity2D and there are also ugly things. It’s very common in a 2D game to have a Sprite as a container and push children inside which may have children etc. And you probably want to position this container according to its size. Hard to believe but it isn’t easy to do with Unity2D. 2D Bounds parent doesn’t consider children, you have to make your own function:

static public Bounds GetBounds(Transform parent) {
 
	Vector3 center = Vector3.zero;
	foreach (Transform child in parent)
		center += child.gameObject.renderer.bounds.center;
 
	center /= parent.childCount;
 
	Bounds bounds = new Bounds(center,Vector3.zero);
 
	foreach (Transform child in parent)
		bounds.Encapsulate(child.gameObject.renderer.bounds);
 
	return bounds;
}

In a game it’s very common to change Sprites’s alpha. Using Unity2D you must go through the color class unless you did it via the Editor. And you can’t change it directly, you have to change the whole color variable.

Color tmpColor = myObject.GetComponent<SpriteRenderer>().color;
tmpColor.a = 0;
myObject.GetComponent<SpriteRenderer>().color = tmpColor;

I know that many things (transform) work that way in Unity, but for small things like Color I can’t get the reason.

Working with Starling framework we have to manage SpriteSheets loading, maximum textures size (4096 x 4096 for an iPad retina, but 2048 x 2048 for an iPhone4S etc.), multi-resolution management (you won’t load the 4096 x 4096 assets on an iPhone 3GS). When you start with Unity2D you think that everything is automatically managed under the hood… but it isn’t. There is no magick here! In fact how does Unity manage the multi-resolution development? It doesn’t. You have to handle it yourself via your code. At thirst I thought Unity2D was smart enough to override my texture size depending my mobile device but it doesn’t. So how to manage assets between a 3GS and an iPad retina? Provide several resolutions but don’t put them in the Textures directory or both will be loaded. Also if you use the Editor for putting Sprite into stage it won’t handle the good SpriteSheet to use at runtime.
Also I lost 2 hours because I forgot to override a Texture Size to 2048×2048 for my iPhone4S. Unity2D didn’t gave me any error, just a crash on the device. And Xcode just told me: application received memory warning. It’s critical that those points are not clearly detailed in an official Unity blog post.

Please, tell me that I’m wrong on many points and correct me. Using Starling I can handle everything and know what the engine is doing. For a small game, for sure I will stay on Starling. However for a big one, Unity2D is really attractive if you work closely with graphic designer (or game designer adjusting physics in real time!), but for coder the API is hell! Please report your issue to make Unity2D better.

Planète Liège, ANEs, QRCode, Camera and Videos

I’m happy to introduce you a new app: Planète Liège (cork planet) for iOS & Android. The application (in french only) gives lots of information about winemaking. Sometimes making institutional apps reveals many challenges as we will see below.

Camescreen568x568ra
In the corkstagram part (I’m sure you get the joke), we take a cork in photo and can customize it with several objects. We needed something integrated into the application, so we couldn’t use the CameraUI class. We used the Camera class, create the object and use the Video object to display it. Our app is forced into portrait mode whereas the Camera object expect a landscape mode on mobile. So we’d to rotate ourselves the Video object. For iOS it works great but for Android on some devices it’s flipped at 180. Unfortunately we can’t have this information, so we’d to put a button on Android for flipping the camera. That’s really a feature that AIR should handle directly.

Change orientation
As I said the application is in portrait mode, but the main part use landscape mode. With AIR you can easily rotate the main content using this snippet:

stage.setOrientation(StageOrientation.ROTATED_RIGHT);

Be careful, on Android (if you’re using Stage3D & Starling) you will lost the context and so it will take time to see the full content of the new part!

StageVideo
Needing StageVideo with Starling? Just set visible false to stage3d! Be careful, it won’t remove touch interactivity etc.

QRCode
We’re in 2014 and it’s complicated to scan a QR Code with AS3. Firstly, I looked for ANEs and the only one I found had several issues: really hard to recompile it due to its IntelliJ integration, managing all the camera stuff which is great but unfortunately we can’t put something on top of Objective-C / Java code, bugs with Android…
Ok so no ANE. But finally I just need to check a bitmap data and there are plenty of AS3 libs making it. So time for a small benchmark? After several test, I was so frustrated… what are those shitty performances? 7 seconds for a QR Code scan, seriously?
Crazy that it’s complicated to scan a QR Code with AS3 nowadays. So I made my first (public) ANE using ZXing library. I included the AS3 lib for the default platform, so it means this ANE works for iOS & Android (using native code) and on all other targets supported by Flash using the AS3 code. Once I made it, I discovered an other one which did the same thing using ZBar lib. However since it isn’t packaged with a default platform, I forked it.

Instagram
We needed to be able to share the corckstagram picture on Instagram. I discovered those ANEs but I wasn’t happy with their structure. I really needed the same API between iOS & Android, and everything into the same ANE. So I forked it and changed its structure.

AIR is a very powerful tool, and ANEs make it so strong.
iOS & Android.

Unity P Dollar gesture recognizer

Hey guys! Just back from vacations in Norway (what an amazing country!), it’s time to go back to code!
Long time ago, I played with the one dollar algorithm for making gesture recognition. Browsing the page this week, I discovered the $1 has two children $N and $P. This last one is the most recent one and the best one! Its top features are multi-stroke and gestures represented as unordered point-clouds.

The $P algorithm has a C# implementation, so it shouldn’t be hard to use it with Unity? Indeed, unless the UI and files save path, the original code worked fine! A web demo, Github project.

Enjoy ;)

Sophie the Girafe 2

I’m glad to present you a new app with the famous girafe: The Safari of Sophie la Girafe!

screen568x568A fun and educational puzzle game for children between 2 and 6 years old! This adventure contains 18 original puzzles for you to enjoy with your child!
Travel to the great plains of Africa with the famous Sophie la Girafe! Introduce your child to lions and giraffes! Soar alongside eagles and pink flamingos and fly over herds of zebra and groups of crocodiles as you explore the mythical world of Sophie la Girafe.

All the scenery and environments have been especially designed with your child in mind. Your child will find it easy to move the puzzle pieces around by dragging them on-screen. The howls and roars of the savannah have been used to bring each animal to life.
Your child will be captivated by the clear, interactive interface, especially designed for younger children.

Thomas, in a previous blog post, related our issues using Adobe AIR GPU mode for a large project & how we switched to Starling. The Safari of Sophie la Girafe, is made with the GPU mode. As usual I made it with the Citrus Engine. Due to the complexity of some animations and finally because of bones/layer number I used DragonBones for running lots of them at full speed. The app works great but you may encounter some performance issue on iPhone4 due to this Adobe’s bug.

Is it my latest project with the GPU mode? Not certain, however for future apps I will focus on performances (even if on all my GPU apps there were pretty acceptables) rather than loading time. Obviously it depends primarily of the app content ;)

Silly Family available on the Mac App Store

Hey, I’m glad to share with you that Silly Family is now available on the Mac App Store! Don’t hear anything about Silly Family? Have a look there.

Thanks to Adobe AIR technology, with exactly the same code base we released the game on iOS, Mac, Android & Amazon. We could also release it to PC, but not sure where to sell it… I hope AIR would work on Windows 8 modern UI mode and so sell it via Windows store, but that’s an other story.

The first time you’re looking for putting your AS3/AIR game on the iOS store, you will find lots of tuts. However for the Mac App Store, that’s an other story. This one is the most concrete that I found.

Here is my bash script, FromAirAppToMacAppStore, working for AIR 13:

#!/bin/sh
#!/usr/bin/env bash
#$ -N $2
 
DIR="$( cd "$( dirname "$0" )" && pwd )"
 
cp $DIR/Info.plist $DIR/"$1".app/Contents
cp $DIR/Icon.icns $DIR/"$1".app/Contents/Resources
 
rm $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/Current/Resources/WebKit.dylib
rm -rf $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/AdobeCP15.plugin
rm -rf $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/Flash\ Player.plugin
rm -rf $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/adobecp.plugin
 
chmod -R 777 $DIR/"$1".app/
 
#codesign -f -v -s "$2" $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/AdobeCP15.plugin
#codesign -f -v -s "$2" $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/Flash\ Player.plugin
#codesign -f -v -s "$2" $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/adobecp.plugin
codesign -f -v -s "$2" $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0
codesign -f -v -s "$2" $DIR/"$1".app/Contents/Frameworks/Adobe\ AIR.framework
codesign -f -v -s "$2" --entitlements $DIR/entitlements.plist $DIR/"$1".app
 
codesign --display --entitlements - $DIR/"$1".app
 
productbuild --component $DIR/"$1".app /Applications $DIR/"$1".pkg --sign "$3"
 
codesign -v --verify $DIR/"$1".app
 
exit 0
 
#sh FromAirToMacAppStore.sh "SillyFamilyDesktop" "3rd Party Mac Developer Application: DaVikingCode (XXXXXXXXXX)" "3rd Party Mac Developer Installer: DaVikingCode (XXXXXXXXXX)"

For more instructions (and latest update) have a look on my Github’s repository. Note that I’m moving some repositories to Da Viking Code‘s Github account, the Citrus will move too ;)

Unity, Flambe & OpenFL Skeletal animation libraries performance

Hey guys, I concluded my AS3 performances test saying that AS3 math performances are still a bit low and that with other technology, we should have better performances. So here we go!

Again I remember that it’s really hard to compare different Skeletal animation engines using different models (and so an engine/a tech). I would really enjoy to have the same model available for each soft…

Flambe
Using Flump with AS3 implementation I had very good performances 30 mascots for 54 FPS. Since Haxe optimized AS3 code, we could imagine that we would win a bit more fps. However using Flambe (which is awesome) and its own Flump runtime I didn’t save FPS. Worst, I lost many! I had 30 mascots at 30FPS. Bad surprise.

OpenFL
OpenFL still use Haxe for coding however it may export native code! On mobile we could suppose that we would win some fps too. I tried several libararies, but the only one I succeed to make working was this one from Lugludum studio. They didn’t try it a lot on mobile, they focus on desktop, but for a first mobile run it wasn’t bad at all: 34 FPS for 30 animated characters.

Unity
For Unity I searched a free library, and I was really glad to see there is an implementation (no official, there was missing an eye with my model) of DragonBones. I put 30 dragons, damn I had 60 FPS! And finally 40 dragons at 46 FPS.

So what to conclude? I was sad to see that OpenFL didn’t save me some FPS relatively to my AS3 benchmark. But we can’t judge a technology on this test. Unity math performances seems to be really good. Is it the best tool for making 2D game? Maybe, without any doubt they are on the good road.

Download sources.

P.S. Gaming for change? Have a look on A Blind Legend! A really nice mobile project using binaural tones! Oh and my colleague and me will work on it. So stay tuned ;)

AS3 Skeletal animation libraries performance test

Update: part2.

Right after Silly Family (the Android & multiplayer version will be out at the end of the month!), we are already planning our next game. It will be more for gamer, a bit less family, it will be a tower defense kind of game (I enjoyed so much Bardbarian). We’ve already some fresh ideas, so it’s already time for making test implementation!

On Silly Family we used DragonBones for animations. The graphic designer enjoyed to be able to make them right in Flash, and for me the .dbswf exported file is really optimized (less than 1Mb for 6 * 5 * 16 animations and multi resolutions friendly)! However in our future game, we will have at least 30 animated characters at the same time, and in my quick prototype DragonBones wasn’t able to handle them. So it’s time for a benchmark!

Benchmark
Ok, first thing to consider: since I’m not a graphic designer (nor an animator) I wasn’t able to use the same graphics for each library. So I used their default model. Some may be more complex than others and so impact performances. The goal was to see if I can reach 60 FPS on my iPhone 4S (using iOS 7.1.1) in release mode obviously with AIR 13 using ASC 2.0 compiler and Starling framwork.
If you want to have a quick look on what the benchmark looks like, go there.

DragonBones
DragonBones has the easiest workflow since it is used directly into Flash. This is the library with which I’m the most familiar. For 30 Dragons on screen, I reached 34 Fps using version 3.0 beta and its new cacheFrameRate feature!

Flump
Flump is an other library using Flash for making animations. I found it harder to use (in Flash editor) than DragonBones when making Witchcraft Works (I used Flump with Haxe and Flambe). Making this simple performances test was a bit complicated since they don’t provide external libraries (fzip, react) directly, or I missed something. Anyway, I had 30 of their mascot running at 54 Fps!

Spine
Spine has its own software for making animations. It also has its official runtime for AS3/Starling. I had 30 orcs at 25 Fps.

Spriter
Spriter also has its own software for making animations, it also has its official AS3 implementation but when I tested it performances was really, really bad. I didn’t have 30 objects at 60 FPS on my computer! Lucky me, since Spriter is very popular (it was one of the first Skeletal animation software on KickStarter) there are several implementations. And the one made by TreeFortress is pretty solid concerning performances. Have a look on Shawn’s article. I reached 45 fighters at 52 Fps!

Conclusion
After this benchmark, I already know that I won’t use Spine. It’s the most expensive software and concerning performances point of view, there aren’t very good. Spriter Shawn’s implementation sounds very performant however sadly it doesn’t sound to be updated and supported with latest Spriter update. We enjoyed working with DragonBones for our previous game, however for this new one it may be a bad deal. Performances aren’t enough good, but since the graphic designer and me are very familiar with it, it may worth spending time on the library to optimize it (and damn I love this .dbswf format). And finally Flump sounds like a way to gve a serious try, performances seem to be pretty good and for the graphic designer he should feel at home using Flash!

Download sources & Scout reports.

Using an other technology?:
As you can see in the Scout reports, this is really the AS3 code which is limiting performances. It reminds me Philippe Elsass blog post about the fail of AS3/AIR. For my game I won’t need 100 characters à 60 FPS, but it isn’t a reason to have a look on other tech:
– I enjoyed using Flambe, however it’s using AIR on mobile. Thanks to Haxe optimization, it should be more optimized than AS3 directly, however I doubt having so much different performances.
OpenFL may be the solution concerning performances. However I’m a bit afraid of its constant evolution.
– And finally, why not Unity? Related to my old article, here I’m facing Unity’s bad side: all Skeleton animation libraries aren’t free even for testing their runtime. It’s really sad… Smooth Moves doesn’t sound bad at all.

And you what do you think?

Silly Family, being an indie dev

The game.

Hey guys, this blog post is very special for me :
– it’s my hundredth article!
– my first game as an indie dev is out!

100 blog articles
When I started blogging 4 years (already!) ago, I didn’t imagine that someday I’ll reach the hundredth article. I started mostly as an exercice in style, improving my english communication skills and coding different things for sharing (unpretentious). I continued and now when I give a look in the past I’m smiling : I can see my evolution, how I’m better as a programmer, and all the different things I did in 4 years.
Also thanks to this blog I had my first client as a freelancer! I would recommand to any programmer to have a blog and post each month an article (that’s what I’m doing since 3 years) on what he is doing.

Apptoonomy
With some friends we created a new company, Apptoonomy. So does it mean that I’m not anymore a freelancer at Da Viking Code? No way! What does a programmer on his spare time? He is programming. With Apptoonomy we mainly focus on making our own games. Let me introduce the first one!

Silly Family
silly1Silly Family is a familly-fun Puzzle Game! Do you know Suzan? Of course you do! Suzan is my father’s son’s sister’s mother’s mother! Suzan is my grandma!!!

In Silly Family, you train your logic by resolving more and more complicated enigmas about increasingly crazier families! You’ll have to find the family relationship or run through the family tree.

We offer 3 different gameplays, 5 families (maybe more) and crazy designs… not to mention the animations! Also a multiplayer mode to defeat your friend!

Obviously questions are generated dynamically, I wrote the algorithm using (family) trees and recursivity. That was funny especially managing the different languages (the application is currently available in English, French, Spanish and Italian). We’re waiting a little bit for German, it won’t be easy ;)

Being an indie dev
Silly Family is the first (finished and published) game that I made as an indie dev. It’s really a longest process than programming games for clients. A client has to be sure (or at least should) that his game design is strong and developer implementation won’t show design flaws. Otherwise programmer’s bill may be painful. I started to develop Silly Family in October 2013 so six months ago. And obviously we already had a game design document. But so many things changed during its developement. Also you can add the fact that you must be satisfied with your game’s direction, and to still have the will to work on. Anyway, it’s a very interesting experience and it improved my skills as a game designer. We’re already looking forward for the next game!

Technology
Obviously I used my beloved Citrus Engine for making this game and Starling framework. The IPA size (before submitting to Apple) is less than 17Mo! How did we achieve this size? It’s thanks to DragonBones and its awesome .dbswf format. AS3/AIR technology was perfect for making this game!

Flambe versus the World!

The game.

The (HTML5) engines war
You probably didn’t miss the engines war of the previous month: Unity announced Unity5 with WebGL support (which I already pre-ordered hurrah!) and Unreal Engine 4 did the same with an incredible price. That was for the big guys.
From a more indie friendly point of view, PixiJS continue to kick ass with awesome new features (cacheAsBitmap, blend mode for canvas, SpriteBatch…). Phaser using PixiJS as its rendering engine, is becoming much more popular every day and obviously more stable. PixiJS has really the wind in its sails because OpenFL switched to it for its HTML5 rendering engine!

Witchcraft Works
wwI had to make a new HTML5 game, Witchcraft Works, available through (iOS, Android wasn’t required) devices browser. Since Unity5 isn’t available yet and even if they will support WebGL it can’t be used on a mobile game browser while WebGL isn’t available on mobile yet (iOS I’m looking at you!). So I needed an engine working with Canvas.
In my latest HTML5 project, I summarized my first experience with PixiJS and the issue with performances (certainly not the engine’s fault). Since StarlingJS sounds like abandonned to me, and I wanted to test something new, CreateJS just has WebGL support, I didn’t feel confident with that engine (and add JavaScript coding…). It was finally time to give a try to Flambe, and I fell in love! I heard about it some years ago when I was most active in the Haxe community with a Citrus Engine‘s port.

With the same code base, coded in Haxe, Flambe enables to export Flash/AIR (web, mobile applications), Canvas (old browser, device mobile browser) & WebGL (web) builds!

Haxe
As you probably know, I hate coding in JavaScript. With my previous project I found TypeScript not bad at all, but I’d to make a TypeScript definition file for feeling comfortable with PixiJS. Using external libraries in the project, I didn’t have TypeScript support for them, that was a mess… Using Flambe I’m able to benefit from lots of Haxe’s libraries, and yeah coding in Haxe is lovely!

When I played with NME, 2 years ago we were fighting with the lack of IDE support. There is an excellent plugin for Sublime Text, but I can’t feel enough comfortable, I needed an IDE. But now even if you’re not on Windows (and its awesome Flash Develop), you have cross platform Haxe IDE support with FDT which isn’t bad at all and IntelliJ (I prefered FDT).
Flambe works with a command line interface, but you can also have easily a .hxml file for your IDE ;)

Flambe
Getting started with Flambe might be a bit complicated. Be sure to read its installation guide, have a look on the examples and on its official Cookbook. Holy crap we’re seriously missing documentation here! Don’t panic have a look on Mark Knol‘s one and you can already be grateful! Also be sure that Flambe will match with your project requirements (add no video support).

Entity component system
The first thing you will notice with Flambe is its entity component system. Unlike many frameworks which cloned Flash display list, Flambe works with an entity component system even for rendering stuff! Basically that means if you create a Sprite object, you can’t addChild children directly. You have to create a new Entity, add it a display object, and addChild this entity to a parent entity! It’s really troubling at first, but once you get it it works like a charm.
It’s sad that you can’t extend an Entity, it will be very useful for creating lots of custom objects, instead of that we are creating many Components for a project. I understand the design choice, but I find it too restrictive for making frameworks on top of Flambe. Also it would be cool to have getEntityAt method & I didn’t find an easy way to identify Entity/Component like we do with their name in Flash.
Anyway it’s very pleasant to use its entity component model once you get it.

Animations
With Flambe you will have to use Flump for your animations. Seems it sounds like a correct way for manipulating animations (you will write some JSFL for speeding your workflow), it’s crazy that Flambe can’t load SpriteSheet in any format provided by TexturePacker! I may have missed something but that means even for making a SpriteSheet of images you will have to import them in Flash and export them with Flump. What the fuck?

Performances
Ok here we go. On my latest HTML5 games I fought a lot with bad performances on mobile… Here it just works… like a charm! I didn’t have to fight with anything. I have a strong 60 fps on my iPhone4S and iPad3. Nothing to add. So kudo Bruno!!

I don’t need at all a Flash target, so why bother with Flambe?
Me neither, but having a Flash support will help you a lot with debugging your code!

Still not convinced by Flambe? Have a look on its showcase and see games made by big firms (Disney, Nickelodeon)!

Finally I’m back in the Haxe world and that’s very pleasant! Using Flambe at Da Viking Code gives me without any doubt a strong weapon for future HTML5 project! Feeling even more like a Viking ;)