Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (477)
Games in Android Showcase (108)
games submitted by our members
Games in WIP (536)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Fast & simple AABB collision detection  (Read 6796 times)
0 Members and 1 Guest are viewing this topic.
Offline HeroesGraveDev

JGO Kernel


Medals: 239
Projects: 11
Exp: 2 years


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


« Posted 2012-12-12 04: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?  Smiley)

Offline Riven
« League of Dukes »

JGO Overlord


Medals: 749
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #1 - Posted 2012-12-12 05: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
Offline HeroesGraveDev

JGO Kernel


Medals: 239
Projects: 11
Exp: 2 years


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


« Reply #2 - Posted 2012-12-12 05: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.

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline BoBear2681

JGO Coder


Medals: 18



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

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

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.
Offline Jimmt
« League of Dukes »

JGO Kernel


Medals: 128
Projects: 4
Exp: 3 years



« Reply #4 - Posted 2012-12-12 06: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?
Offline HeroesGraveDev

JGO Kernel


Medals: 239
Projects: 11
Exp: 2 years


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


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

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

Offline kaffiene
« Reply #6 - Posted 2012-12-12 07: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.
Offline Roquen
« Reply #7 - Posted 2012-12-12 07: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.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

CogWheelz (17 views)
2014-07-30 21:08:39

Riven (23 views)
2014-07-29 18:09:19

Riven (15 views)
2014-07-29 18:08:52

Dwinin (12 views)
2014-07-29 10:59:34

E.R. Fleming (33 views)
2014-07-29 03:07:13

E.R. Fleming (12 views)
2014-07-29 03:06:25

pw (43 views)
2014-07-24 01:59:36

Riven (43 views)
2014-07-23 21:16:32

Riven (30 views)
2014-07-23 21:07:15

Riven (31 views)
2014-07-23 20:56:16
List of Learning Resources
by SilverTiger
2014-07-31 18:29:50

List of Learning Resources
by SilverTiger
2014-07-31 18:26:06

List of Learning Resources
by SilverTiger
2014-07-31 13:54:12

HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54
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
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!