Katherine Barrios

Google Labs VoltAir Game Built with Qt

Published Monday July 21st, 2014
14 Comments on Google Labs VoltAir Game Built with Qt
Posted in Android, Announcements, Dev Loop, Labs, Qt, Qt Quick

As the dog days of summer carry on, we at Digia, Qt are swatting down flies, mosquitoes and bees while we fan ourselves in the unusual summer heat currently striking Scandinavia … in Oslo … at least.

Meanwhile, on a cool note, the Fun Propulsion Labs at Google announced last week that, VoltAir a single and multi-player game built with Qt is available for download via the Google Play Store and as open source software. Coolbeans!

VoltAir was developed to provide an example of a C++ game designed for both Android and Android TV and the folks at Google also tested it on Nexus 5, Nexus 7, Moto X by Motorola, Android TV, and some Samsung devices.

Check Out VoltAir (Courtesy of Google Developers – YouTube)


Google’s Fun Propulsion Labs VoltAir Project page said:

“We looked at various UI frameworks and game engines and decided Qt was not only the more daring choice due to the lack of games developed in it, but also a very interesting one due to the future ability to extend it into a rich editor, support from Digia, and many technical development advantages such as:

  • Provided a platform abstraction that allowed us to also develop and test on desktop, reducing iteration time
  • Included a scene graph and out of the box “serialization” mechanism
  • Allowed for easily building a fluid UI system that was good for games
  • Provided an object model with dynamic JavaScript bindings, properties, as well as callback mechanisms for easy scripting and prototyping
  • Contained a well integrated IDE (QtCreator)
  • Included a flexible LGPL License.”


To top it off, our friends at Google gave some more kudos to Qt Quick:

“Qt Quick’s strongest feature by far is its abstraction for building user interfaces. It is, in fact, very well suited for the types of UIs you would expect in a game, where there is a lot of latitude taken in the UI element design and animations are abundant.”

Thanks, amigos from Fun Propulsion Labs Google. We appreciate the kind words and we wish much success to VoltAir.

Go on everybody – learn more about the VoltAir Project and find out why, how they developed the game. Download it now from the Google Play Store or play around with it yourself with the open source code.

Do you like this? Share it
Share on LinkedInGoogle+Share on FacebookTweet about this on Twitter

Posted in Android, Announcements, Dev Loop, Labs, Qt, Qt Quick


That’s a really cool game – great that Google did use Qt for game development!!

For more open source games built with Qt see here:

It contains full source code of games like tower defense, platformer games, puzzle games or a Flappy Bird game, with step-by-step tutorials how to create the games on your own.

Cristian says:

Hopefully Digia had a look at the workarounds page: http://google.github.io/VoltAir/doc/main/html/index.html#24

There are some workarounds they had to implement.

The less workarounds the better 🙂

1) Handling Android lifecycle events within Qt
This might have got solved for Qt 5.4 https://bugreports.qt-project.org/browse/QTBUG-29069 . It might also be responsible for https://bugreports.qt-project.org/browse/QTBUG-39149 . Currently these are the the most problematic issues of Qt on Android. Hopefully they will launch 5.4 having these issues fixed.

2) QQmlComponent::create() blocks the UI thread
I’m also encountering this problem. At start I may need to create 500+ sprites, each with about 10+ states. On a high-end tablet it may take 2-3 seconds, but on the low-end devices it may take as much as 15 seconds. It should be examined if Qt.createComponent(..) could work faster or in a way that doesn’t completely block the UI thread. The QML Instantiator was a nice candidate to replace this function.However it is not much better than using Qt.createComponent(..) together with a JS array. Plus the inconvenience that you cannot use lazy initialization with the QML…

Great that Google also found Qt to be a great match for games!

The more Qt based games, the better 🙂

For more open source Qt games, have a look here:

It contains many open source 2D games like platformer games, strategy games like tower defense, puzzle or arcade games.

We also created an open-source Flappy Bird game based on Qt, which comes with a full tutorial how we created it.

Krisztián Szegi says:

“but also a very interesting one due to the future ability to extend it into a rich editor”

I cautiously say, that maybe it is better for Qt that Google doesn’t dictate…
Now it is relatively lightweight, platform independent (kind of) framework, which gets a lot of expreience (and feature ported upstream) from KDE Frameworks, and a broad spectrum of programmers. I know KDE’s programmers get their salary partly because Google’s support for this awesome desktop enviroment (maybe they support Digia too?), so they are involved in ways, but am I allowed to say I like the direction and way Qt evolves, as an “independent” framework?
Long live Qt!

Alastair says:

“I know KDE’s programmers get their salary partly because Google’s support for this awesome desktop enviroment (maybe they support Digia too?), ”

I think this would be news to most KDE programmers 😉

m][sko says:

this is interesting idea
QML Image does not cache textures
Once no Images reference a particular source, the backing texture is freed. However, in VoltAir, these textures may get loaded again only moments later. For improved performance, we implemented a TextureManager as part of the VoltAir renderer for caching these textures.

It will be nice to have some sort of cache for images that are still presented in atlas cache in scenegraph. if this kind of cache don’t exist already. As bitmap is still presented in atlas texture.

Gunnar Sletta says:

“QML Image does not cache textures” -> Of course we cache textures 🙂 We cache all Image based elements which are visible and referenced in addition to up to 2Mb worth of textures that HAVE been on screen in case they come back. A game may end up using a lot more than 2Mbs worth of textures though. If a game wants to load 64Mb of worth of textures on startup and retain it for the duration of the game, we don’t have an API for that.

markg85 says:

I find Google’s results very interesting. Specially considering that QML was introduced to us – developers – as “ui with game like performance”, but when someone comes by and develops a game for it then you need to go through hoops to make it work. Just a funny observation 🙂

As for the QML Image{} cache. I think it should do a time based periodically check of the images and delete them if unused for – lets say – one minute. I think this will benefit most if not all use cases of QML.

Mikhail Protasov says:

What compiler is used to create VoltAir Game?

DNS says:

I have quickly created a small game, only using QML and Javascript, no images and basic graphics. QT is perfect for that and QtQuickCompiler offers great performances under the commercial license.

zlutor says:

QML&Javascript can be enough for many things…

E.g. this app is made using only those two:

“… Qt was not only the more daring choice due to the lack of games developed in it”

I would like to challenge this misconception. I have developed quite a number of games for Android with Qt. Most of them took only a few days to make. Other games took even 4-5 months, but they’re quite something. For example Bubble Shooter Quest, that is available on both iOS and Google Play, could easily be a top 100 game.

Jewel Blaster Quest is a special game too with lots of potential:

Commenting closed.

Get started today with Qt Download now