User prompt
use player instead of player.collisionBody for ball intersection
Code edit (3 edits merged)
Please save this source code
User prompt
fix ball passes still through players !
User prompt
fix ball passes through players !
User prompt
make ball colision with player effective : ball should bounce on them and if they have a speed it should bounce proportionally
User prompt
restore x screen limits for the ball : it should not go out of screen
User prompt
restore screen limits for the ball : it should not go out of screen
User prompt
use player speedX and speedY and position to calculate the resulting speed of the ball on collision
User prompt
in Player, calculate player speedX and speedX over time
User prompt
rework the ball movement : When a ball collids a ball it doesn't only apply *0.5 on speed !
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'collisionBody')' in or related to this line: 'if (player1.collisionBody && self.intersects(player1.collisionBody) || player2.collisionBody && self.intersects(player2.collisionBody)) {' Line Number: 47
Code edit (2 edits merged)
Please save this source code
User prompt
log and update the ball position
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'collisionBody')' in or related to this line: 'if (player1.collisionBody && self.intersects(player1.collisionBody) || player2.collisionBody && self.intersects(player2.collisionBody)) {' Line Number: 40
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'collisionBody')' in or related to this line: 'if (player1.collisionBody && self.intersects(player1.collisionBody) || player2.collisionBody && self.intersects(player2.collisionBody)) {' Line Number: 40
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'collisionBody')' in or related to this line: 'if (player1.collisionBody && self.intersects(player1.collisionBody) || player2.collisionBody && self.intersects(player2.collisionBody)) {' Line Number: 40
User prompt
ball can't go at under the ground (y > 2000)
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'collisionBody')' in or related to this line: 'if (self.intersects(player1.collisionBody) || self.intersects(player2.collisionBody)) {' Line Number: 40
User prompt
implement ball move
Code edit (2 edits merged)
Please save this source code
User prompt
MAKE BALL GO UP WHEN TOUCHED BY PLAYER !!!
User prompt
ball falls down when touched by player from bellow ! fix that
User prompt
repair : ball is not influenced by player contact
/**** * Classes ****/ //<Assets used in the game will automatically appear here> // Ball class var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); self.half = self.width / 2; self.speedX = 3; self.speedY = 3; self.lastCollisionTime = 0; // Pour éviter les collisions multiples self.update = function (net, player1, player2) { if (!ballCanMove) { return; } // Apply gravity self.applyGravity(); // Update ball position self.x += self.speedX; self.y += self.speedY; // Check for out of bounds if (self.y > 2000) { //console.log("REVERT!"); self.y = 2000; self.speedY = -Math.abs(self.speedY); // Make the ball bounce up } // Check for x screen limits if (self.x < 0) { self.x = 0; self.speedX = Math.abs(self.speedX); // Make the ball bounce to the right } else if (self.x > 2048) { self.x = 2048; self.speedX = -Math.abs(self.speedX); // Make the ball bounce to the left } //console.log("Ball position - x: ".concat(self.x, ", y: ").concat(self.y)); // Check for collisions with the net if (self.intersects(net)) { self.speedX *= -1; // Reverse horizontal direction } // Check for collisions with players if (player1 && self.intersects(player1) || player2 && self.intersects(player2)) { console.log("COLLID!"); var player = self.intersects(player1) ? player1 : player2; var angle = Math.atan2(self.y - player.y, self.x - player.x); var speed = Math.sqrt(self.speedX * self.speedX + self.speedY * self.speedY); var playerSpeed = Math.sqrt(player.speedX * player.speedX + player.speedY * player.speedY); var resultingSpeedX = speed * Math.cos(angle) + player.speedX * 0.5; var resultingSpeedY = speed * Math.sin(angle) + player.speedY * 0.5; self.speedX = resultingSpeedX; self.speedY = resultingSpeedY; // Adjust ball position to prevent it from passing through the player var overlapX = self.half + player.collisionBody.width / 2 - Math.abs(self.x - player.x); var overlapY = self.half + player.collisionBody.height / 2 - Math.abs(self.y - player.y); if (overlapX < overlapY) { self.x += (overlapX + 1) * Math.sign(self.x - player.x); } else { self.y += (overlapY + 1) * Math.sign(self.y - player.y); } } }; self.applyGravity = function () { this.speedY += 0.5; // Gravity effect }; }); // Net class var Net = Container.expand(function () { var self = Container.call(this); var netGraphics = self.attachAsset('net', { anchorX: 0.5, anchorY: 1, alpha: 0.1 }); }); // Player class var Player = Container.expand(function (index) { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 1, alpha: 0.95, scaleX: index === 2 ? -1 : 1, tint: index === 1 ? 0xADD8E6 : 0xFF6347 // Light blue for player 1, Tomato red for player 2 }); self.index = index; self.speedX = 0; // Initialize horizontal speed var collidSize = 220; self.collisionBody = LK.getAsset('collisionBody', { anchorX: 0.5, anchorY: 0.5, alpha: isDebug ? 1 : 0, width: collidSize, height: collidSize, y: -200 }); self.addChild(self.collisionBody); self.update = function () { var prevX = self.x; // Store previous x position var prevY = self.y; // Store previous y position if (self.jumping) { self.y -= 20; // Increase jump speed if (self.y <= 1300) { self.jumping = false; } } else if (self.y < 2000) { self.y += 20; // Increase fall speed for smoother jump } if (self.y < 0) { self.y = 0; // Prevent player1 from moving above the window } if (self.index === 2 && self.x > 1024 && self.x < 1024 + self.width / 2) { self.x = 1024 + self.width / 2; // Prevent player2 from moving past the net } self.speedX = self.x - prevX; // Calculate horizontal speed based on movement self.speedY = self.y - prevY; // Calculate vertical speed based on movement }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ var ballCanMove = false; var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); var isDebug = true; var player2Debug = true; var PLAYER1_INITIAL_X = 512; var PLAYER1_INITIAL_Y = 2000; var PLAYER2_INITIAL_X = 1536; var PLAYER2_INITIAL_Y = 2000; var player1 = new Player(1); var player2 = new Player(2); game.addChild(player1); game.addChild(player2); player1.x = PLAYER1_INITIAL_X; player1.y = PLAYER1_INITIAL_Y; player2.x = PLAYER2_INITIAL_X; player2.y = PLAYER2_INITIAL_Y; var net = new Net(); game.addChild(net); net.x = 2048 / 2; net.y = 2000; var ball = new Ball(); ball.x = PLAYER1_INITIAL_X; ball.y = 1300; // Set the ball's initial vertical position to y = 1300 game.addChild(ball); var score1 = 0; var score2 = 0; var scoreTxt1 = new Text2('0', { size: 100, fill: "#ffffff" }); scoreTxt1.anchor.set(0.5, 0); LK.gui.topLeft.addChild(scoreTxt1); var scoreTxt2 = new Text2('0', { size: 100, fill: "#ffffff" }); scoreTxt2.anchor.set(0.5, 0); LK.gui.topRight.addChild(scoreTxt2); game.update = function () { if (!ballCanMove && (ball.intersects(player1) || ball.intersects(player2))) { ballCanMove = true; } }; function resetBall() { ball.x = PLAYER1_INITIAL_X; ball.y = 1300; // Set the ball's initial vertical position to y = 1300 ball.speedX = 3; ball.speedY = 3; // Reset speed ballCanMove = false; // Reset ball movement flag /* player1.x = PLAYER1_INITIAL_X; player1.y = PLAYER1_INITIAL_Y; player2.x = PLAYER2_INITIAL_X; player2.y = PLAYER2_INITIAL_Y; */ } game.down = function (x, y, obj) { if (x <= 1024 - player1.width / 2 && x >= player1.width / 2) { player1.speedX = x - player1.x; // Update speedX based on movement player1.x = x; } if (player1.y >= PLAYER1_INITIAL_Y) { player1.jumping = true; } if (player2Debug && x >= 1024 + player2.width / 2 && x <= 2048 - player2.width / 2 && x >= player2.width / 2) { player2.speedX = x - player2.x; // Update speedX based on movement player2.x = x; } if (player2Debug && player2.y >= PLAYER2_INITIAL_Y) { player2.jumping = true; } }; game.move = function (x, y, obj) { if (x + player1.width / 2 <= 1024 && x - player1.width / 2 >= 0) { player1.speedX = x - player1.x; // Update speedX based on movement player1.x = x; } if (player2Debug && x - player2.width / 2 >= 1024 && x + player2.width / 2 <= 2048) { player2.speedX = x - player2.x; // Update speedX based on movement player2.x = x; } if (player2Debug && x < 1024 + player2.width / 2) { player2.x = 1024 + player2.width / 2; // Prevent player2 from moving past the net } if (player1.y < 0) { player1.y = 0; // Prevent player1 from moving above the window } }; game.up = function (x, y, obj) { // No action needed on up event };
===================================================================
--- original.js
+++ change.js
@@ -23,9 +23,9 @@
self.x += self.speedX;
self.y += self.speedY;
// Check for out of bounds
if (self.y > 2000) {
- console.log("REVERT!");
+ //console.log("REVERT!");
self.y = 2000;
self.speedY = -Math.abs(self.speedY); // Make the ball bounce up
}
// Check for x screen limits
@@ -41,10 +41,11 @@
if (self.intersects(net)) {
self.speedX *= -1; // Reverse horizontal direction
}
// Check for collisions with players
- if (player1 && player1.collisionBody && self.intersects(player1.collisionBody) || player2 && player2.collisionBody && self.intersects(player2.collisionBody)) {
- var player = self.intersects(player1.collisionBody) ? player1 : player2;
+ if (player1 && self.intersects(player1) || player2 && self.intersects(player2)) {
+ console.log("COLLID!");
+ var player = self.intersects(player1) ? player1 : player2;
var angle = Math.atan2(self.y - player.y, self.x - player.x);
var speed = Math.sqrt(self.speedX * self.speedX + self.speedY * self.speedY);
var playerSpeed = Math.sqrt(player.speedX * player.speedX + player.speedY * player.speedY);
var resultingSpeedX = speed * Math.cos(angle) + player.speedX * 0.5;
@@ -89,9 +90,9 @@
var collidSize = 220;
self.collisionBody = LK.getAsset('collisionBody', {
anchorX: 0.5,
anchorY: 0.5,
- alpha: isDebug ? 0.6 : 0,
+ alpha: isDebug ? 1 : 0,
width: collidSize,
height: collidSize,
y: -200
});
@@ -172,9 +173,9 @@
});
scoreTxt2.anchor.set(0.5, 0);
LK.gui.topRight.addChild(scoreTxt2);
game.update = function () {
- if (!ballCanMove && (player1.collisionBody && ball.intersects(player1.collisionBody) || player2.collisionBody && ball.intersects(player2.collisionBody) || ball.intersects(player1) || ball.intersects(player2))) {
+ if (!ballCanMove && (ball.intersects(player1) || ball.intersects(player2))) {
ballCanMove = true;
}
};
function resetBall() {
white volley ball.
top view of a concave blue (0xADD8E6) plastic button. 4 small black directionnal chevrons engraved : right, left, top , bottom.. Photorealistic
Beach ball. photo
full view of a Beach white towel with colored infinte logo. placed on the sand. photo
Start button in the shape of a white beach volleyball with « START » written on it in black. Photo