Java-Gaming.org Java4K winners: [ by our judges | by the community ]         
Featured games (67)
games approved by the League of Dukes
Games in Showcase (∞)
games submitted by our members



News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  Print  
  2d Platformer physics  (Read 1621 times)
0 Members and 2 Guests are viewing this topic.
Offline wookoouk

JGO n00b
*

Posts: 31



« on: 2012-01-11 13:55:56 »

Hey guys,

Im a noob here so hopefully I have posted in the right place.

I am working on a Cobalt style platformer/shooter, I watched this: http://flashpunk.net/2011/12/episode-12-moving-jumping-and-physics-for-platformers/
, its flash but I was able to convert is easily, the only thing is I cant figure out how to handle collision & gravity for the play jumping onto platforms, the for-mentioned video only talks about colliding with the bottom of the window.

The only way I could think about doing it looping trough all of my platforms and checking if the play was intersecting with one and if it was not allowing it to travel in y++ any more.
I'm sure this is a terrible approach and there is a better/best-practice approach that I am missing.

Thanks JGO-ers.

Martin
Offline ra4king

JGO Kernel
*****

Posts: 3131
Medals: 195


I'm the King!


« Reply #1 on: 2012-01-11 17:57:50 »

Hehehe, you're in luck, I just wrote a post explaining jumping in another thread.

For the collision, just check if the Y+Height-1 >= GroundY then set Y to GroundY-Height-2 Smiley

Offline wookoouk

JGO n00b
*

Posts: 31



« Reply #2 on: 2012-01-11 18:04:33 »

Thanks ra4King,

Will try what you put in the other post, the velocity effect makes such a difference to games.

What I had until now was:
         
      if (Keyboard.isKeyDown(Keyboard.KEY_A)){
         inputX -= 1;
      }
         
      if (Keyboard.isKeyDown(Keyboard.KEY_D)){
         inputX += 1;
      }
      if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)){
         jump();
      }
      
      
      //Update Controls
      v.x = playerSpeed * inputX;
      a.y = GRAVITY;
      
      //Apply Controls
      x = v.x;
      
      if (y+height > screenHeight){
         System.out.println("INTERSECTION ON Y");
         v.y = 0;
         y = screenHeight-height;
      }
      else{
         v.y += a.y;
         y += v.y;
      }


p.s V and A in my code are DIRTY!, they are classes that just contain:


public class A {
   public float x;
   public float y;
}
Pages: [1]
  Print  
 
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.065 seconds with 19 queries.