/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BackgroundStar = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('backgroundStar', { anchorX: 0.5, anchorY: 0.5 }); self.twinkleTimer = 0; self.twinkleSpeed = Math.random() * 60 + 30; // Random twinkling speed self.baseAlpha = 0.3 + Math.random() * 0.5; // Random base brightness self.update = function () { self.twinkleTimer++; // Create twinkling effect self.alpha = self.baseAlpha + Math.sin(self.twinkleTimer / self.twinkleSpeed) * 0.3; }; return self; }); var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 12; // Much faster initial speed self.lastY = undefined; self.update = function () { self.y += self.speed; }; return self; }); var Ball2 = Container.expand(function () { var self = Container.call(this); var ball2Graphics = self.attachAsset('Ball2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 14; // Slightly different speed than Ball self.lastY = undefined; self.update = function () { self.y += self.speed; }; return self; }); var Cube = Container.expand(function () { var self = Container.call(this); var cubeGraphics = self.attachAsset('cube', { anchorX: 0.5, anchorY: 0.5 }); return self; }); var Nebula = Container.expand(function () { var self = Container.call(this); var nebulaGraphics = self.attachAsset('nebula', { anchorX: 0.5, anchorY: 0.5 }); self.pulseTimer = 0; self.pulseSpeed = 0.02; // Slow pulsing self.baseAlpha = 0.15; self.update = function () { self.pulseTimer += self.pulseSpeed; // Create pulsing effect self.alpha = self.baseAlpha + Math.sin(self.pulseTimer) * 0.1; }; return self; }); var Planet = Container.expand(function () { var self = Container.call(this); var planetGraphics = self.attachAsset('planet', { anchorX: 0.5, anchorY: 0.5 }); self.rotationSpeed = 0.005 + Math.random() * 0.01; // Slow rotation self.update = function () { self.rotation += self.rotationSpeed; }; return self; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.lifeTime = 0; self.maxLifeTime = 30; // 0.5 seconds at 60fps self.update = function () { self.lifeTime++; // Fade out effect self.alpha = 1 - self.lifeTime / self.maxLifeTime; // Scale up effect var scale = 1 + self.lifeTime / self.maxLifeTime * 0.5; self.scaleX = scale; self.scaleY = scale; // Remove when lifetime exceeded if (self.lifeTime >= self.maxLifeTime) { self.destroy(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ // Create space background elements var backgroundStars = []; var planets = []; var nebulas = []; // Create twinkling stars background for (var i = 0; i < 80; i++) { var bgStar = game.addChild(new BackgroundStar()); bgStar.x = Math.random() * 2048; bgStar.y = Math.random() * 2732; backgroundStars.push(bgStar); } // Create planets in background for (var p = 0; p < 3; p++) { var planet = game.addChild(new Planet()); planet.x = Math.random() * 2048; planet.y = Math.random() * 2732; planet.scaleX = 0.5 + Math.random() * 1.5; // Random size planet.scaleY = planet.scaleX; planet.alpha = 0.6; // Semi-transparent // Randomize planet colors var planetColors = [0x8B4513, 0xFF6347, 0x4169E1, 0x32CD32, 0xFFD700]; planet.tint = planetColors[Math.floor(Math.random() * planetColors.length)]; planets.push(planet); } // Create nebula clouds for (var n = 0; n < 2; n++) { var nebula = game.addChild(new Nebula()); nebula.x = Math.random() * 2048; nebula.y = Math.random() * 2732; nebula.scaleX = 1 + Math.random() * 2; // Random size nebula.scaleY = 0.5 + Math.random() * 1; // Randomize nebula colors var nebulaColors = [0x4B0082, 0x8A2BE2, 0x9400D3, 0x6A5ACD]; nebula.tint = nebulaColors[Math.floor(Math.random() * nebulaColors.length)]; nebulas.push(nebula); } var cube = game.addChild(new Cube()); cube.x = 2048 / 2; cube.y = 2732 - 200; var balls = []; var balls2 = []; var stars = []; var ballTypeCounter = 0; var ballSpawnTimer = 0; var ballSpawnInterval = 20; // Spawn ball every 20 frames (faster for music sync) var difficultyTimer = 0; var gameStarted = false; // Score display var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Music will start when first ball is caught gameStarted = false; // Touch controls for cube movement var isDragging = false; game.down = function (x, y, obj) { isDragging = true; cube.x = x; }; game.move = function (x, y, obj) { if (isDragging) { cube.x = Math.max(75, Math.min(2048 - 75, x)); // Keep cube within screen bounds } }; game.up = function (x, y, obj) { isDragging = false; }; game.update = function () { // Spawn balls ballSpawnTimer++; if (ballSpawnTimer >= ballSpawnInterval) { ballTypeCounter++; if (ballTypeCounter % 2 === 0) { // Spawn Ball type var newBall = new Ball(); newBall.x = Math.random() * (2048 - 160) + 80; // Random x position within screen bounds newBall.y = -40; newBall.lastY = newBall.y; // Add subtle scale animation for musical sync feeling newBall.scaleX = 0.3; newBall.scaleY = 0.3; tween(newBall, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeOut }); balls.push(newBall); game.addChild(newBall); } else { // Spawn Ball2 type var newBall2 = new Ball2(); newBall2.x = Math.random() * (2048 - 160) + 80; // Random x position within screen bounds newBall2.y = -40; newBall2.lastY = newBall2.y; // Add subtle scale animation for musical sync feeling newBall2.scaleX = 0.3; newBall2.scaleY = 0.3; tween(newBall2, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeOut }); balls2.push(newBall2); game.addChild(newBall2); } ballSpawnTimer = 0; } // Update difficulty - increase ball speed and spawn rate over time difficultyTimer++; if (difficultyTimer % 600 === 0) { // Every 10 seconds ballSpawnInterval = Math.max(10, ballSpawnInterval - 2); // Spawn much faster, minimum 10 frames for (var i = 0; i < balls.length; i++) { balls[i].speed = Math.min(18, balls[i].speed + 0.5); // Increase speed more aggressively, higher maximum } for (var j = 0; j < balls2.length; j++) { balls2[j].speed = Math.min(18, balls2[j].speed + 0.5); // Increase speed for Ball2 as well } } // Check ball collisions and cleanup for (var i = balls.length - 1; i >= 0; i--) { var ball = balls[i]; // Check if ball was caught by cube if (ball.intersects(cube)) { // Start music on first ball catch if (!gameStarted) { LK.playMusic('backgroundMusic'); gameStarted = true; } // Ball caught - increase score LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); // Play catch sound LK.getSound('catch').play(); // Create star transformation effect at ball position var newStar = new Star(); newStar.x = ball.x; newStar.y = ball.y; stars.push(newStar); game.addChild(newStar); // Add tween effect to star creation tween(newStar, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.bounceOut }); // Remove ball ball.destroy(); balls.splice(i, 1); continue; } // Check if ball hit the ground (missed) if (ball.lastY < 2732 && ball.y >= 2732) { // Ball missed - stop music and end game LK.stopMusic(); LK.showGameOver(); return; } // Update last position for ground detection ball.lastY = ball.y; // Remove balls that are way off screen if (ball.y > 2800) { ball.destroy(); balls.splice(i, 1); } } // Check Ball2 collisions and cleanup for (var k = balls2.length - 1; k >= 0; k--) { var ball2 = balls2[k]; // Check if ball2 was caught by cube if (ball2.intersects(cube)) { // Start music on first ball catch if (!gameStarted) { LK.playMusic('backgroundMusic'); gameStarted = true; } // Ball2 caught - increase score LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); // Play catch sound LK.getSound('catch').play(); // Create star transformation effect at ball2 position var newStar = new Star(); newStar.x = ball2.x; newStar.y = ball2.y; stars.push(newStar); game.addChild(newStar); // Add tween effect to star creation tween(newStar, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.bounceOut }); // Remove ball2 ball2.destroy(); balls2.splice(k, 1); continue; } // Check if ball2 hit the ground (missed) if (ball2.lastY < 2732 && ball2.y >= 2732) { // Ball2 missed - stop music and end game LK.stopMusic(); LK.showGameOver(); return; } // Update last position for ground detection ball2.lastY = ball2.y; // Remove balls2 that are way off screen if (ball2.y > 2800) { ball2.destroy(); balls2.splice(k, 1); } } // Cleanup expired stars for (var s = stars.length - 1; s >= 0; s--) { var star = stars[s]; if (star.lifeTime >= star.maxLifeTime) { stars.splice(s, 1); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BackgroundStar = Container.expand(function () {
var self = Container.call(this);
var starGraphics = self.attachAsset('backgroundStar', {
anchorX: 0.5,
anchorY: 0.5
});
self.twinkleTimer = 0;
self.twinkleSpeed = Math.random() * 60 + 30; // Random twinkling speed
self.baseAlpha = 0.3 + Math.random() * 0.5; // Random base brightness
self.update = function () {
self.twinkleTimer++;
// Create twinkling effect
self.alpha = self.baseAlpha + Math.sin(self.twinkleTimer / self.twinkleSpeed) * 0.3;
};
return self;
});
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballGraphics = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 12; // Much faster initial speed
self.lastY = undefined;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Ball2 = Container.expand(function () {
var self = Container.call(this);
var ball2Graphics = self.attachAsset('Ball2', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 14; // Slightly different speed than Ball
self.lastY = undefined;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Cube = Container.expand(function () {
var self = Container.call(this);
var cubeGraphics = self.attachAsset('cube', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Nebula = Container.expand(function () {
var self = Container.call(this);
var nebulaGraphics = self.attachAsset('nebula', {
anchorX: 0.5,
anchorY: 0.5
});
self.pulseTimer = 0;
self.pulseSpeed = 0.02; // Slow pulsing
self.baseAlpha = 0.15;
self.update = function () {
self.pulseTimer += self.pulseSpeed;
// Create pulsing effect
self.alpha = self.baseAlpha + Math.sin(self.pulseTimer) * 0.1;
};
return self;
});
var Planet = Container.expand(function () {
var self = Container.call(this);
var planetGraphics = self.attachAsset('planet', {
anchorX: 0.5,
anchorY: 0.5
});
self.rotationSpeed = 0.005 + Math.random() * 0.01; // Slow rotation
self.update = function () {
self.rotation += self.rotationSpeed;
};
return self;
});
var Star = Container.expand(function () {
var self = Container.call(this);
var starGraphics = self.attachAsset('star', {
anchorX: 0.5,
anchorY: 0.5
});
self.lifeTime = 0;
self.maxLifeTime = 30; // 0.5 seconds at 60fps
self.update = function () {
self.lifeTime++;
// Fade out effect
self.alpha = 1 - self.lifeTime / self.maxLifeTime;
// Scale up effect
var scale = 1 + self.lifeTime / self.maxLifeTime * 0.5;
self.scaleX = scale;
self.scaleY = scale;
// Remove when lifetime exceeded
if (self.lifeTime >= self.maxLifeTime) {
self.destroy();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
// Create space background elements
var backgroundStars = [];
var planets = [];
var nebulas = [];
// Create twinkling stars background
for (var i = 0; i < 80; i++) {
var bgStar = game.addChild(new BackgroundStar());
bgStar.x = Math.random() * 2048;
bgStar.y = Math.random() * 2732;
backgroundStars.push(bgStar);
}
// Create planets in background
for (var p = 0; p < 3; p++) {
var planet = game.addChild(new Planet());
planet.x = Math.random() * 2048;
planet.y = Math.random() * 2732;
planet.scaleX = 0.5 + Math.random() * 1.5; // Random size
planet.scaleY = planet.scaleX;
planet.alpha = 0.6; // Semi-transparent
// Randomize planet colors
var planetColors = [0x8B4513, 0xFF6347, 0x4169E1, 0x32CD32, 0xFFD700];
planet.tint = planetColors[Math.floor(Math.random() * planetColors.length)];
planets.push(planet);
}
// Create nebula clouds
for (var n = 0; n < 2; n++) {
var nebula = game.addChild(new Nebula());
nebula.x = Math.random() * 2048;
nebula.y = Math.random() * 2732;
nebula.scaleX = 1 + Math.random() * 2; // Random size
nebula.scaleY = 0.5 + Math.random() * 1;
// Randomize nebula colors
var nebulaColors = [0x4B0082, 0x8A2BE2, 0x9400D3, 0x6A5ACD];
nebula.tint = nebulaColors[Math.floor(Math.random() * nebulaColors.length)];
nebulas.push(nebula);
}
var cube = game.addChild(new Cube());
cube.x = 2048 / 2;
cube.y = 2732 - 200;
var balls = [];
var balls2 = [];
var stars = [];
var ballTypeCounter = 0;
var ballSpawnTimer = 0;
var ballSpawnInterval = 20; // Spawn ball every 20 frames (faster for music sync)
var difficultyTimer = 0;
var gameStarted = false;
// Score display
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Music will start when first ball is caught
gameStarted = false;
// Touch controls for cube movement
var isDragging = false;
game.down = function (x, y, obj) {
isDragging = true;
cube.x = x;
};
game.move = function (x, y, obj) {
if (isDragging) {
cube.x = Math.max(75, Math.min(2048 - 75, x)); // Keep cube within screen bounds
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
game.update = function () {
// Spawn balls
ballSpawnTimer++;
if (ballSpawnTimer >= ballSpawnInterval) {
ballTypeCounter++;
if (ballTypeCounter % 2 === 0) {
// Spawn Ball type
var newBall = new Ball();
newBall.x = Math.random() * (2048 - 160) + 80; // Random x position within screen bounds
newBall.y = -40;
newBall.lastY = newBall.y;
// Add subtle scale animation for musical sync feeling
newBall.scaleX = 0.3;
newBall.scaleY = 0.3;
tween(newBall, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.easeOut
});
balls.push(newBall);
game.addChild(newBall);
} else {
// Spawn Ball2 type
var newBall2 = new Ball2();
newBall2.x = Math.random() * (2048 - 160) + 80; // Random x position within screen bounds
newBall2.y = -40;
newBall2.lastY = newBall2.y;
// Add subtle scale animation for musical sync feeling
newBall2.scaleX = 0.3;
newBall2.scaleY = 0.3;
tween(newBall2, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.easeOut
});
balls2.push(newBall2);
game.addChild(newBall2);
}
ballSpawnTimer = 0;
}
// Update difficulty - increase ball speed and spawn rate over time
difficultyTimer++;
if (difficultyTimer % 600 === 0) {
// Every 10 seconds
ballSpawnInterval = Math.max(10, ballSpawnInterval - 2); // Spawn much faster, minimum 10 frames
for (var i = 0; i < balls.length; i++) {
balls[i].speed = Math.min(18, balls[i].speed + 0.5); // Increase speed more aggressively, higher maximum
}
for (var j = 0; j < balls2.length; j++) {
balls2[j].speed = Math.min(18, balls2[j].speed + 0.5); // Increase speed for Ball2 as well
}
}
// Check ball collisions and cleanup
for (var i = balls.length - 1; i >= 0; i--) {
var ball = balls[i];
// Check if ball was caught by cube
if (ball.intersects(cube)) {
// Start music on first ball catch
if (!gameStarted) {
LK.playMusic('backgroundMusic');
gameStarted = true;
}
// Ball caught - increase score
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
// Play catch sound
LK.getSound('catch').play();
// Create star transformation effect at ball position
var newStar = new Star();
newStar.x = ball.x;
newStar.y = ball.y;
stars.push(newStar);
game.addChild(newStar);
// Add tween effect to star creation
tween(newStar, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
easing: tween.bounceOut
});
// Remove ball
ball.destroy();
balls.splice(i, 1);
continue;
}
// Check if ball hit the ground (missed)
if (ball.lastY < 2732 && ball.y >= 2732) {
// Ball missed - stop music and end game
LK.stopMusic();
LK.showGameOver();
return;
}
// Update last position for ground detection
ball.lastY = ball.y;
// Remove balls that are way off screen
if (ball.y > 2800) {
ball.destroy();
balls.splice(i, 1);
}
}
// Check Ball2 collisions and cleanup
for (var k = balls2.length - 1; k >= 0; k--) {
var ball2 = balls2[k];
// Check if ball2 was caught by cube
if (ball2.intersects(cube)) {
// Start music on first ball catch
if (!gameStarted) {
LK.playMusic('backgroundMusic');
gameStarted = true;
}
// Ball2 caught - increase score
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
// Play catch sound
LK.getSound('catch').play();
// Create star transformation effect at ball2 position
var newStar = new Star();
newStar.x = ball2.x;
newStar.y = ball2.y;
stars.push(newStar);
game.addChild(newStar);
// Add tween effect to star creation
tween(newStar, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
easing: tween.bounceOut
});
// Remove ball2
ball2.destroy();
balls2.splice(k, 1);
continue;
}
// Check if ball2 hit the ground (missed)
if (ball2.lastY < 2732 && ball2.y >= 2732) {
// Ball2 missed - stop music and end game
LK.stopMusic();
LK.showGameOver();
return;
}
// Update last position for ground detection
ball2.lastY = ball2.y;
// Remove balls2 that are way off screen
if (ball2.y > 2800) {
ball2.destroy();
balls2.splice(k, 1);
}
}
// Cleanup expired stars
for (var s = stars.length - 1; s >= 0; s--) {
var star = stars[s];
if (star.lifeTime >= star.maxLifeTime) {
stars.splice(s, 1);
}
}
};
Yuvarlak bir top içinde nota simgesi olucak. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Çift kollu elektro gitar. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Mavi renkli top. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
3 kollu şimşek. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat