/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ /**** * Ball Class ****/ var Ball = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0; self.direction = { x: 0, y: 0 }; self.update = function () { self.x += self.direction.x * self.speed; self.y += self.direction.y * self.speed; }; self.setGlow = function (isGlow) { self.removeChild(self.asset); self.asset = self.attachAsset(isGlow ? 'glow' : 'ball', { anchorX: 0.5, anchorY: 0.5 }); }; return self; }); /**** * Goalkeeper Class ****/ var Goalkeeper = Container.expand(function () { var self = Container.call(this); self.attachAsset('goalkeeper', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.resetPosition = function () { self.x = 2048 / 2; self.y = 580; // Positioned near bottom of goalpost self.speed = 5 + Math.floor(score / 10) * 2; }; self.update = function () { self.x += self.speed; if (self.x > 1700 || self.x < 300) { self.speed *= -1; } }; self.resetPosition(); return self; }); /**** * Goalpost Class ****/ var Goalpost = Container.expand(function () { var self = Container.call(this); self.attachAsset('goalpost', { anchorX: 0.5, anchorY: 0.5 }); self.x = 2048 / 2; self.y = 200; return self; }); /**** * Initialize Game ****/ /**** * Game Initialization ****/ var game = new LK.Game({ backgroundColor: 0x228B22 }); /**** * Game Code ****/ /**** * Game Variables ****/ var score = 0; var consecutiveGoals = 0; var useGlowBall = false; var firstGoalAchieved = false; var fiveGoalsStreakAchieved = false; var glowMasterAchieved = false; var ball, goalkeeper, goalpost, scoreTxt, flashEffect, crowdText; function initGame() { goalpost = game.addChild(new Goalpost()); goalkeeper = game.addChild(new Goalkeeper()); ball = game.addChild(new Ball()); resetBall(); scoreTxt = new Text2('Score: 0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); flashEffect = LK.getAsset('glow', { anchorX: 0.5, anchorY: 0.5, scaleX: 2048 / 100, scaleY: 2732 / 100 }); flashEffect.tint = 0xFFFFFF; flashEffect.alpha = 0; game.addChild(flashEffect); crowdText = new Text2('Goal!', { size: 200, fill: 0xFFFF00, stroke: 0x000000, strokeThickness: 5 }); crowdText.anchor.set(0.5, 0.5); crowdText.x = 2048 / 2; crowdText.y = 2732 / 2; crowdText.alpha = 0; game.addChild(crowdText); } /**** * Game Loop ****/ game.update = function () { ball.update(); goalkeeper.update(); if (checkGoal()) { if (score === 0 && !firstGoalAchieved) { displayAchievementText("First Goal!"); firstGoalAchieved = true; } if (useGlowBall) { score += 20; } else { if (useGlowBall) { score += 20; } else { score += 10; } } scoreTxt.setText('Score: ' + score); consecutiveGoals++; if (consecutiveGoals === 3) { useGlowBall = true; } else if (consecutiveGoals > 3) { consecutiveGoals = 0; useGlowBall = false; } resetBall(); goalkeeper.resetPosition(); playGoalCheer(); if (consecutiveGoals === 3) { displayAchievementText("Glow Ball!"); } if (consecutiveGoals === 5 && !fiveGoalsStreakAchieved) { displayAchievementText("5 Goals Streak!"); fiveGoalsStreakAchieved = true; } if (consecutiveGoals >= 3) { triggerFireworks(); } triggerWowMoments(); } else if (ball.y < 0) { resetBall(); consecutiveGoals = 0; useGlowBall = false; } else if (ball.intersects(goalkeeper)) { LK.showGameOver(); displayMotivationalMessage(); } updateWowEffects(); }; /**** * Functions ****/ function checkGoal() { var goalArea = { left: goalpost.x - goalpost.width / 2, right: goalpost.x + goalpost.width / 2, top: goalpost.y - goalpost.height / 2, bottom: goalpost.y + goalpost.height / 2 }; if (ball.x > goalArea.left && ball.x < goalArea.right && ball.y < goalArea.bottom && ball.y > goalArea.top) { if (ball.intersects(goalkeeper)) { return false; } return true; } return false; } function resetBall() { ball.x = 2048 / 2; ball.y = 2732 - 200; ball.speed = 0; ball.direction = { x: 0, y: 0 }; ball.setGlow(useGlowBall); } function playGoalCheer() { var cheer = consecutiveGoals % 3 === 0 ? LK.getSound('specialGoal') : LK.getSound('goal'); if (cheer) { cheer.play(); } } function triggerFireworks() { var firework = LK.getAsset('firework', { anchorX: 0.5, anchorY: 0.5 }); firework.x = 2048 / 2; firework.y = 500; firework.anchor.set(0.5, 0.5); game.addChild(firework); // Apply tween for magical effect tween(firework, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 1500, easing: tween.easeOut, onFinish: function onFinish() { game.removeChild(firework); } }); } function triggerWowMoments() { flashEffect.alpha = 1; crowdText.alpha = 1; } function updateWowEffects() { if (flashEffect.alpha > 0) { flashEffect.alpha -= 0.05; } if (crowdText.alpha > 0) { crowdText.alpha -= 0.05; } } /**** * Ball Kick Handler ****/ game.down = function (x, y) { var angle = Math.atan2(y - ball.y, x - ball.x); ball.direction = { x: Math.cos(angle), y: Math.sin(angle) }; ball.speed = 20; LK.getSound('kick').play(); }; initGame(); function displayAchievementText(text) { var achievementText = new Text2(text, { size: 150, fill: text === "Glow Ball!" ? 0x00008B : 0xFFFFFF, // Dark shining blue for 'Glow Ball!', white otherwise stroke: text === "Glow Ball!" ? 0xFFD700 : 0x000000, // Gold outline for 'Glow Ball!', black otherwise strokeThickness: 5 }); achievementText.anchor.set(0.5, 0.5); achievementText.x = 2048 / 2; achievementText.y = 2732 / 2; game.addChild(achievementText); LK.setTimeout(function () { game.removeChild(achievementText); }, 1500); } function displayMotivationalMessage() { var motivationalText = new Text2('Champions never quit!', { size: 150, fill: 0xFF0000, // Red color stroke: 0xFFFFFF, // White outline strokeThickness: 5 }); motivationalText.anchor.set(0.5, 0.5); motivationalText.x = 2048 / 2; motivationalText.y = 2732 - 800; game.addChild(motivationalText); LK.setTimeout(function () { game.removeChild(motivationalText); }, 2000); }
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
/****
* Ball Class
****/
var Ball = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.direction = {
x: 0,
y: 0
};
self.update = function () {
self.x += self.direction.x * self.speed;
self.y += self.direction.y * self.speed;
};
self.setGlow = function (isGlow) {
self.removeChild(self.asset);
self.asset = self.attachAsset(isGlow ? 'glow' : 'ball', {
anchorX: 0.5,
anchorY: 0.5
});
};
return self;
});
/****
* Goalkeeper Class
****/
var Goalkeeper = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('goalkeeper', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.resetPosition = function () {
self.x = 2048 / 2;
self.y = 580; // Positioned near bottom of goalpost
self.speed = 5 + Math.floor(score / 10) * 2;
};
self.update = function () {
self.x += self.speed;
if (self.x > 1700 || self.x < 300) {
self.speed *= -1;
}
};
self.resetPosition();
return self;
});
/****
* Goalpost Class
****/
var Goalpost = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('goalpost', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 2048 / 2;
self.y = 200;
return self;
});
/****
* Initialize Game
****/
/****
* Game Initialization
****/
var game = new LK.Game({
backgroundColor: 0x228B22
});
/****
* Game Code
****/
/****
* Game Variables
****/
var score = 0;
var consecutiveGoals = 0;
var useGlowBall = false;
var firstGoalAchieved = false;
var fiveGoalsStreakAchieved = false;
var glowMasterAchieved = false;
var ball, goalkeeper, goalpost, scoreTxt, flashEffect, crowdText;
function initGame() {
goalpost = game.addChild(new Goalpost());
goalkeeper = game.addChild(new Goalkeeper());
ball = game.addChild(new Ball());
resetBall();
scoreTxt = new Text2('Score: 0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
flashEffect = LK.getAsset('glow', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2048 / 100,
scaleY: 2732 / 100
});
flashEffect.tint = 0xFFFFFF;
flashEffect.alpha = 0;
game.addChild(flashEffect);
crowdText = new Text2('Goal!', {
size: 200,
fill: 0xFFFF00,
stroke: 0x000000,
strokeThickness: 5
});
crowdText.anchor.set(0.5, 0.5);
crowdText.x = 2048 / 2;
crowdText.y = 2732 / 2;
crowdText.alpha = 0;
game.addChild(crowdText);
}
/****
* Game Loop
****/
game.update = function () {
ball.update();
goalkeeper.update();
if (checkGoal()) {
if (score === 0 && !firstGoalAchieved) {
displayAchievementText("First Goal!");
firstGoalAchieved = true;
}
if (useGlowBall) {
score += 20;
} else {
if (useGlowBall) {
score += 20;
} else {
score += 10;
}
}
scoreTxt.setText('Score: ' + score);
consecutiveGoals++;
if (consecutiveGoals === 3) {
useGlowBall = true;
} else if (consecutiveGoals > 3) {
consecutiveGoals = 0;
useGlowBall = false;
}
resetBall();
goalkeeper.resetPosition();
playGoalCheer();
if (consecutiveGoals === 3) {
displayAchievementText("Glow Ball!");
}
if (consecutiveGoals === 5 && !fiveGoalsStreakAchieved) {
displayAchievementText("5 Goals Streak!");
fiveGoalsStreakAchieved = true;
}
if (consecutiveGoals >= 3) {
triggerFireworks();
}
triggerWowMoments();
} else if (ball.y < 0) {
resetBall();
consecutiveGoals = 0;
useGlowBall = false;
} else if (ball.intersects(goalkeeper)) {
LK.showGameOver();
displayMotivationalMessage();
}
updateWowEffects();
};
/****
* Functions
****/
function checkGoal() {
var goalArea = {
left: goalpost.x - goalpost.width / 2,
right: goalpost.x + goalpost.width / 2,
top: goalpost.y - goalpost.height / 2,
bottom: goalpost.y + goalpost.height / 2
};
if (ball.x > goalArea.left && ball.x < goalArea.right && ball.y < goalArea.bottom && ball.y > goalArea.top) {
if (ball.intersects(goalkeeper)) {
return false;
}
return true;
}
return false;
}
function resetBall() {
ball.x = 2048 / 2;
ball.y = 2732 - 200;
ball.speed = 0;
ball.direction = {
x: 0,
y: 0
};
ball.setGlow(useGlowBall);
}
function playGoalCheer() {
var cheer = consecutiveGoals % 3 === 0 ? LK.getSound('specialGoal') : LK.getSound('goal');
if (cheer) {
cheer.play();
}
}
function triggerFireworks() {
var firework = LK.getAsset('firework', {
anchorX: 0.5,
anchorY: 0.5
});
firework.x = 2048 / 2;
firework.y = 500;
firework.anchor.set(0.5, 0.5);
game.addChild(firework);
// Apply tween for magical effect
tween(firework, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 1500,
easing: tween.easeOut,
onFinish: function onFinish() {
game.removeChild(firework);
}
});
}
function triggerWowMoments() {
flashEffect.alpha = 1;
crowdText.alpha = 1;
}
function updateWowEffects() {
if (flashEffect.alpha > 0) {
flashEffect.alpha -= 0.05;
}
if (crowdText.alpha > 0) {
crowdText.alpha -= 0.05;
}
}
/****
* Ball Kick Handler
****/
game.down = function (x, y) {
var angle = Math.atan2(y - ball.y, x - ball.x);
ball.direction = {
x: Math.cos(angle),
y: Math.sin(angle)
};
ball.speed = 20;
LK.getSound('kick').play();
};
initGame();
function displayAchievementText(text) {
var achievementText = new Text2(text, {
size: 150,
fill: text === "Glow Ball!" ? 0x00008B : 0xFFFFFF,
// Dark shining blue for 'Glow Ball!', white otherwise
stroke: text === "Glow Ball!" ? 0xFFD700 : 0x000000,
// Gold outline for 'Glow Ball!', black otherwise
strokeThickness: 5
});
achievementText.anchor.set(0.5, 0.5);
achievementText.x = 2048 / 2;
achievementText.y = 2732 / 2;
game.addChild(achievementText);
LK.setTimeout(function () {
game.removeChild(achievementText);
}, 1500);
}
function displayMotivationalMessage() {
var motivationalText = new Text2('Champions never quit!', {
size: 150,
fill: 0xFF0000,
// Red color
stroke: 0xFFFFFF,
// White outline
strokeThickness: 5
});
motivationalText.anchor.set(0.5, 0.5);
motivationalText.x = 2048 / 2;
motivationalText.y = 2732 - 800;
game.addChild(motivationalText);
LK.setTimeout(function () {
game.removeChild(motivationalText);
}, 2000);
}
soccer ball 3d. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
real soccer goal post front view. Single Game Texture. In-Game asset. 3d. Blank background. High contrast. No shadows
Soft circular glow effect with a bright white center fading into soft blue and green edges. The glow should be smooth and slightly pulsating. Transparent background (PNG format), suitable for overlay on a soccer goal or ball to highlight special moments in a mobile soccer game.". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows