Gregniuki commited on
Commit
b00bf58
·
verified ·
1 Parent(s): ae20685

Update script.js

Browse files
Files changed (1) hide show
  1. script.js +38 -17
script.js CHANGED
@@ -35,23 +35,44 @@ gameArea.addEventListener('touchmove', (e) => {
35
  });
36
 
37
  function handlePaddleCollision(paddleY, paddleX, isLeftPaddle) {
38
- let previousBallX = ballX - ballSpeedX;
39
-
40
- // Swept collision detection: Check if the ball crossed the paddle between frames
41
- if (
42
- previousBallX < paddleX + paddleWidth &&
43
- ballX > paddleX &&
44
- ballY + ballSize > paddleY &&
45
- ballY < paddleY + paddleHeight
46
- ) {
47
- const hitPosition = (ballY - (paddleY + paddleHeight / 2)) / (paddleHeight / 2);
48
- const angle = hitPosition * maxAngle * (Math.PI / 180);
49
-
50
- ballSpeedX = (isLeftPaddle ? 1 : -1) * Math.abs(ballSpeedX);
51
- ballSpeedY = Math.sin(angle) * Math.abs(ballSpeedX);
52
-
53
- // Reposition the ball outside the paddle to avoid clipping
54
- ballX = isLeftPaddle ? paddleX + paddleWidth + 1 : paddleX - ballSize - 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
56
  }
57
 
 
35
  });
36
 
37
  function handlePaddleCollision(paddleY, paddleX, isLeftPaddle) {
38
+ const ballRadius = ballSize / 2;
39
+
40
+ if (isLeftPaddle && ballSpeedX < 0) {
41
+ // Collision X position for left paddle
42
+ let collisionX = paddleX + paddleWidth + ballRadius;
43
+ let t = (collisionX - ballX) / ballSpeedX;
44
+ if (t >= 0 && t <= 1) {
45
+ let collisionY = ballY + ballSpeedY * t;
46
+ if (collisionY >= paddleY && collisionY <= paddleY + paddleHeight) {
47
+ // Collision detected with left paddle
48
+ let hitPosition = collisionY - (paddleY + paddleHeight / 2);
49
+ let angle = hitPosition / (paddleHeight / 2) * maxAngle * (Math.PI / 180);
50
+ // Update ball's velocity
51
+ ballSpeedX = Math.abs(ballSpeedX); // Reverse X direction for left paddle
52
+ ballSpeedY = Math.sin(angle) * ballSpeedX;
53
+ // Reposition ball outside the paddle
54
+ ballX = collisionX + ballRadius;
55
+ ballY = collisionY;
56
+ }
57
+ }
58
+ } else if (!isLeftPaddle && ballSpeedX > 0) {
59
+ // Collision X position for right paddle
60
+ let collisionX = paddleX - ballRadius;
61
+ let t = (collisionX - ballX) / ballSpeedX;
62
+ if (t >= 0 && t <= 1) {
63
+ let collisionY = ballY + ballSpeedY * t;
64
+ if (collisionY >= paddleY && collisionY <= paddleY + paddleHeight) {
65
+ // Collision detected with right paddle
66
+ let hitPosition = collisionY - (paddleY + paddleHeight / 2);
67
+ let angle = hitPosition / (paddleHeight / 2) * maxAngle * (Math.PI / 180);
68
+ // Update ball's velocity
69
+ ballSpeedX = -Math.abs(ballSpeedX); // Reverse X direction for right paddle
70
+ ballSpeedY = Math.sin(angle) * Math.abs(ballSpeedX);
71
+ // Reposition ball outside the paddle
72
+ ballX = collisionX - ballRadius;
73
+ ballY = collisionY;
74
+ }
75
+ }
76
  }
77
  }
78