Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (404)
games submitted by our members
Games in WIP (289)
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  
  [SOLVED] Collision detection, when hitting head  (Read 508 times)
0 Members and 1 Guest are viewing this topic.
Offline Mads

JGO Ninja


Medals: 23
Projects: 3


One for all!


« Posted 2011-10-31 04:50:37 »

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
I already have the collisions done, for when the player is falling.
It looks like this:
[code]
/**
    * Check if we hit a brick, when falling
    * @param worldX
    * @param worldY
    * @param step
    * @return
    */

   public double checkBrickTop(double worldX, double worldY, double step) {
      if (isInsideBrick(worldX, worldY)) {
         double shouldBeY = worldY/10 +1 ;
         double diff = shouldBeY - worldY;
         return step - diff;
      } else {
         return step;
      }
   }


1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
if (player.getYVelocity() <= 0) {
            // Falling!
           if (player.getYVelocity() <= -1) {
               player.setYVelocity(-1);
            } else {
               player.setYVelocity(player.getYVelocity() - 0.1);
            }
            // Calculate where the motherf**ker's gonna land
           newY = player.getWorldY() + player.getYVelocity();
            if (level.isInsideBrick(player.getWorldX(), newY - (player.getHeight() + 2))) {
               double yTrans = level.checkBrickTop(player.getWorldX(),
                     player.getWorldY() - player.getHeight(),
                     player.getYVelocity());
               player.setWorldY(player.getWorldY() + yTrans);
               System.out.println(yTrans + " " + player.getYVelocity());
               player.setJumping(false);
            } else {
               player.setWorldY(newY);
            }
         }


However, I've hit a brick wall now. I need to do roughly the same thing, but for when I hit a brick, when jumping.
Current code looks like this, but it doesn't work correctly - player gets teleported high above when brick is hit:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
/**
    * Check if we hit a brick, when rising
    * @param worldX
    * @param worldY
    * @param step
    * @return
    */

   public double checkBrickBottom(double worldX, double worldY, double step) {
      if (isInsideBrick(worldX, worldY)) {
         double shouldBeY = worldY/10 +1 ;
         double diff = shouldBeY - worldY;
         return step - diff;
      } else {
         return step;
      }
   }


1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
if (player.getYVelocity() > 0) {
            // Rising into the air!
           player.setYVelocity(player.getYVelocity() - 0.1);
         }
         double newY = player.getWorldY() + player.getYVelocity();
         if (level.isInsideBrick(player.getWorldX(), newY + 1)) {
            double yTrans = level.checkBrickTop(player.getWorldX(),
                  player.getWorldY(),
                  player.getYVelocity());
            player.setWorldY(player.getWorldY() + yTrans);
         } else {
            player.setWorldY(newY);
         }



It's probably something small, I just don't see it.[/code]

Offline theagentd
« Reply #1 - Posted 2011-10-31 12:26:12 »

Your code is filled with accidental code tags, making it really hard to read it. Try to fix it... xD

You're most likely calculating checkBrickTop() wrongly. Instead of trying to find the error in the position and then subtracting it from the position, why not just snap (=set) the player position to the top of the brick? It should be much less error prone.

Myomyomyo.
Offline Mads

JGO Ninja


Medals: 23
Projects: 3


One for all!


« Reply #2 - Posted 2011-11-01 00:36:41 »

Your code is filled with accidental code tags, making it really hard to read it. Try to fix it... xD

You're most likely calculating checkBrickTop() wrongly. Instead of trying to find the error in the position and then subtracting it from the position, why not just snap (=set) the player position to the top of the brick? It should be much less error prone.

Did that now, thanks Smiley

Games published by our own members! Check 'em out!
Try the Free Demo of Titan Attacks
Offline aazimon

Senior Member


Medals: 5



« Reply #3 - Posted 2011-11-01 20:31:55 »

I believe you problem is in the checkBrickBottom(). You are subtracting the difference, which will put your player higher on the screen. You want your player lower. Try adding the diff value.
Offline Mads

JGO Ninja


Medals: 23
Projects: 3


One for all!


« Reply #4 - Posted 2011-11-02 04:15:53 »

I just changed it to calculate the players location on top of the brick, and set it to that location  Roll Eyes
Thanks for the reply though,that was probably my problem.

Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Get high quality music tracks for your game!

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

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (21 views)
2013-05-17 21:29:12

alaslipknot (32 views)
2013-05-16 21:24:48

gouessej (62 views)
2013-05-16 00:53:38

gouessej (61 views)
2013-05-16 00:17:58

theagentd (71 views)
2013-05-15 15:01:13

theagentd (65 views)
2013-05-15 15:00:54

StreetDoggy (105 views)
2013-05-14 15:56:26

kutucuk (129 views)
2013-05-12 17:10:36

kutucuk (129 views)
2013-05-12 15:36:09

UnluckyDevil (138 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
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!
Page created in 0.257 seconds with 21 queries.