struggling with collision detection! - beginner
in
Programming Questions
•
2 years ago
- // Basic Breakout game
- // brick position
- float brickX;
- float brickY;
- // brick width and height
- float brickH;
- float brickW;
- // ball position
- float ballX;
- float ballY;
- // ball diameter
- float ballD;
- // ball direction
- float ballDx;
- float ballDy;
- // bat position
- float batX;
- // bat width
- float batW;
- float batH;
- // bat colour
- float batB;
- void setup() {
- size (500, 500, P2D);
- // set sizes of game items
- brickW = 100;
- brickH = 50;
- batW = 100;
- batH = 25;
- ballD = 25;
- batB = 255;
- // random brick position
- brickX = random(0, width - brickW);
- brickY = random(0, height / 2);
- // bat in the centre
- batX = (width/2) - (batW/2);
- // ball atop bat
- ballX = batX + (batW/2);
- ballY = height - batH - (ballD/2);
- // ball movement
- ballDx = random(-5, 5);
- ballDy = -5;
- rectMode(CORNER);
- ellipseMode(CENTER);
- }
- void draw() {
- // check for ball collision
- // with top or sides of bat
- checkBallAgainstBat();
- // check for ball collision with
- // left right and top walls
- // and bounce
- checkBallAgainstWalls();
- // check ball against brick
- checkBallAgainstBrick();
- // move the ball
- ballX += ballDx;
- ballY += ballDy;
- background(0);
- // draw the bat
- fill(0, 255, 0);
- rect(batX, height - batH, batW, batH);
- // draw the brick
- fill(0, 0, batB);
- batB = (batB + 10) % 255;
- rect(brickX, brickY, brickW, brickH);
- // draw the ball
- fill(255, 0, 0);
- ellipse(ballX, ballY, ballD, ballD);
- if (keyCode == 37) { // left cursor key
- batX -= 10;
- // keep it on the screen
- if (batX < 0) {
- batX = 0;
- }
- }
- if (keyCode == 39) {
- batX += 10;
- if (batX > (width - batW)) {
- batX = width - batW;
- }
- }
- }
- // when they let go of the key, reset the keyCode
- void keyReleased() {
- keyCode = -1;
- }
- // this function checks if the ball has hit the top or sides of the bat and update its
- // direction as appropriate so the ball bounces off the bat
- void checkBallAgainstBat(){
- }
- // this function checks if the ball has hit the brick. It should bounce off the brick and return true if so
- boolean checkBallAgainstBrick(){
- return false;
- }
- // this function checks if the ball has hit the top, left or right walls and update its
- // direction as appropriate so the ball bounces off the walls
- void checkBallAgainstWalls(){
- if (ballX + ballD > width){// right wall
- ballDx *= -1;
- }
- if (ballX - ballD < 0){// left wall
- ballDx *= -1;
- }
- if (ballY - ballD < 0){// top wall
- ballDy *= -1;
- }
- }
- void checkBallAgainstBat(){
- if (ballY - ballD > height - batH){
- ballDy *= -ballD;
- }
- if (ballX - ballD < width/2 + batW/2){
- ballD *= -ballD;
- }
- if (ballX - ballD < width/2 - batW/2){
- ballD *= -ballD;
- }
- }
anyone kind enough to explain it to me?
ps. all the basic concepts seemed pretty easy to me and this is the first brick wall i encountered :/
1