Jump to content

  • Log In with Google      Sign In   
  • Create Account

We need your feedback on a survey! Each completed response supports our community and gives you a chance to win a $25 Amazon gift card!


#ActualCryusaki

Posted 07 September 2013 - 09:48 AM

So my main issue when programming a game of pong is the ball reflection when it collides with the player or AI paddle. When I first made a pong game I just gave the ball's yvel a random value between -1 and 1 and just flipped the sign on the xvel when it struck the paddle but that is horrendously boring. The player needs some sort of control over the ball and I was going for the kind that when the ball strikes the paddle it is reflected in the direction based on where it struck the paddle.

 

There were a few ways I was going to go about this, the most simple seemed to split the paddle into a few sections. When the ball and paddle collide check how far down the middle of the ball hit the paddle and give the ball a preset yvel based on where it hit. Closer to the edges gave it a larger value and closer to the center made the yvel close into 0. This of course would go for beneath the center and would make the ball head downward.

 

However I thought there was a better way to do this. What I tried to do ended of working with some glitches. I would take the amount of pixel difference between the center of the ball and where it hit the paddle and made that into a reasonable yvel value. Its hard to explain so I will include code that I used which is in C++ SFML.

        // Ball/Paddle Collision
        else if(sBall.getPosition().x <= 30 &&
                sBall.getPosition().y + BALLHEIGHT >= sPaddle.getPosition().y &&
                sBall.getPosition().y <= sPaddle.getPosition().y + PADDLEHEIGHT)
        {
            bpdelta = (sBall.getPosition().y + BALLHEIGHT) - sPaddle.getPosition().y;
            std::cout << "BPDelta: " << bpdelta << std::endl;
            ballvelx = ballvelx * -1;
            if(bpdelta < 60)
            {
                ballvely = 1 / (bpdelta / 10);
                std::cout << "Delta <= 60" << std::endl;
                std::cout << ballvely << std::endl;
                if(ballvely > 0)
                    ballvely = ballvely + -1;
            }
            else if (bpdelta > 60)
            {
                bpdelta = bpdelta - 60;
                ballvely = bpdelta / 100;
                std::cout << "Delta > 60" << std::endl;
                std::cout << ballvely << std::endl;
            }
            else
                ballvely = 0;
        }

These are just things that I tried to do without copying anyone elses work, what I want to know is what is the easiest and proper way to do this. I am currently not concerned by spin with how fast the paddle was moving when striking the ball, thanks and sorry for the wall of text tongue.png


#1Cryusaki

Posted 07 September 2013 - 09:46 AM

So my main issue when programming a game of pong is the ball reflection when it collides with the player or AI paddle. When I first made a pong game I just gave the ball's yvel a random value between -1 and 1 and just flipped the sign on the xvel when it struck the paddle but that is horrendously boring. The player needs some sort of control over the ball and I was going for the kind that when the ball strikes the paddle it is reflected in the direction based on where it struck the paddle.

 

There were a few ways I was going to go about this, the most simple seemed to split the paddle into a few sections. When the ball and paddle collide check how far down the middle of the ball hit the paddle and give the ball a preset yvel based on where it hit. Closer to the edges gave it a larger value and closer to the center made the yvel close into 0. This of course would go for beneath the center and would make the ball head downward.

 

However I thought there was a better way to do this. What I tried to do ended of working with some glitches. I would take the amount of pixel difference between the center of the ball and where it hit the paddle and made that into a reasonable yvel value. Its hard to explain so I will include code that I used which is in C++ SFML.

 

These are just things that I tried to do without copying anyone elses work, what I want to know is what is the easiest and proper way to do this. I am currently not concerned by spin with how fast the paddle was moving when striking the ball, thanks and sorry for the wall of text tongue.png


PARTNERS