Collision detection on a 2D hexagonal grid

Posted by SundayMonday on Game Development See other posts from Game Development or by SundayMonday
Published on 2012-10-19T05:26:35Z Indexed on 2012/10/19 11:27 UTC
Read the original article Hit count: 450

I'm making a casual grid-based 2D iPhone game using Cocos2D. The grid is a "staggered" hex-like grid consisting of uniformly sized and spaced discs. It looks something like this.

I've stored the grid in a 2D array. Also I have a concept of "surrounding" grid cells. Namely the six grid cells surrounding a particular cell (except those on the boundries which can have less than six).

Anyways I'm testing some collision detection and it's not working out as well as I had planned. Here's how I currently do collision detection for a moving disc that's approaching the stationary group of discs:

  1. Calculate ij-coordinates of grid cell closest to moving cell using moving cell's xy-position
  2. Get list of surrounding grid cells using ij-coordinates
  3. Examine the surrounding cells. If they're all empty then no collision
  4. If we have some non-empty surrounding cells then compare the distance between the disc centers to some minimum distance required for a collision
  5. If there's a collision then place the moving disc in grid cell ij

So this works but not too well. I've considered a potentially simpler brute force approach where I just compare the moving disc to all stationary discs at each step of the game loop. This is probably feasible in terms of performance since the stationary disc count is 300 max. If not then some space-partitioning data structure could be used however that feels too complex.

What are some common approaches and best practices to collision detection in a game like this?

© Game Development or respective owner

Related posts about 2d

Related posts about collision-detection