/****
* 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 = score >= 100 ? 5 + Math.floor(100 / 10) * 2 : 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());
// Add horizontal divider line between goalkeeper and player
var dividerLine = LK.getAsset('centerCircle', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 8,
scaleY: 0.08,
x: 2048 / 2,
y: (goalkeeper.y + (2732 - 200)) / 2
});
dividerLine.alpha = 0.7;
game.addChild(dividerLine);
ball = game.addChild(new Ball());
resetBall();
scoreTxt = new Text2('Score: 0', {
size: 100,
fill: 0xFFFFFF
});
LK.playMusic('backgroundMusic', {
loop: true,
fade: {
start: 0,
end: 1,
duration: 1000
}
}); // Play background music with fade-in effect
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 = score >= 100 ? 5 + Math.floor(100 / 10) * 2 : 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());
// Add horizontal divider line between goalkeeper and player
var dividerLine = LK.getAsset('centerCircle', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 8,
scaleY: 0.08,
x: 2048 / 2,
y: (goalkeeper.y + (2732 - 200)) / 2
});
dividerLine.alpha = 0.7;
game.addChild(dividerLine);
ball = game.addChild(new Ball());
resetBall();
scoreTxt = new Text2('Score: 0', {
size: 100,
fill: 0xFFFFFF
});
LK.playMusic('backgroundMusic', {
loop: true,
fade: {
start: 0,
end: 1,
duration: 1000
}
}); // Play background music with fade-in effect
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