I'm working on a ping-pong style game (2d of course) and want to make it so the player can hit harder to make the ball go faster. I will only post the code that is relevant to the momentum. This is my current code for the paddle:
and for the ball:
I can compile without error but when I run it and the ball hits the player paddle I get the error terminal saying
"java.lang.NullPointerException
at Ball.checkPaddleCollision(Ball.java:62) <-- if(playerpaddle.getPaddleMomentumX() != 999999 && playerpaddle.getPaddleMomentumY() != 999999)
at Ball.act(Ball.java:29) <-- checkPaddleCollision();
"
This might be because of the mouse.getX() thing, so if it is do you think I should just use getX() of the paddle, since it follows the mouse?
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | public class PlayerPaddle extends Actor { private int mouseYcalc, mouseXcalc; public int mouseX5, mouseX4, mouseX3, mouseX2, mouseX1, mouseY5, mouseY4, mouseY3, mouseY2, mouseY1 = 0 ; public void act() { calculatePaddleMomentum(); } public void calculatePaddleMomentum() { MouseInfo mouse = Greenfoot.getMouseInfo(); if (mouse != null ) { mouseXcalc = mouse.getX(); mouseYcalc = mouse.getY(); mouseX5 = mouseX4; mouseX4 = mouseX3; mouseX3 = mouseX2; mouseX2 = mouseX1; mouseX1 = mouseXcalc; mouseY5 = mouseY4; mouseY4 = mouseY3; mouseY3 = mouseY2; mouseY2 = mouseY1; mouseY1 = mouseYcalc; } } public int getPaddleMomentumX() { MouseInfo mouse = Greenfoot.getMouseInfo(); if (mouse != null ) { return (( int )(mouseX5 - mouseX1)); } else return 999999 ; // for error detection in Ball class } public int getPaddleMomentumY() { MouseInfo mouse = Greenfoot.getMouseInfo(); if (mouse != null ) { return (( int )(mouseY5 - mouseY1)); } else return 999999 ; // for error detection in Ball 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 36 37 38 39 40 41 42 43 44 45 | public class Ball extends Actor { private String xDirection = "right" ; Table world = (Table)getWorld(); PlayerPaddle playerpaddle = (PlayerPaddle)world.playerpaddle; //Physics: private double yMomentum = 10 ; private double xMomentum = 5 ; public void checkPaddleCollision() { if (wait5 == 0 ) { PlayerPaddle collidedBlue = (PlayerPaddle)getOneIntersectingObject(PlayerPaddle. class ); if (collidedBlue != null && xDirection == "left" ) { if (playerpaddle.getPaddleMomentumX() != 999999 && playerpaddle.getPaddleMomentumY() != 999999 ) { xMomentum = playerpaddle.getPaddleMomentumX(); yMomentum = playerpaddle.getPaddleMomentumY(); xDirection = "right" ; } } public void act() { if (wait5 > 0 ) { wait5 = (wait5 - 1 ); } checkPaddleCollision(); calcPhysics(); moveBall(); } } EnemyPaddle collidedRed = (EnemyPaddle)getOneIntersectingObject(EnemyPaddle. class ); if (collidedRed != null && xDirection == "right" ) { xMomentum = ((Greenfoot.getRandomNumber( 7 ) + 3 ) * - 1 ); yMomentum = (((Greenfoot.getRandomNumber( 3 ) - 4 ) * (Greenfoot.getRandomNumber( 3 ) + 1 ))); xDirection = "left" ; } } } } |