/**** * Classes ****/ // Assets will be automatically created based on usage in the code. // Ball class var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('basketball', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = { x: 0, y: 0 }; self.update = function () { if (!isDragging) { // Check for left wall bounce if (self.x <= 25 + ballGraphics.width / 2) { self.velocity.x = Math.abs(self.velocity.x); // Reverse velocity for bounce wallBounceCounter++; } else if (self.x >= 2023 - ballGraphics.width / 2) { self.velocity.x = -Math.abs(self.velocity.x); // Reverse velocity for right wall bounce wallBounceCounter++; } // Check for right wall bounce if (self.x >= 2023 - ballGraphics.width / 2) { self.velocity.x = -Math.abs(self.velocity.x); // Reverse velocity for bounce } else if (self.x <= 25 + ballGraphics.width / 2) { self.velocity.x = Math.abs(self.velocity.x); // Reverse velocity for left wall bounce } self.x += self.velocity.x; self.y += self.velocity.y; self.velocity.y += 0.98; // Gravity effect ballGraphics.rotation += self.velocity.y / 100; // Add rotation to the ball based on its velocity if (self.y > 2732) { self.velocity.y = 0; // Stop the ball when it hits the floor self.y = 2732; // Reset position to the bottom of the screen ballGraphics.rotation = 0; // Reset rotation when the ball hits the floor } } }; }); // DragBox class var DragBox = Container.expand(function () { var self = Container.call(this); self.visible = false; // Make the box invisible self.width = 200; // Set the width of the box self.height = 200; // Set the height of the box }); // Hoop class var Hoop = Container.expand(function () { var self = Container.call(this); var hoopGraphics = self.attachAsset('hoop', { anchorX: 0.5, anchorY: 0.5 }); self.bounceLeft = new Container(); self.bounceLeft.width = 10; self.bounceLeft.height = hoopGraphics.height; self.bounceLeft.x = hoopGraphics.x - hoopGraphics.width / 2; self.bounceLeft.y = hoopGraphics.y; self.addChild(self.bounceLeft); self.bounceRight = new Container(); self.bounceRight.width = 10; self.bounceRight.height = hoopGraphics.height; self.bounceRight.x = hoopGraphics.x + hoopGraphics.width / 2 - 10; self.bounceRight.y = hoopGraphics.y; self.addChild(self.bounceRight); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Light blue background to simulate sky }); /**** * Game Code ****/ // Add background image var backgroundImage = game.addChild(LK.getAsset('backgroundImage', { anchorX: 0.5, // Center anchor horizontally anchorY: 0.5, // Center anchor vertically scaleX: 1, scaleY: 1, x: 950, // Center position horizontally y: 1366 // Center position vertically })); var wallBounceCounter = 0; var hoopScoreCounter = 2; // Variables for hoop movement var hoopMoving = false; var hoopDirection = 1; var hoopSpeed = 2; // Function to handle the dragging of the ball function dragBall() { // Handle drag start game.on('down', function (obj) { var pos = obj.event.getLocalPosition(game); var dx = pos.x - ball.x; var dy = pos.y - ball.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < ball.width / 2) { dragStart.x = pos.x; dragStart.y = pos.y; isDragging = true; isInPlay = true; } else { isDragging = false; isInPlay = false; } }); // Handle drag move game.on('move', function (obj) { if (isDragging && isInPlay) { var pos = obj.event.getLocalPosition(game); var dx = pos.x - dragStart.x; var dy = pos.y - dragStart.y; var distance = Math.sqrt(dx * dx + dy * dy); // Calculate the speed var speed = Math.sqrt(ball.velocity.x * ball.velocity.x + ball.velocity.y * ball.velocity.y); // Limit the speed to a maximum value var maxSpeed = 75; if (speed > maxSpeed) { var ratio = maxSpeed / speed; ball.velocity.x *= ratio; ball.velocity.y *= ratio; } // Limit the speed to what it would be at the 500 pixel drag zone if (pos.y > 500) { pos.y = 500; } } }); // Handle drag end game.on('up', function (obj) { if (isDragging) { var pos = obj.event.getLocalPosition(game); var tempVelocityX = (pos.x - dragStart.x) / 10; var tempVelocityY = (pos.y - dragStart.y) / 10; var speed = Math.sqrt(tempVelocityX * tempVelocityX + tempVelocityY * tempVelocityY); var maxSpeed = 100; if (speed > maxSpeed) { var ratio = maxSpeed / speed; ball.velocity.x = tempVelocityX * ratio; ball.velocity.y = tempVelocityY * ratio; } else { ball.velocity.x = tempVelocityX; ball.velocity.y = tempVelocityY; } isDragging = false; } }); } // Call the function to handle the dragging of the ball dragBall(); // Function to respawn the ball at the top of the screen function respawnBall() { ball = game.addChild(new Ball()); ball.x = 1024; // Center horizontally ball.y = 0; // Start at the top of the screen ball.velocity = { x: 0, y: 0 }; // Make the ball still when it respawns isDragging = true; // Keep the ball still until interacted with isInPlay = false; } var ball; var hoop; var isDragging = false; var isInPlay = false; var dragStart = { x: 0, y: 0 }; var consecutiveBaskets = 0; var multiplierActive = false; var streakCooldown = false; // Initialize ball and hoop function initGame() { ball = game.addChild(new Ball()); ball.x = 1024; // Center horizontally ball.y = 100; // Start 100 pixels down from the top of the screen ball.velocity = { x: 0, y: 0 }; // Make the ball still when it first spawns isDragging = true; // Keep the ball still until interacted with hoop = game.addChild(new Hoop()); hoop.x = 1024; // Center horizontally hoop.y = 2632; // Move the hoop up by 100 pixels var hoopStartPosition = { x: hoop.x, y: hoop.y }; // Define the starting position of the hoop } // Check for scoring function checkScore() { if (ball.intersects(hoop)) { consecutiveBaskets++; if (consecutiveBaskets >= 8 && !multiplierActive && !streakCooldown && !countdownTxt) { LK.setScore(LK.getScore() + 6); var countdown = 10; countdownTxt = new Text2(countdown.toString(), { size: 150, fill: "#ffffff" }); countdownTxt.anchor.set(0, 0); LK.gui.topLeft.addChild(countdownTxt); var countdownInterval = LK.setInterval(function () { countdown--; if (countdown <= 0) { LK.clearInterval(countdownInterval); LK.gui.center.removeChild(countdownTxt); countdownTxt = null; multiplierActive = false; streakCooldown = true; LK.setTimeout(function () { streakCooldown = false; }, 30000); } else { countdownTxt.setText(countdown.toString()); } }, 1000); } else { LK.setScore(LK.getScore() + hoopScoreCounter + wallBounceCounter); } // Reset consecutiveBaskets and wall bounce counter after scoring consecutiveBaskets = 0; wallBounceCounter = 0; // Update score text scoreTxt.setText(LK.getScore()); // Start moving the hoop if score is over 25 and hoop is not already moving // Increase hoop speed by 1.2x every 25 score after the first 25 if (LK.getScore() > 25 && !hoopMoving) { hoopMoving = true; } else if (LK.getScore() % 25 == 0 && LK.getScore() > 25) { hoopSpeed *= 1.2; } // Move the ball back to the respawn position ball.x = 1024; // Center horizontally ball.y = 100; // Start 100 pixels down from the top of the screen ball.velocity = { x: 0, y: 0 }; // Make the ball still when it respawns isDragging = true; // Keep the ball still until interacted with isInPlay = false; // Move the hoop to a new location var newX = Math.random() * (1848 - 100) + 100; // Random x position between 100 and 1848 var newY = Math.random() * (2532 - 1200) + 1200; // Random y position between 1200 and 2532 // Add glide animation to the hoop when it moves to a different location var glideTime = 0.5; // Glide time in seconds var glideFrames = glideTime * 60; // Convert glide time to frames var glideX = (newX - hoop.x) / glideFrames; // Calculate glide distance per frame for x var glideY = (newY - hoop.y) / glideFrames; // Calculate glide distance per frame for y var glideFrame = 0; // Initialize glide frame counter var glideInterval = LK.setInterval(function () { hoop.x += glideX; hoop.y += glideY; glideFrame++; if (glideFrame >= glideFrames) { LK.clearInterval(glideInterval); // Clear interval when glide animation is done } }, 1000 / 60); // Set interval to match game frame rate } } // Game tick LK.on('tick', function () { if (!isDragging) { ball.update(); } checkScore(); // Move the hoop left and right if hoopMoving is true if (hoopMoving) { hoop.x += hoopDirection * hoopSpeed; // Reverse direction if hoop hits screen boundaries if (hoop.x <= 100 || hoop.x >= 1948) { hoopDirection *= -1; } } // Check if the ball is off the screen or hits the bottom if (ball.x <= 2 || ball.x >= 2046 || ball.y >= 2730) { if (!multiplierActive) { consecutiveBaskets = 0; } if (LK.getScore() == 0) { wallBounceCounter = 0; // Reset wall bounce counter when player fails to get a basket with score = 0 // Move the ball back to the respawn position ball.x = 1024; // Center horizontally ball.y = 100; // Start 100 pixels down from the top of the screen ball.velocity = { x: 0, y: 0 }; // Make the ball still when it respawns isDragging = true; // Keep the ball still until interacted with isInPlay = false; // Create an array of retry messages var retryMessages = ['Try Again', 'One More Time', 'Just Click On It', 'How Hard Can It Be?']; // Randomly select a retry message var retryMessage = retryMessages[Math.floor(Math.random() * retryMessages.length)]; // Check if a retry message is currently displayed if (currentRetryMessage) { // Fade out the current retry message var fadeOutFrames = fadeOutTime * 60; // Convert fade out time to frames var fadeOutAlpha = 1 / fadeOutFrames; // Calculate alpha decrease per frame var fadeOutFrame = 0; // Initialize fade out frame counter var fadeOutInterval = LK.setInterval(function () { currentRetryMessage.alpha -= fadeOutAlpha; fadeOutFrame++; if (fadeOutFrame >= fadeOutFrames) { LK.clearInterval(fadeOutInterval); // Clear interval when fade out animation is done LK.gui.center.removeChild(currentRetryMessage); currentRetryMessage = null; } }, 1000 / 60); // Set interval to match game frame rate } else { currentRetryMessage = null; } // Display the selected retry message for 3 seconds var tryAgainTxt = new Text2(retryMessage, { size: 150, fill: "#ffffff", stroke: "#000000", // Black stroke strokeThickness: 10 // Stroke thickness of 10 }); tryAgainTxt.anchor.set(0.5, 0); tryAgainTxt.y = 500; tryAgainTxt.alpha = 0; // Set initial alpha to 0 for fade in LK.gui.center.addChild(tryAgainTxt); currentRetryMessage = tryAgainTxt; // Fade in animation var fadeInTime = 0.25; // Fade in time in seconds var fadeInFrames = fadeInTime * 60; // Convert fade in time to frames var fadeInAlpha = 1 / fadeInFrames; // Calculate alpha increase per frame var fadeInFrame = 0; // Initialize fade in frame counter var fadeInInterval = LK.setInterval(function () { tryAgainTxt.alpha += fadeInAlpha; fadeInFrame++; if (fadeInFrame >= fadeInFrames) { LK.clearInterval(fadeInInterval); // Clear interval when fade in animation is done } }, 1000 / 60); // Set interval to match game frame rate // Fade out animation var fadeOutTime = 0.25; // Fade out time in seconds LK.setTimeout(function () { var fadeOutFrames = fadeOutTime * 60; // Convert fade out time to frames var fadeOutAlpha = 1 / fadeOutFrames; // Calculate alpha decrease per frame var fadeOutFrame = 0; // Initialize fade out frame counter var fadeOutInterval = LK.setInterval(function () { tryAgainTxt.alpha -= fadeOutAlpha; fadeOutFrame++; if (fadeOutFrame >= fadeOutFrames) { LK.clearInterval(fadeOutInterval); // Clear interval when fade out animation is done LK.gui.center.removeChild(tryAgainTxt); } }, 1000 / 60); // Set interval to match game frame rate }, 3000 - fadeOutTime * 1000); // Start fade out animation 0.25 seconds before removing the text } else { LK.showGameOver(); } } }); // Initialize game elements initGame(); // Create score text var scoreTxt = new Text2('0', { size: 150, fill: "#ffffff", stroke: "#000000", // Black stroke strokeThickness: 5 // Stroke thickness of 5 }); // Create a variable to store the current retry message text object var currentRetryMessage; // Center the score text horizontally, anchor point set at the middle of its top edge. scoreTxt.anchor.set(0.5, 0); // Add the score text to the GUI overlay. // The score text is attached to the top-center of the screen. LK.gui.center.addChild(scoreTxt);
/****
* Classes
****/
// Assets will be automatically created based on usage in the code.
// Ball class
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballGraphics = self.attachAsset('basketball', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = {
x: 0,
y: 0
};
self.update = function () {
if (!isDragging) {
// Check for left wall bounce
if (self.x <= 25 + ballGraphics.width / 2) {
self.velocity.x = Math.abs(self.velocity.x); // Reverse velocity for bounce
wallBounceCounter++;
} else if (self.x >= 2023 - ballGraphics.width / 2) {
self.velocity.x = -Math.abs(self.velocity.x); // Reverse velocity for right wall bounce
wallBounceCounter++;
}
// Check for right wall bounce
if (self.x >= 2023 - ballGraphics.width / 2) {
self.velocity.x = -Math.abs(self.velocity.x); // Reverse velocity for bounce
} else if (self.x <= 25 + ballGraphics.width / 2) {
self.velocity.x = Math.abs(self.velocity.x); // Reverse velocity for left wall bounce
}
self.x += self.velocity.x;
self.y += self.velocity.y;
self.velocity.y += 0.98; // Gravity effect
ballGraphics.rotation += self.velocity.y / 100; // Add rotation to the ball based on its velocity
if (self.y > 2732) {
self.velocity.y = 0; // Stop the ball when it hits the floor
self.y = 2732; // Reset position to the bottom of the screen
ballGraphics.rotation = 0; // Reset rotation when the ball hits the floor
}
}
};
});
// DragBox class
var DragBox = Container.expand(function () {
var self = Container.call(this);
self.visible = false; // Make the box invisible
self.width = 200; // Set the width of the box
self.height = 200; // Set the height of the box
});
// Hoop class
var Hoop = Container.expand(function () {
var self = Container.call(this);
var hoopGraphics = self.attachAsset('hoop', {
anchorX: 0.5,
anchorY: 0.5
});
self.bounceLeft = new Container();
self.bounceLeft.width = 10;
self.bounceLeft.height = hoopGraphics.height;
self.bounceLeft.x = hoopGraphics.x - hoopGraphics.width / 2;
self.bounceLeft.y = hoopGraphics.y;
self.addChild(self.bounceLeft);
self.bounceRight = new Container();
self.bounceRight.width = 10;
self.bounceRight.height = hoopGraphics.height;
self.bounceRight.x = hoopGraphics.x + hoopGraphics.width / 2 - 10;
self.bounceRight.y = hoopGraphics.y;
self.addChild(self.bounceRight);
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Light blue background to simulate sky
});
/****
* Game Code
****/
// Add background image
var backgroundImage = game.addChild(LK.getAsset('backgroundImage', {
anchorX: 0.5,
// Center anchor horizontally
anchorY: 0.5,
// Center anchor vertically
scaleX: 1,
scaleY: 1,
x: 950,
// Center position horizontally
y: 1366 // Center position vertically
}));
var wallBounceCounter = 0;
var hoopScoreCounter = 2;
// Variables for hoop movement
var hoopMoving = false;
var hoopDirection = 1;
var hoopSpeed = 2;
// Function to handle the dragging of the ball
function dragBall() {
// Handle drag start
game.on('down', function (obj) {
var pos = obj.event.getLocalPosition(game);
var dx = pos.x - ball.x;
var dy = pos.y - ball.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < ball.width / 2) {
dragStart.x = pos.x;
dragStart.y = pos.y;
isDragging = true;
isInPlay = true;
} else {
isDragging = false;
isInPlay = false;
}
});
// Handle drag move
game.on('move', function (obj) {
if (isDragging && isInPlay) {
var pos = obj.event.getLocalPosition(game);
var dx = pos.x - dragStart.x;
var dy = pos.y - dragStart.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// Calculate the speed
var speed = Math.sqrt(ball.velocity.x * ball.velocity.x + ball.velocity.y * ball.velocity.y);
// Limit the speed to a maximum value
var maxSpeed = 75;
if (speed > maxSpeed) {
var ratio = maxSpeed / speed;
ball.velocity.x *= ratio;
ball.velocity.y *= ratio;
}
// Limit the speed to what it would be at the 500 pixel drag zone
if (pos.y > 500) {
pos.y = 500;
}
}
});
// Handle drag end
game.on('up', function (obj) {
if (isDragging) {
var pos = obj.event.getLocalPosition(game);
var tempVelocityX = (pos.x - dragStart.x) / 10;
var tempVelocityY = (pos.y - dragStart.y) / 10;
var speed = Math.sqrt(tempVelocityX * tempVelocityX + tempVelocityY * tempVelocityY);
var maxSpeed = 100;
if (speed > maxSpeed) {
var ratio = maxSpeed / speed;
ball.velocity.x = tempVelocityX * ratio;
ball.velocity.y = tempVelocityY * ratio;
} else {
ball.velocity.x = tempVelocityX;
ball.velocity.y = tempVelocityY;
}
isDragging = false;
}
});
}
// Call the function to handle the dragging of the ball
dragBall();
// Function to respawn the ball at the top of the screen
function respawnBall() {
ball = game.addChild(new Ball());
ball.x = 1024; // Center horizontally
ball.y = 0; // Start at the top of the screen
ball.velocity = {
x: 0,
y: 0
}; // Make the ball still when it respawns
isDragging = true; // Keep the ball still until interacted with
isInPlay = false;
}
var ball;
var hoop;
var isDragging = false;
var isInPlay = false;
var dragStart = {
x: 0,
y: 0
};
var consecutiveBaskets = 0;
var multiplierActive = false;
var streakCooldown = false;
// Initialize ball and hoop
function initGame() {
ball = game.addChild(new Ball());
ball.x = 1024; // Center horizontally
ball.y = 100; // Start 100 pixels down from the top of the screen
ball.velocity = {
x: 0,
y: 0
}; // Make the ball still when it first spawns
isDragging = true; // Keep the ball still until interacted with
hoop = game.addChild(new Hoop());
hoop.x = 1024; // Center horizontally
hoop.y = 2632; // Move the hoop up by 100 pixels
var hoopStartPosition = {
x: hoop.x,
y: hoop.y
}; // Define the starting position of the hoop
}
// Check for scoring
function checkScore() {
if (ball.intersects(hoop)) {
consecutiveBaskets++;
if (consecutiveBaskets >= 8 && !multiplierActive && !streakCooldown && !countdownTxt) {
LK.setScore(LK.getScore() + 6);
var countdown = 10;
countdownTxt = new Text2(countdown.toString(), {
size: 150,
fill: "#ffffff"
});
countdownTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(countdownTxt);
var countdownInterval = LK.setInterval(function () {
countdown--;
if (countdown <= 0) {
LK.clearInterval(countdownInterval);
LK.gui.center.removeChild(countdownTxt);
countdownTxt = null;
multiplierActive = false;
streakCooldown = true;
LK.setTimeout(function () {
streakCooldown = false;
}, 30000);
} else {
countdownTxt.setText(countdown.toString());
}
}, 1000);
} else {
LK.setScore(LK.getScore() + hoopScoreCounter + wallBounceCounter);
}
// Reset consecutiveBaskets and wall bounce counter after scoring
consecutiveBaskets = 0;
wallBounceCounter = 0;
// Update score text
scoreTxt.setText(LK.getScore());
// Start moving the hoop if score is over 25 and hoop is not already moving
// Increase hoop speed by 1.2x every 25 score after the first 25
if (LK.getScore() > 25 && !hoopMoving) {
hoopMoving = true;
} else if (LK.getScore() % 25 == 0 && LK.getScore() > 25) {
hoopSpeed *= 1.2;
}
// Move the ball back to the respawn position
ball.x = 1024; // Center horizontally
ball.y = 100; // Start 100 pixels down from the top of the screen
ball.velocity = {
x: 0,
y: 0
}; // Make the ball still when it respawns
isDragging = true; // Keep the ball still until interacted with
isInPlay = false;
// Move the hoop to a new location
var newX = Math.random() * (1848 - 100) + 100; // Random x position between 100 and 1848
var newY = Math.random() * (2532 - 1200) + 1200; // Random y position between 1200 and 2532
// Add glide animation to the hoop when it moves to a different location
var glideTime = 0.5; // Glide time in seconds
var glideFrames = glideTime * 60; // Convert glide time to frames
var glideX = (newX - hoop.x) / glideFrames; // Calculate glide distance per frame for x
var glideY = (newY - hoop.y) / glideFrames; // Calculate glide distance per frame for y
var glideFrame = 0; // Initialize glide frame counter
var glideInterval = LK.setInterval(function () {
hoop.x += glideX;
hoop.y += glideY;
glideFrame++;
if (glideFrame >= glideFrames) {
LK.clearInterval(glideInterval); // Clear interval when glide animation is done
}
}, 1000 / 60); // Set interval to match game frame rate
}
}
// Game tick
LK.on('tick', function () {
if (!isDragging) {
ball.update();
}
checkScore();
// Move the hoop left and right if hoopMoving is true
if (hoopMoving) {
hoop.x += hoopDirection * hoopSpeed;
// Reverse direction if hoop hits screen boundaries
if (hoop.x <= 100 || hoop.x >= 1948) {
hoopDirection *= -1;
}
}
// Check if the ball is off the screen or hits the bottom
if (ball.x <= 2 || ball.x >= 2046 || ball.y >= 2730) {
if (!multiplierActive) {
consecutiveBaskets = 0;
}
if (LK.getScore() == 0) {
wallBounceCounter = 0; // Reset wall bounce counter when player fails to get a basket with score = 0
// Move the ball back to the respawn position
ball.x = 1024; // Center horizontally
ball.y = 100; // Start 100 pixels down from the top of the screen
ball.velocity = {
x: 0,
y: 0
}; // Make the ball still when it respawns
isDragging = true; // Keep the ball still until interacted with
isInPlay = false;
// Create an array of retry messages
var retryMessages = ['Try Again', 'One More Time', 'Just Click On It', 'How Hard Can It Be?'];
// Randomly select a retry message
var retryMessage = retryMessages[Math.floor(Math.random() * retryMessages.length)];
// Check if a retry message is currently displayed
if (currentRetryMessage) {
// Fade out the current retry message
var fadeOutFrames = fadeOutTime * 60; // Convert fade out time to frames
var fadeOutAlpha = 1 / fadeOutFrames; // Calculate alpha decrease per frame
var fadeOutFrame = 0; // Initialize fade out frame counter
var fadeOutInterval = LK.setInterval(function () {
currentRetryMessage.alpha -= fadeOutAlpha;
fadeOutFrame++;
if (fadeOutFrame >= fadeOutFrames) {
LK.clearInterval(fadeOutInterval); // Clear interval when fade out animation is done
LK.gui.center.removeChild(currentRetryMessage);
currentRetryMessage = null;
}
}, 1000 / 60); // Set interval to match game frame rate
} else {
currentRetryMessage = null;
}
// Display the selected retry message for 3 seconds
var tryAgainTxt = new Text2(retryMessage, {
size: 150,
fill: "#ffffff",
stroke: "#000000",
// Black stroke
strokeThickness: 10 // Stroke thickness of 10
});
tryAgainTxt.anchor.set(0.5, 0);
tryAgainTxt.y = 500;
tryAgainTxt.alpha = 0; // Set initial alpha to 0 for fade in
LK.gui.center.addChild(tryAgainTxt);
currentRetryMessage = tryAgainTxt;
// Fade in animation
var fadeInTime = 0.25; // Fade in time in seconds
var fadeInFrames = fadeInTime * 60; // Convert fade in time to frames
var fadeInAlpha = 1 / fadeInFrames; // Calculate alpha increase per frame
var fadeInFrame = 0; // Initialize fade in frame counter
var fadeInInterval = LK.setInterval(function () {
tryAgainTxt.alpha += fadeInAlpha;
fadeInFrame++;
if (fadeInFrame >= fadeInFrames) {
LK.clearInterval(fadeInInterval); // Clear interval when fade in animation is done
}
}, 1000 / 60); // Set interval to match game frame rate
// Fade out animation
var fadeOutTime = 0.25; // Fade out time in seconds
LK.setTimeout(function () {
var fadeOutFrames = fadeOutTime * 60; // Convert fade out time to frames
var fadeOutAlpha = 1 / fadeOutFrames; // Calculate alpha decrease per frame
var fadeOutFrame = 0; // Initialize fade out frame counter
var fadeOutInterval = LK.setInterval(function () {
tryAgainTxt.alpha -= fadeOutAlpha;
fadeOutFrame++;
if (fadeOutFrame >= fadeOutFrames) {
LK.clearInterval(fadeOutInterval); // Clear interval when fade out animation is done
LK.gui.center.removeChild(tryAgainTxt);
}
}, 1000 / 60); // Set interval to match game frame rate
}, 3000 - fadeOutTime * 1000); // Start fade out animation 0.25 seconds before removing the text
} else {
LK.showGameOver();
}
}
});
// Initialize game elements
initGame();
// Create score text
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff",
stroke: "#000000",
// Black stroke
strokeThickness: 5 // Stroke thickness of 5
});
// Create a variable to store the current retry message text object
var currentRetryMessage;
// Center the score text horizontally, anchor point set at the middle of its top edge.
scoreTxt.anchor.set(0.5, 0);
// Add the score text to the GUI overlay.
// The score text is attached to the top-center of the screen.
LK.gui.center.addChild(scoreTxt);
8-Bit basketball. No lighting is present on the ball. The lighting does not affect the look of the ball.. Single Game Texture. In-Game asset. 2d. Transparent background. High contrast. No shadows.
8-Bit hula hoop. The color is red. The hoop is flat facing towards the ground. Single Game Texture. In-Game asset. 2d. Transparent background. High contrast. No shadows.
Basketball court. One basketball hoop with background and net is shown. Facing downcourt. 8-Bit style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.