Error in game pong collisions

0

I'm doing a pong and I give graphics with a library. all collisions are fine except that when the ball bounces with the lower edge of the paddles it enters them, bounces and then continues its trajectory.

#include "pch.h"
#include "raylib.h"

int screenWidth = 800;
int screenHeight = 450;
struct Paddle
{
    const float basePosX0 = (screenWidth / 2) + (screenWidth / 3);
    const float basePosX1 = (screenWidth / 2) - (screenWidth / 3);
    const float basePosY = (screenHeight / 2) - 35;
    float posX0 = basePosX0;
    float posX1 = basePosX1;
    float posY = basePosY;
    float sizeX = 15;
    float sizeY = 70;
    int vel = 5;
    int keyUp = KEY_UP;
    int keyDown = KEY_DOWN;
    Rectangle collider = { posX0,posY, sizeX,sizeY };
};
struct Ball
{
    const float basePosX = screenWidth / 2;
    const float basePoxY = (screenHeight / 2) - 4;
    float size = 8;
    int velX = 5;
    int velY = 0;
    float posX = basePosX;
    float posY = basePoxY;
    Rectangle collider = { posX,posY, size, size };
};
bool flag = true;
Paddle paddles[2];
Ball gameBall;
void PaddleMovement(Paddle &paddle);
void BallMovement();
void CollisionDetector();
void PaddleCollision();
void ColliderUpdate();
void DrawEverything();

int main()
{
    paddles[1].collider.x = paddles[1].posX1;
    paddles[1].keyUp = KEY_W;
    paddles[1].keyDown = KEY_S;

    InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing");
    SetTargetFPS(60);

    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        DrawEverything();
        BeginDrawing();
        ClearBackground(BLACK);


        ColliderUpdate();
        DrawEverything();
        CollisionDetector();
        PaddleCollision();


        PaddleMovement(paddles[0]);
        PaddleMovement(paddles[1]);
        if(flag == true){
            BallMovement();
        }


        EndDrawing();
    }
    CloseWindow();        // Close window and OpenGL context
}

void DrawEverything() 
{
    DrawRectangle(paddles[0].posX0, paddles[0].posY, paddles[0].sizeX, paddles[0].sizeY, WHITE);
    DrawRectangle(paddles[1].posX1, paddles[1].posY, paddles[1].sizeX, paddles[1].sizeY, WHITE);
    DrawCircle(gameBall.posX, gameBall.posY, gameBall.size, WHITE);
}
void CollisionDetector()
{
    if ((gameBall.posY > screenHeight) || (gameBall.posY < 0))
    {
        gameBall.velY *= -1;
    }
    if ((gameBall.posX > screenWidth) || (gameBall.posX < (screenWidth - screenWidth)))
    {
        paddles[0].posX0 = paddles[0].basePosX0;
        paddles[1].posX1 = paddles[1].basePosX1;
        gameBall.posX = gameBall.basePosX;
        gameBall.posY = gameBall.basePoxY;
        DrawEverything();
        flag = false;
    }
}
void PaddleCollision()
{
    if (CheckCollisionRecs(gameBall.collider,paddles[0].collider))
    {
        gameBall.velY = 5;
        gameBall.velX *= -1;

    }
    if (CheckCollisionRecs(gameBall.collider, paddles[1].collider))
    {
        gameBall.velY = 5;
        gameBall.velX *= -1;
    }
}
void PaddleMovement(Paddle &paddle) 
{

    if (IsKeyDown(paddle.keyUp))
    {
        paddle.posY -= paddle.vel;
        flag = true;
    }
    if (IsKeyDown(paddle.keyDown))
    {
        flag = true;
        paddle.posY += paddle.vel;
    }
}
void BallMovement()
{
    gameBall.posX += gameBall.velX;
    gameBall.posY += gameBall.velY;
}
void ColliderUpdate()
{
    paddles[0].collider = { paddles[0].posX0,paddles[0].posY,paddles[0].sizeX,paddles[0].sizeY };
    paddles[1].collider = { paddles[1].posX1,paddles[1].posY,paddles[1].sizeX,paddles[1].sizeY };
    gameBall.collider = { gameBall.posX,gameBall.posY,gameBall.size,gameBall.size };
}
    
asked by Humberto Escorce 22.11.2018 в 19:10
source

0 answers