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;
}
self.applyGravity();
self.updatePosition();
self.checkWallCollisions();
if (net) {
self.checkNetCollisions(net);
}
if (player1 && player2) {
// Removed player collision handling from Player class
}
self.checkGroundCollision();
self.limitSpeed();
};
self.applyGravity = function () {
self.speedY += 0.5; // Gravity effect
};
self.updatePosition = function () {
self.x += self.speedX;
self.y += self.speedY;
};
self.limitSpeed = function () {
var MAX_SPEED = 30;
if (self.speedX > MAX_SPEED) {
self.speedX = MAX_SPEED;
}
if (self.speedX < -MAX_SPEED) {
self.speedX = -MAX_SPEED;
}
if (self.speedY > MAX_SPEED) {
self.speedY = MAX_SPEED;
}
if (self.speedY < -MAX_SPEED) {
self.speedY = -MAX_SPEED;
}
};
self.checkWallCollisions = function () {
if (self.x - self.half <= 0 || self.x + self.half >= 2048) {
self.speedX *= -1;
}
if (self.y - self.half <= 0) {
self.speedY *= -1;
}
};
self.checkNetCollisions = function (net) {
if (self.x + self.half > net.x - net.width / 2 && self.x - self.half < net.x + net.width / 2) {
if (self.y + self.half > net.y - net.height && self.y - self.half < net.y) {
self.speedY *= -1;
self.y = net.y - net.height - self.half;
} else if (self.y - self.half < net.y && self.y + self.half > net.y - net.height) {
self.speedX *= -1;
if (self.x < net.x) {
self.x = net.x - net.width / 2 - self.half;
} else {
self.x = net.x + net.width / 2 + self.half;
}
}
}
};
self.checkPlayerCollisions = function (player) {
if (self.intersects(player.collisionBody)) {
var angle = Math.atan2(self.y - player.y, self.x - player.x);
var speed = Math.sqrt(self.speedX * self.speedX + self.speedY * self.speedY);
self.speedX = speed * Math.cos(angle);
self.speedY = speed * Math.sin(angle);
self.speedX += player.speedX * 0.3; // Add player's horizontal speed to the ball
self.limitSpeed();
// Apply additional force based on player's movement
if (player.jumping) {
self.speedY -= 5; // Apply upward force if player is jumping
}
}
};
self.checkGroundCollision = function () {
if (self.y + self.half >= 2000) {
self.y = 2000 - self.half;
if (self.x < 1024) {
score2++;
scoreTxt2.setText(score2);
} else {
score1++;
scoreTxt1.setText(score1);
}
resetBall();
}
};
});
/*
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.update = function (net, player1, player2) {
if (!ballCanMove) {
return;
self.applyGravity = function () {
self.speedY += 0.5; // Gravity effect
};
}
;
self.applyGravity();
self.limitSpeed();
self.updatePosition();
self.checkWallCollisions();
if (net) {
self.checkNetCollisions(net);
}
if (player1 && player2 && ballCanMove) {
self.checkPlayerCollisions(player1, player2);
}
self.checkGroundCollision();
};
var MAX_SPEED = 30;
self.limitSpeed = function () {
if (self.speedX > MAX_SPEED) {
self.speedX = MAX_SPEED;
}
if (self.speedX < -MAX_SPEED) {
self.speedX = -MAX_SPEED;
}
if (self.speedY > MAX_SPEED) {
self.speedY = MAX_SPEED;
}
if (self.speedY < -MAX_SPEED) {
self.speedY = -MAX_SPEED;
}
};
self.updatePosition = function () {
self.x += self.speedX;
self.y += self.speedY;
};
self.checkWallCollisions = function () {
if (self.x - self.half <= 0 || self.x + self.half >= 2048) {
var angle = Math.atan2(self.y - self.y, self.x - (self.x <= 0 ? 0 : 2048));
var speed = Math.sqrt(self.speedX * self.speedX + self.speedY * self.speedY);
self.speedX = speed * Math.cos(angle);
self.speedY = speed * Math.sin(angle);
}
if (self.y - self.half <= 0 || self.y + self.half >= 2000) {
self.speedY *= -1;
}
};
self.checkNetCollisions = function (net) {
if (net && self.x + self.half > net.x - net.width / 2 && self.x - self.half < net.x + net.width / 2) {
if (self.y + self.half > net.y - net.height && self.y - self.half < net.y) {
var angle = Math.atan2(self.y - net.y, self.x - net.x);
var speed = Math.sqrt(self.speedX * self.speedX + self.speedY * self.speedY) * 0.8; // Reduce speed after collision
self.speedX = speed * Math.cos(angle);
self.speedY = speed * Math.sin(angle);
self.y = net.y - net.height - self.half; // Adjust position to be above the net
} else if (self.y - self.half < net.y && self.y + self.half > net.y - net.height) {
self.speedX *= -1; // Reflect horizontally when hitting the side of the net
if (self.x < net.x) {
self.x = net.x - net.width / 2 - self.half; // Adjust position to the left of the net
} else {
self.x = net.x + net.width / 2 + self.half; // Adjust position to the right of the net
}
}
}
};
self.checkPlayerCollisions = function (player1, player2) {
if (self.intersects(player1.collisionBody) || self.intersects(player2.collisionBody) || self.intersects(player1) || self.intersects(player2)) {
var player = self.intersects(player1.collisionBody) ? 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) * 0.8; // Reduce speed after collision
self.speedX = speed * Math.cos(angle);
self.speedY = speed * Math.sin(angle);
self.speedX += player.speedX * 0.3; // Add player's horizontal speed to the ball
self.limitSpeed();
// Apply additional force based on player's movement
if (player.jumping) {
self.speedY -= 5; // Apply upward force if player is jumping
}
}
};
self.checkGroundCollision = function () {
if (self.y + self.half >= 2000) {
if (self.x < 1024) {
score2++;
scoreTxt2.setText(score2);
} else {
score1++;
scoreTxt1.setText(score1);
}
var angle = Math.atan2(self.y - 2000, self.x - self.x);
var speed = Math.sqrt(self.speedX * self.speedX + self.speedY * self.speedY) * 0.7; // Reduce speed after collision
self.speedX = speed * Math.cos(angle);
self.speedY = speed * Math.sin(angle);
if (Math.abs(self.speedY) < 1) {
resetBall();
self.speedX = 0;
self.speedY = 0;
}
}
};
});
*/
// 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 ? 0.6 : 0,
width: collidSize,
height: collidSize,
y: -200
});
self.addChild(self.collisionBody);
self.update = function () {
var prevX = self.x; // Store previous x 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
};
});
/****
* 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 = game.addChild(new Player(1));
var player2 = game.addChild(new Player(2));
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 = game.addChild(new Ball());
ball.x = player1.x;
ball.y = 1300; // Set the ball's initial vertical position to y = 300
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.collisionBody) || ball.intersects(player2.collisionBody) || ball.intersects(player1) || ball.intersects(player2))) {
ballCanMove = true;
}
ball.update(net, player1, player2);
};
function resetBall() {
ball.x = PLAYER1_INITIAL_X;
ball.y = 1300; // Set the ball's initial vertical position to y = 1300
ball.speedX = 0;
ball.speedY = 0; // 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
};
Ball.prototype.applyGravity = function () {
this.speedY += 0.5; // Gravity effect
};
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