Just ported Iain Lobb’s Gamepad classes to haXe

For the last few weeks I have been working on a personal game in haXe/NME that I will post about later. This weekend I got to the stage where I started to really think about user input. My goal for the game is to take full advantage of NME’s ability to target a bunch of platforms. I know I need to handle the game controls in a way that would allow for totally different input methods based on the target the game is published for i.e. keyboard for Flash/HTML5 in the browser, and accelerometer or touch screen controls for native iOS and Android apps.

This game is my first real project I have worked on by myself using both haXe and NME, so there has definitely been a learning curve. I felt like the way I would usually do keyboard input in a flash game would not be the best way to do things, mainly because of the multiple output targets. I needed a more object-orientated abstract way of handling the game controls. I also wanted something that would fit into my existing gameloop, and not force me to adopt some crazy bloated design pattern.

I am a huge fan of The Creative Coding Podcast, and basically everything that Iain Lobb and Seb Lee-Delisle get up to. So I remembered a little set of util classes Iain made in AS3 called Gamepad. I also remembered him mention on the podcast he was experimenting with haXe. I did a quick search but it seemed like no one had ported Gamepad over to haXe yet, and there didn’t even seem to be anything close to it for haxelib. I thought this was very strange for a language where game creation is one of it’s main uses.

I thought porting Gamepad would be a great way to learn a bit more about haXe, and get something useful at the end of it. It only took me a few hours, including testing it with my game, but by the end I had it working on Flash, C++, and HTML5 canvas. Check out adamharte/Gamepad-Haxe on GitHub, and don’t be afraid to fork it, and add issues to the issue tracker or just comment here. For the original ActionScript 3 version check out iainlobb/Gamepad on GitHub.

Some things I learned; A few small language differences coming from ActionScript. Such as there is no indexOf method of the Array class. Seems like the best way around this is to use a Lambda. The Lambda class has a bunch of static method for interacting with Iterable objects e.g. To get the index of an object in an array you might do:

[actionscript3]Lambda.indexOf(myItems, exampleItem);[/actionscript3]

That is a little less intuitive than the AS3 Array class, but fine once you know.

Now that I have the direct port and can start using it in my game, I will try to come up with ways I might improve on it, and make it work with other targets better. First I will try and get it working for touch screen controls on mobile devices, then maybe look into some strange behaviour I was getting with the HTML5 target.

So all round, I think I learnt a fair bit from porting Gamepad. It forced me to look deeper into some specifics that I needed to get to the end result. I will definitely be looking for other missing pieces that haXe can adopt. Big thanks to Iain Lobb for writing Gamepad in the first place, and especially for making it open-source.



The first post in a new blog seems like a strange thing. Odds are that if anyone even reads this, it will be well after I click publish. But I guess I have to start somewhere, or else it will carry on being one of the many things that I “plan to do one day”. I am kinda just doing this for myself anyway, as a brain dump, or as an excuse to look deeper into something I am interested in.

I know there are already a bunch of amazing people out there blogging about the same sort of topics I am interested in, but I will hopefully be offering my perspective and insight, and post about things relating to my professional/creative life. That could be anything from things I’m working on at my job, my personal time, or even things I come across that inspire or interest me.

I also have a bunch work and experiments, scattered around the interwebs, so though this shiny new blog would be the perfect place to collect all of that stuff together to show anyone who is interested, and keep people updated on new stuff I’m doing.

I Hope you enjoy reading my blog. Feel free to comment on anything, or contact me, and I will try my hardest to post regularly, and not post too much about my cat.


Random things about stuff