Java-Gaming.org Hi !
 Featured games (84) games approved by the League of Dukes Games in Showcase (595) Games in Android Showcase (168) games submitted by our members Games in WIP (646) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Fast & simple AABB collision detection  (Read 9789 times) 0 Members and 1 Guest are viewing this topic.
HeroesGraveDev

JGO Kernel

Medals: 359
Projects: 11
Exp: 3 years

┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻

 « Posted 2012-12-12 03:04:39 »

It seems that not too many people know this technique, though it is very simple.

It should take up roughly the same amount of time as 2 circle checks.

Here is AABB.class

 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35 `public class AABB{   protected Vector2Float pos, size;      public AABB(Vector2Float pos, Vector2Float size)   {      this.pos = pos;      this.size = size;   }      public static boolean collides(AABB a, AABB b)   {      if(Math.abs(a.pos.x - b.pos.x) < a.size.x + b.size.x)      {         if(Math.abs(a.pos.y - b.pos.y) < a.size.y + b.size.y)         {            return true;         }      }            return false;   }      public static boolean inside(AABB a, Vector2Float b)   {      if(Math.abs(a.pos.x - b.x) < a.size.x)      {         if(Math.abs(a.pos.y - b.y) < a.size.y)         {            return true;         }      }      return false;   }}`

And if you don't have your own implementation or whatever, the simplest possible Vector2Float:

 1  2  3  4 `public class Vector2Float{   public float x, y;}`

The method
 `collides()`
, checks whether 2 AABBs are colliding, and
 `inside()`
, checks whether a point is inside an AABB.

What you must remember, is that unlike most AABB implementations, the pos vector, is the centre of the AABB, and the size vector is half the actual size.

Enjoy!

(And could someone do a performance test with this test vs the normal rectangle collision test?  )

Riven
« League of Dukes »

« JGO Overlord »

Medals: 1001
Projects: 4
Exp: 16 years

 « Reply #1 - Posted 2012-12-12 04:08:16 »

What you must remember, is that unlike most AABB implementations, the pos vector, is the centre of the AABB, and the size vector is half the actual size.
Then rename your fields to center and halfSize!

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings!
HeroesGraveDev

JGO Kernel

Medals: 359
Projects: 11
Exp: 3 years

┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻

 « Reply #2 - Posted 2012-12-12 04:57:52 »

What you must remember, is that unlike most AABB implementations, the pos vector, is the centre of the AABB, and the size vector is half the actual size.
Then rename your fields to center and halfSize!

Why would I want to do that? I know what they mean. I do what makes sense to me.
If other people want to change the names, then they can. I just notified them of what the fields are.

BoBear2681

JGO Coder

Medals: 19

 « Reply #3 - Posted 2012-12-12 05:09:49 »

I like giving my variables misleading names also.  To hell with maintenance or readability.

A guy I used to work with wrote super-terse C code, and loved giving all variables 1- or 2-character names.  Not always the first letter of the "logical" name of the variable either.  "Who cares?  I know what the variables are for!" he would say.
Jimmt
« League of Dukes »

JGO Kernel

Medals: 161
Projects: 5
Exp: 3 years

 « Reply #4 - Posted 2012-12-12 05:20:19 »

Sure, you know what it's for, but isn't the whole point of posting the code so other people know and understand the code?
HeroesGraveDev

JGO Kernel

Medals: 359
Projects: 11
Exp: 3 years

┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻

 « Reply #5 - Posted 2012-12-12 05:59:04 »

Which is why I added the note at the bottom which started the whole discussion.

kaffiene
 « Reply #6 - Posted 2012-12-12 06:09:12 »

There's kind of a convention of tidying up code and making it readable when it's offered up to others.

But, whatever.
Roquen
 « Reply #7 - Posted 2012-12-12 06:42:47 »

Storing the center and the extent is (IHMO) the most reasonable.  Actually the names are fine as well, I'd probably use 'center' and extent or delta...but that's a different story.  But to be useful to others what the variables 'do' should be in code block...at least in the form of comments at the decl.
Pages: [1]
 ignore  |  Print

You cannot reply to this message, because it is very, very old.

 deepthought (49 views) 2015-06-30 15:39:44 deepthought (56 views) 2015-06-30 15:39:09 deepthought (65 views) 2015-06-30 15:36:52 Za\'Anzabar (43 views) 2015-06-29 05:44:54 TritonDreyja (49 views) 2015-06-24 17:10:40 CopyableCougar4 (49 views) 2015-06-23 00:34:45 BurntPizza (58 views) 2015-06-21 20:36:46 cookiecompiler (98 views) 2015-06-11 15:42:53 cookiecompiler (58 views) 2015-06-11 15:41:14 NegativeZero (82 views) 2015-06-11 09:49:18
 princec 31x wessles 23x orangepascal 21x CopyableCougar4 19x BurntPizza 18x EgonOlsen 17x opiop65 17x ags1 15x nsigma 15x Riven 13x KaiHH 12x Jesse 11x SauronWatchesYou 11x theagentd 11x KevinWorkman 11x sunburn 11x
 How Do I Expand My Game?by bashfrog2015-06-14 11:34:43List of Learning Resources2015-05-31 05:37:30Intersection Methodsby Roquen2015-05-29 08:19:33List of Learning Resources2015-05-05 10:20:32How to: JGO Wikiby Mac702015-02-17 20:56:162D Dynamic Lighting2015-01-01 20:25:42How do I start Java Game Development?by gouessej2014-12-27 19:41:21Resources for WIP gamesby kpars2014-12-18 10:26:14
 java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org