Text layout with GlyphLayout and ScreenViewport in libGDX

I want to post some code (and screenshots!) for laying out text on screen with libGDX. libGDX changed the way it handles text recently, so I wanted to write new code to accommodate, and I also wanted to make the layout work relative to the bounds of a Viewport. GUI code can get to be a hassle real fast, so to keep it simple, there’s just three options for horizontal layout (left, center, right), and three for vertical layout (bottom, middle, top). Here’s the code: Continue reading →

Alternatives to Object-Oriented Programming

I wrote another post on the team blog, this time about moving away from OOP. I go over a couple of the problems I have with OOP, specifically modelling after real-world objects, and the isolation of objects. And, what’s more useful, I briefly introduce alternative approaches, with links to the most helpful articles and talks that I have found. Alternative approaches include Component-Entity-System, Data-Oriented Programming, and Semantic Compression. Check it out!


Installing nVidia Drivers on LMDE

The Why

I’m running Linux Mint Debian Edition (LMDE), and I needed to install the nvidia drivers in order to develop WebGL applications. Without the nvidia drivers, the display was a little laggy, but fast enough. Not being able to run WebGL, however, was kind of a show stopper.

So I did a bunch of research. There’s a lot of information out there, and only some of it is contradictory, but it’s all confusing. Everything seemed tailored for either Linux Mint or Debian, not LMDE. And there are also a lot of warnings about systems that don’t boot after rejecting the new drivers. All of this lead to a few hours of hand-wringing before I took the plunge.

Turns out it’s really easy. Continue reading →

Et tu, Enum?

Hidden Memory Allocations

I’ve worked hard to keep memory allocations out of the main loop of the game I’m working on. All the game entities, the components, the event and messaging systems, all those data structures get recycled. The pooling system in LibGDX has been a big help, but there’s still a lot of bookkeeping logic to cover to make it work correctly.

So today I finally got a chance to see how well I’d done by running the code on an actual device with DDMS watching allocations. I started tracking allocations, played through, and this is what I got:
Continue reading →

Loading IntMaps from JSON with libGDX

libGDX comes with a JSON serializer/deserializer that let’s you move data between JSON files and your Java data structures with just a few lines of code. This works mostly automatically, even with more complex data hierarchies.

We’ll start with an example of how this works, then how it breaks when reading an IntMap, and finally how to fix it.

For the working example, let’s take this class:

And this JSON:

Then you can deserialize the JSON to an ObjectMap with

Boom! Done. You can focus on data structures and data, and not worry about how to move them back and forth. Unless you try to pull the same trick with an IntMap…
Continue reading →