Java-Gaming.org Hi !
Featured games (83)
games approved by the League of Dukes
Games in Showcase (512)
Games in Android Showcase (119)
games submitted by our members
Games in WIP (576)
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  
  Chunks and Collisions  (Read 1559 times)
0 Members and 1 Guest are viewing this topic.
Offline Geemili

Senior Duke


Medals: 9
Projects: 1
Exp: 2 years


No Games Finished


« Posted 2012-02-19 23:52:52 »

I am making a game, and I am loading it in chunks. AKA: I load only 15 320*240 pixel parts of the world at the time (20*15 blocks). My only problems are collisions. They work properly only in the chunk (0, 0). Chunks in the same quadrant have a weird offset, like being 1 block above where it should be. In the other quadrants, it doesn't work at all, because the collisions keep going to -1, which is out of bounds for my grid.

Here is my code, it is designed to take world coordinates and turn them into a chunk coordinate and then a chunk's block coordinate:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
public Block getBlock(float x, float y)
   {
      int chunkX = (int)( (x-(x%320))/320 );
      int chunkY = (int)( (y-(y%240))/240 );
      Chunk chunk = getChunk(chunkX, chunkY);
     
      int blockX = (int)( x-(chunk.getX()*320) );
      int blockY = (int)( y-(chunk.getY()*240) );
      return chunk.getBlock(blockX, blockY);
   }


I want to know why it isn't working, the code seems perfectly sound, and the results a little random. It would be a great help if you knew why, and told me!
Offline Beamery

Senior Newbie


Medals: 1



« Reply #1 - Posted 2012-02-20 04:24:28 »

It could be because you're doing a modulus on a floating point number. Since floats aren't stored exactly, it could lead to slight variations in results compared to what you would expect.  This might explain the weird off by one errors.
Offline DiEvAl

Junior Newbie





« Reply #2 - Posted 2012-02-23 06:51:45 »

When x is negative, x%320 will be negative too. Because of this, when -320 < x < 320, chunkX = 0, so this chunk is 640 blocks wide. Is it intentional?
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline UprightPath
« Reply #3 - Posted 2012-02-23 07:18:50 »

It seems like the whole operation of (x - (x %320) / 320) could be removed and replaced with Math.floor(x/320). At least, I think the effect you're going to there.

x = 330
x % 320 = 10
x - (x % 320) = 320
x - (x % 320) / 320 = 1
Math.floor(x / 320) = 1

The second one feels like you're doing X % 320.

x = 330
chunk = 1
chunk * 320 = 320
x - chunk*320 = 10

I think that taking care of these issues might help figure out the problem. You're using an excess of imprecise mathematics, that will cause problems and probably help confuse where the actual issue is coming from. :3

Offline Geemili

Senior Duke


Medals: 9
Projects: 1
Exp: 2 years


No Games Finished


« Reply #4 - Posted 2012-02-24 23:46:51 »

Thank you for explaining it, the collision works perfectly now. Cheesy

Also, is there any way to make this work when it reaches the negatives? I just tried it by making it absolute, but I knew that wouldn't work because the number line is reversed, but the chunks have their independent grids, so they aren't affected. So I end up with seemingly random collisions. Any ideas?

When x is negative, x%320 will be negative too. Because of this, when -320 < x < 320, chunkX = 0, so this chunk is 640 blocks wide. Is it intentional?

No, this is not intentional, but I also haven't had any problems with it yet.
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.

Longarmx (49 views)
2014-10-17 03:59:02

Norakomi (39 views)
2014-10-16 15:22:06

Norakomi (31 views)
2014-10-16 15:20:20

lcass (35 views)
2014-10-15 16:18:58

TehJavaDev (65 views)
2014-10-14 00:39:48

TehJavaDev (65 views)
2014-10-14 00:35:47

TehJavaDev (55 views)
2014-10-14 00:32:37

BurntPizza (72 views)
2014-10-11 23:24:42

BurntPizza (43 views)
2014-10-11 23:10:45

BurntPizza (84 views)
2014-10-11 22:30:10
Understanding relations between setOrigin, setScale and setPosition in libGdx
by mbabuskov
2014-10-09 22:35:00

Definite guide to supporting multiple device resolutions on Android (2014)
by mbabuskov
2014-10-02 22:36:02

List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06
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!