/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0
});
/****
* Classes
****/
// Import leaderboard plugin
var ButtonBot = Container.expand(function () {
var self = Container.call(this);
var buttonBotGraphics = self.attachAsset('BUTTON_BOT', {
anchorX: 0.5,
anchorY: 0.5
});
// Add down event to set landing duration to 100 during jump or double jump
self.down = function (x, y, obj) {
if (self.isPressed || buttonTop.isPressed) {
return;
} // Debounce: Ignore if already pressed or if buttonTop is pressed
self.vnizSound = LK.getSound('vniz');
self.vnizSound.play(); // Play 'vniz' sound when button_bot is pressed
self.vnizSound.on('end', function () {
if (self.isPressed) {
self.vnizSound.play({
loop: true
}); // Replay 'vniz' sound if button is still pressed
}
});
self.isPressed = true; // Set pressed state
LK.setTimeout(function () {
self.isPressed = false; // Reset pressed state after a short delay
}, 20); // 20ms debounce delay
self.scale.set(0.9); // Add press effect by scaling down
if (!player.inAir && !player.doubleJump) {
player.rotation -= Math.PI * (85 / 180); // Rotate 85 degrees counter-clockwise
tween(player, {
y: player.y + 30 // Move player down by 30 pixels
}, {
duration: 100,
// Smooth transition over 500ms
onFinish: function onFinish() {
player.inAir = false;
player.doubleJump = false;
}
});
} else if (player.inAir || player.doubleJump) {
tween(player, {
y: 2732 / 2 - 220
}, {
duration: 100,
onFinish: function onFinish() {
player.inAir = false;
player.doubleJump = false;
player.y = 2732 / 2 - 220;
}
});
}
if (player.inAir || player.doubleJump) {
if (!player.hasRotated) {
player.rotation -= Math.PI * (85 / 180); // Rotate 85 degrees counter-clockwise
player.hasRotated = true; // Ensure rotation only occurs once
}
tween(player, {
y: 2732 / 2 - 220
}, {
duration: 100,
onFinish: function onFinish() {
player.inAir = false;
player.doubleJump = false;
player.y = 2732 / 2 - 220;
player.hasRotated = false; // Reset rotation flag
}
});
} else {
player.hasRotated = false; // Reset rotation flag if not in air or double jump
}
};
// Add up event to reset rotation
self.up = function (x, y, obj) {
self.isPressed = false; // Reset pressed state
if (self.vnizSound) {
self.vnizSound.stop(); // Stop 'vniz' sound when button_bot is released
}
self.scale.set(1); // Reset scale to original size
if (!player.inAir && !player.doubleJump) {
player.rotation += Math.PI * (85 / 180); // Rotate back 85 degrees clockwise
tween(player, {
y: player.y - 30 // Move player up by 30 pixels
}, {
duration: 100,
// Smooth transition over 100ms
onFinish: function onFinish() {
player.inAir = false;
player.doubleJump = false;
}
});
} else if (player.inAir || player.doubleJump) {
player.rotation += Math.PI * (85 / 180); // Rotate back 85 degrees clockwise
}
};
});
// Create a button top class
var ButtonTop = Container.expand(function () {
var self = Container.call(this);
var buttonTopGraphics = self.attachAsset('BUTTON_TOP', {
anchorX: 0.5,
anchorY: 0.5
});
// Add down event to trigger jump
self.down = function (x, y, obj) {
if (self.isPressed || buttonBot.isPressed) {
return;
} // Debounce: Ignore if already pressed or if buttonBot is pressed
self.isPressed = true; // Set pressed state
LK.setTimeout(function () {
self.isPressed = false; // Reset pressed state after a short delay
}, 200); // 200ms debounce delay
self.scale.set(0.9); // Add press effect by scaling down
if (!player.doubleJump || player.inAir && !player.doubleJump) {
LK.getSound('jump').play(); // Play jump sound
if (player.inAir) {
player.doubleJump = true;
tween(player, {
y: player.y - 400,
rotation: player.rotation - Math.PI * 2
}, {
duration: 230,
easing: tween.easeInOut,
onFinish: function onFinish() {
player.inAir = true; // Allow another jump
tween(player, {
y: 2732 / 2 - 250
}, {
duration: 500,
onFinish: function onFinish() {
player.inAir = false;
player.doubleJump = false;
player.y = 2732 / 2 - 250;
}
});
}
});
return;
}
player.inAir = true;
player.doubleJump = false;
player.lastY = player.y; // Update lastY immediately after jump initiation
player.lastX = player.x; // Update lastX immediately after jump initiation
player.lastY = player.y; // Update lastY immediately after jump initiation
player.lastX = player.x; // Update lastX immediately after jump initiation
tween(player, {
y: player.y - 500
}, {
duration: 100,
// Reduced duration to allow quicker second jump
onFinish: function onFinish() {
player.inAir = true; // Allow another jump
tween(player, {
y: 2732 / 2 - 250
}, {
duration: 600,
onFinish: function onFinish() {
player.inAir = false;
}
});
}
});
}
};
// Add up event to reset scale
self.up = function (x, y, obj) {
self.isPressed = false; // Reset pressed state
self.scale.set(1); // Reset scale to original size
};
});
// Create a player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 0.5
});
// Initialize the inAir flag
self.inAir = false;
self.doubleJump = false;
self.hasRotated = false; // Initialize rotation flag
// Initialize lastY and lastX for tracking changes
self.lastY = self.y;
self.lastX = self.x;
});
/****
* Initialize Game
****/
// Add player to the game
var game = new LK.Game({
backgroundColor: 0x12243b
});
/****
* Game Code
****/
function createSnowImage() {
var snowImage = game.addChild(LK.getAsset('snow', {
anchorX: 0.5,
anchorY: 0.5
}));
snowImage.x = Math.random() * 2048; // Random horizontal position
snowImage.y = Math.random() * 2732; // Random vertical position
snowImage.rotation = Math.PI * ((Math.random() * (340 - 300) + 300) / 180); // Random rotation between 300 and 340 degrees
}
LK.playMusic('osnova'); // Play background music 'osnova'
var snowImageTimer = LK.setInterval(createSnowImage, 1000);
var obstacles = [];
var obstacleInterval = 105; // Initial interval for obstacle creation
var intervalDecreaseTimer = LK.setInterval(function () {
if (obstacleInterval > 55) {
obstacleInterval -= 20; // Decrease interval by 10 every 10 seconds
}
}, 9000);
function createObstacle(assetId, x, y, rotation) {
var obstacle = game.addChild(LK.getAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
}));
obstacle.x = x;
obstacle.y = y;
obstacle.rotation = rotation;
obstacles.push(obstacle);
}
var obstaclePositions = [{
assetId: 'obstacle1',
x: 2140,
y: 2732 / 2 + 430,
rotation: Math.PI / 9
}, {
assetId: 'obstacle2',
x: 2140,
y: 2732 / 2 + 455,
rotation: Math.PI / 9
}, {
assetId: 'obstacle3',
x: 2140,
y: 2732 / 2 + 420,
rotation: Math.PI / 9
}, {
assetId: 'obstacle4',
x: 2140,
y: 2732 / 2 + 445,
rotation: Math.PI / 9
}, {
assetId: 'obstacle5',
x: 2140,
y: 2732 / 2 + 440,
rotation: Math.PI / 9
}, {
assetId: 'obstacle6',
x: 2140,
y: 2732 / 2 + 455,
rotation: Math.PI / 9
}, {
assetId: 'obstacle7',
x: 2140,
y: 2732 / 2 + 130,
rotation: Math.PI / 9
}, {
assetId: 'obstacle8',
x: 2165,
y: 2732 / 2 + 108,
rotation: Math.PI / 9
}, {
assetId: 'obstacle9',
x: 2165,
y: 2732 / 2 + 108,
rotation: Math.PI / 9
}];
function createRandomObstacle() {
var randomIndex = Math.floor(Math.random() * obstaclePositions.length);
var selectedObstacle = obstaclePositions[randomIndex];
createObstacle(selectedObstacle.assetId, selectedObstacle.x, selectedObstacle.y, selectedObstacle.rotation);
}
LK.setTimeout(createRandomObstacle, 2000); // Delay first obstacle creation by 2,1 seconds
var monetka; // Declare monetka variable
// Function to create Monetka image at a random height
function createMonetka() {
monetka = game.addChild(LK.getAsset('Monetka', {
anchorX: 0.5,
anchorY: 0.5
}));
monetka.x = 2057; // Center image horizontally
monetka.y = Math.floor(Math.random() * (1650 - 1300 + 1)) + 1300; // Random height between 300 and 1000
monetka.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
var scaleDirection = 1; // 1 for increasing, -1 for decreasing
var scaleSpeed = 0.01; // Speed of scaling
monetka.update = function () {
// Update the scale
monetka.scale.x += scaleSpeed * scaleDirection;
monetka.scale.y += scaleSpeed * scaleDirection;
// Check if we need to change direction
if (monetka.scale.x >= 1.2) {
scaleDirection = -1; // Start decreasing
} else if (monetka.scale.x <= 1) {
scaleDirection = 1; // Start increasing
}
};
}
// Create Monetka every 3 seconds
var monetkaTimer = LK.setInterval(createMonetka, 3000);
// Add ikonka button to the GUI overlay layer to make it static
var ikonkaButton = LK.gui.topRight.addChild(LK.getAsset('ikonka', {
anchorX: 0.5,
anchorY: 0.5,
x: -100,
// Move 100 pixels to the left
y: 120 // Move 100 pixels down
}));
// Create and display score text at the top center of the screen
var scoreText = new Text2(LK.getScore().toString(), {
size: 130,
fill: 0xFFFFFF,
fontWeight: 'bold',
font: 'Arial' // Specify the desired font here
});
scoreText.anchor.set(0.5, 0); // Center horizontally, top edge
scoreText.y = 30; // Move score 50 pixels down
LK.gui.top.addChild(scoreText);
ikonkaButton.interactive = true; // Make ikonka interactive
ikonkaButton.down = function (x, y, obj) {
if (ikonkaButton.isPressed) {
return; // Debounce: Ignore if already pressed
}
ikonkaButton.isPressed = true; // Set pressed state
LK.setTimeout(function () {
ikonkaButton.isPressed = false; // Reset pressed state after a short delay
}, 200); // 200ms debounce delay
// Toggle transparency on button press
if (ikonkaButton.alpha === 1) {
ikonkaButton.alpha = 0.5; // Set transparency to 50%
buttonTop.x -= 1700; // Move buttonTop 100 pixels to the left
buttonBot.x -= 1700; // Move buttonBot 100 pixels to the left
} else {
ikonkaButton.alpha = 1; // Reset transparency
buttonTop.x += 1700; // Move buttonTop back to original position
buttonBot.x += 1700; // Move buttonBot back to original position
}
ikonkaButton.isPressed = false; // Reset pressed state
};
var oblako = game.addChild(LK.getAsset('Oblako', {
anchorX: 0.5,
anchorY: 0.5
}));
oblako.x = 1400; // Position 'Oblako' in the middle of the right side of the screen
oblako.y = Math.floor(Math.random() * (600 - 400)) + 400; // Random height between 200 and 700
oblako.rotation = Math.PI / 9; // Rotate 'Oblako' by 20 degrees clockwise
oblako.alpha = 0.3; // Set transparency to 50%
oblako.scale.set(Math.random() * (1 - 0.33) + 0.33); // Apply random scale between 0.33 and 1
// Add a new cloud 400 pixels to the left of the first cloud
var oblakoLeft = game.addChild(LK.getAsset('Oblako', {
anchorX: 0.5,
anchorY: 0.5
}));
oblakoLeft.x = oblako.x - 700; // Position 400 pixels to the left of the first cloud
oblakoLeft.y = Math.floor(Math.random() * (500 - 300)) + 300;
oblakoLeft.rotation = oblako.rotation; // Same rotation as the first cloud
oblakoLeft.alpha = oblako.alpha; // Same transparency as the first cloud
oblakoLeft.scale.set(Math.random() * (1 - 0.33) + 0.33); // Apply random scale between 0.33 and 1
var otherImageSpeed = 20; // Initial speed for other images
var speedIncreaseTimer = LK.setInterval(function () {
otherImageSpeed += 0.2; // Increase speed by 1 every 5 seconds
}, 10000);
var oblakoInstances = []; // Array to track oblako instances
var oblakoTimer = LK.setInterval(function () {
var newOblako = game.addChild(LK.getAsset('Oblako', {
anchorX: 0.5,
anchorY: 0.5
}));
var scaleFactor = Math.random() * (1 - 0.33) + 0.33; // Random scale factor between 0.33 and 1
newOblako.scale.set(scaleFactor); // Apply random scale
newOblako.x = 2248; // Position 'Oblako' in the middle of the right side of the screen
newOblako.y = Math.floor(Math.random() * (901 - 400)) + 400; // Random height between 200 and 700
newOblako.rotation = Math.PI / 9; // Rotate 'Oblako' by 20 degrees clockwise
newOblako.alpha = 0.3; // Set transparency to 50%
oblakoInstances.push(newOblako); // Add new oblako to the array
}, 8000);
// Create an array to store 'Dom' images
// Define BLEND_MODES to fix the undefined variable error
var BLEND_MODES = {
NORMAL: 0
};
var domImages = [];
// Create the first 'Dom' image after 2 seconds
LK.setTimeout(function () {
var newDom = game.addChild(LK.getAsset('Dom', {
anchorX: 0.5,
anchorY: 0.5
}));
newDom.x = 2048 / 2 + 2170; // Center image horizontally
newDom.y = 2732 / 2 + 450; // Center image vertically
newDom.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
newDom.alpha = 0.2; // Set transparency to 20%
newDom.blendMode = BLEND_MODES.NORMAL; // Ensure transparency does not sum up
domImages.push(newDom);
// Create subsequent 'Dom' images every 3 seconds
var domTimer = LK.setInterval(function () {
var newDom = game.addChild(LK.getAsset('Dom', {
anchorX: 0.5,
anchorY: 0.5
}));
newDom.x = 2048 / 2 + 2170; // Center image horizontally
newDom.y = 2732 / 2 + 450; // Center image vertically
newDom.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
newDom.alpha = 0.2; // Set transparency to 20%
newDom.blendMode = BLEND_MODES.NORMAL; // Ensure transparency does not sum up
domImages.push(newDom);
}, 12500);
}, 2220);
// Set a random interval between 4 to 8 seconds to create SUNDUK
function randomSundukCreation() {
var randomTime = Math.floor(Math.random() * (10000 - 4000 + 1)) + 4000;
LK.setTimeout(function () {
createSunduk();
randomSundukCreation(); // Call again for continuous random creation
}, randomTime);
}
// Start the random SUNDUK creation
randomSundukCreation();
// Function to create SUNDUK image
function createSunduk() {
var sunduk = game.addChild(LK.getAsset('Sunduk', {
anchorX: 0.5,
anchorY: 0.5
}));
sunduk.x = 2090; // Center image horizontally
sunduk.y = Math.floor(Math.random() * (2732 - 2332 + 1)) + 2332; // Random height between 2332 and 2732
sunduk.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
sunduk.alpha = 0.5; // Set transparency to 50%
}
// Function to create UFO image
function createUfo() {
var ufo = game.addChild(LK.getAsset('Ufo', {
anchorX: 0.5,
anchorY: 0.5
}));
ufo.x = 2090; // Center image horizontally
ufo.y = Math.floor(Math.random() * (2732 - 2332 + 1)) + 2332; // Random height between 2332 and 2732
ufo.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
ufo.alpha = 0.5; // Set transparency to 50%
}
// Create a new image 123 every 3 seconds on the right side of the screen
var image123Timer = LK.setInterval(function () {
var newImage123 = game.addChild(LK.getAsset('123', {
anchorX: 0.5,
anchorY: 0.5
}));
newImage123.x = 2048 + newImage123.width / 2; // Position on the right side of the screen
newImage123.y = 2732 / 2 + 1290; // Move image down by 600 pixels
newImage123.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
}, 1450);
LK.setTimeout(function () {
vzriv = game.addChild(LK.getAsset('Vzriv', {
anchorX: 0.5,
anchorY: 0.5
}));
vzriv.x = vzriv.width / 2 + 90; // Position Vzriv at the left center of the screen
vzriv.y = 2732 / 2 - 280; // Center Vzriv vertically
game.setChildIndex(player, game.children.length - 1); // Move player to the top
game.setChildIndex(buttonBot, game.children.length - 1); // Ensure buttonBot is on top
game.setChildIndex(buttonTop, game.children.length - 1); // Ensure buttonTop is on top
// Remove Vzriv 2.1 seconds after the game starts
LK.setTimeout(function () {
vzriv.destroy();
}, 2100);
}, 1860);
// Add image 123 to the center of the screen
var image123 = game.addChild(LK.getAsset('123', {
anchorX: 0.5,
anchorY: 0.5
}));
image123.x = 2048 / 2; // Center image horizontally
image123.y = 2732 / 2 + 280; // Move image 123 down by 280 pixels
image123.rotation = Math.PI / 9; // Rotate image 123 by 20 degrees clockwise
// Add snow image to the top center of the screen
var snowImage = game.addChild(LK.getAsset('snow', {
anchorX: 0.5,
anchorY: 0.5
}));
snowImage.x = 2050; // Center image horizontally
snowImage.y = 100; // Position image at the top
snowImage.rotation = Math.PI * (320 / 180); // Rotate image by 320 degrees clockwise
// Add 'Dom' image to the center of the screen
var domImage = game.addChild(LK.getAsset('Dom', {
anchorX: 0.5,
anchorY: 0.5
}));
domImage.x = 2048 / 2 + 70; // Center image horizontally
domImage.y = 2732 / 2 - 305; // Center image vertically
domImage.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
domImage.alpha = 0.2; // Set transparency to 50%
domImage.blendMode = BLEND_MODES.NORMAL; // Ensure transparency does not sum up
// Add a glow effect to the 'Dom' image
tween(domImage, {
alpha: 0.2
}, {
duration: 1000,
yoyo: true,
repeat: Infinity
});
// Add image 'niz' to the bottom of the screen
var niz = game.addChild(LK.getAsset('NIZ', {
anchorX: 0.5,
// Center horizontally
anchorY: 0.5 // Align to the bottom
}));
niz.x = 2048 / 2 - 150; // Center image horizontally
niz.y = 2732 - 200; // Position image at the bottom of the screen
niz.rotation = Math.PI / 9;
game.setChildIndex(niz, 0); // Move 'niz' to the back layer
// Function to create ALMAZ image
function createAlmaz() {
var almaz = game.addChild(LK.getAsset('almaz', {
anchorX: 0.5,
anchorY: 0.5
}));
almaz.x = 2090; // Center image horizontally
almaz.y = Math.floor(Math.random() * (2732 - 2332 + 1)) + 2332; // Random height between 2332 and 2732
almaz.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
almaz.alpha = 0.7; // Set transparency to 70%
}
// Function to create SKELET image
function createSkelet() {
var skelet = game.addChild(LK.getAsset('Skelet', {
anchorX: 0.5,
anchorY: 0.5
}));
skelet.x = 2090; // Center image horizontally
skelet.y = Math.floor(Math.random() * (2732 - 2332 + 1)) + 2332; // Random height between 2332 and 2732
skelet.rotation = Math.PI / 9; // Rotate image by 20 degrees clockwise
skelet.alpha = 0.5; // Set transparency to 50%
}
// Set a random interval between 4 to 8 seconds to create ALMAZ
function randomAlmazCreation() {
var randomTime = Math.floor(Math.random() * (10000 - 4000 + 1)) + 4000;
LK.setTimeout(function () {
createAlmaz();
randomAlmazCreation(); // Call again for continuous random creation
}, randomTime);
}
// Start the random ALMAZ creation
randomAlmazCreation();
// Set a random interval between 4 to 8 seconds to create SKELET
function randomSkeletCreation() {
var randomTime = Math.floor(Math.random() * (10000 - 4000 + 1)) + 4000;
LK.setTimeout(function () {
createSkelet();
randomSkeletCreation(); // Call again for continuous random creation
}, randomTime);
}
// Start the random SKELET creation
randomSkeletCreation();
// Set a random interval between 4 to 8 seconds to create UFO
function randomUfoCreation() {
var randomTime = Math.floor(Math.random() * (10000 - 4000 + 1)) + 4000;
LK.setTimeout(function () {
createUfo();
randomUfoCreation(); // Call again for continuous random creation
}, randomTime);
}
// Start the random UFO creation
randomUfoCreation();
// Create 'niz' every 2 seconds, except for the first instance
var nizTimer = LK.setInterval(function () {
var newNiz = game.addChild(LK.getAsset('NIZ', {
anchorX: 0.5,
anchorY: 0.5
}));
newNiz.x = 2048 / 2 + 2000;
newNiz.y = 2732 + 580;
newNiz.rotation = Math.PI / 9;
game.setChildIndex(newNiz, 0);
}, 2000);
var ball = game.addChild(LK.getAsset('Ball', {
anchorX: 0.5,
anchorY: 0.5
}));
ball.x = ball.width / 2 - 100; // Shift ball 100 pixels to the left
ball.y = 2732 / 2 - 300; // Center ball vertically
LK.setTimeout(function () {
tween(ball, {
x: ball.x + 400
}, {
duration: 360,
// Reduced duration to double the speed
easing: tween.linear,
onFinish: function onFinish() {
ball.destroy(); // Remove the ball after it moves 200 pixels
}
});
}, 1500);
game.down = function (x, y, obj) {};
var player = game.addChild(new Player());
player.x = player.width / 2 + 200; // Position player 200 units to the right of the center left of the screen
player.y = 2732 / 2 - 250; // Move player 150 units down
player.rotation = Math.PI / 12; // Set initial rotation to 15 degrees clockwise
// Add background to the game
var background = game.addChild(LK.getAsset('background_1', {
anchorX: 0.5,
anchorY: 0.5
}));
game.setChildIndex(background, 0); // Move background to the bottom
background.x = 2048 / 2; // Center background horizontally
background.y = 2732 / 2 + 150; // Move background down by 550 pixels
background.rotation = Math.PI / 9; // Rotate background by 20 degrees clockwise
// Move background_1 towards its left side
var backgroundCounter = 0;
var backgroundTimer = LK.setInterval(function () {
var newBackground = game.addChild(LK.getAsset('background_1', {
anchorX: 0.5,
anchorY: 0.5
}));
newBackground.x = 2048 / 2 + 2500; // Move background 2048 pixels to the right
newBackground.y = 2732 / 2 + 1060; // Move background down by 1100 pixels
newBackground.rotation = Math.PI / 9; // Rotate background by 20 degrees clockwise
backgroundCounter++;
if (backgroundCounter === 1) {
LK.clearInterval(backgroundTimer);
backgroundTimer = LK.setInterval(function () {
var newBackground = game.addChild(LK.getAsset('background_1', {
anchorX: 0.5,
anchorY: 0.5
}));
newBackground.x = 2048 / 2 + 2500; // Move background 2048 pixels to the right
newBackground.y = 2732 / 2 + 1060; // Move background down by 1100 pixels
newBackground.rotation = Math.PI / 9; // Rotate background by 20 degrees clockwise
}, 2300);
} else if (backgroundCounter === 2) {
LK.clearInterval(backgroundTimer);
backgroundTimer = LK.setInterval(function () {
var newBackground = game.addChild(LK.getAsset('background_1', {
anchorX: 0.5,
anchorY: 0.5
}));
newBackground.x = 2048 / 2 + 2500; // Move background 2048 pixels to the right
newBackground.y = 2732 / 2 + 1060; // Move background down by 1100 pixels
newBackground.rotation = Math.PI / 9; // Rotate background by 20 degrees clockwise
}, 1950);
}
}, 400);
var gameStarted = false;
// Removed score increment from timer
var gameStartTimer = LK.setTimeout(function () {
gameStarted = true;
LK.getSound('go').play(); // Play 'go' sound 2 seconds after the game starts
}, 2000);
// Add BUTTON_TOP to the game
var buttonTop = game.addChild(new ButtonTop());
buttonTop.x = 2048 - buttonTop.width / 2 - 50; // Position buttonTop 50 units to the left of the right edge of the screen
buttonTop.y = 2732 - buttonTop.height / 2 - 350; // Position buttonTop 370 units above the bottom edge of the screen
// Add BUTTON_BOT to the game
var buttonBot = game.addChild(new ButtonBot());
buttonBot.x = 2048 - buttonBot.width / 2 - 50; // Position buttonBot 50 units to the left of the right edge of the screen
buttonBot.y = 2732 - buttonBot.height / 2 - 20; // Position buttonBot 20 units above the bottom edge of the screen
game.update = function () {
if (!gameStarted) {
buttonTop.interactive = false;
buttonBot.interactive = false;
return;
}
buttonTop.interactive = true;
buttonBot.interactive = true;
// Update lastY and lastX for player
player.lastY = player.y;
player.lastX = player.x;
// Create a random obstacle every 200 ticks
if (LK.ticks % obstacleInterval === 0) {
createRandomObstacle();
}
game.children.forEach(function (child) {
if (child !== player && child !== buttonTop && child !== buttonBot) {
if (child.assetId === 'snow' && (child.y + child.height / 2 < 0 || child.x - child.width / 2 > 2048 || child.y - child.height / 2 > 2732)) {
child.destroy(); // Remove the snow image
return;
}
if (child === monetka && player.intersects(monetka)) {
monetka.destroy();
LK.setScore(LK.getScore() + 1); // Increase score by 1
scoreText.setText(LK.getScore().toString()); // Update score display
// Check if the current score is a new high score
if (LK.getScore() > storage.highScore) {
storage.highScore = LK.getScore();
var newRecordImage = LK.gui.center.addChild(LK.getAsset('newRecordImage', {
anchorX: 0.5,
anchorY: 0.5
}));
newRecordImage.x = 5;
newRecordImage.y = -600;
LK.setTimeout(function () {
newRecordImage.destroy();
}, 1000);
}
return;
}
if (obstacles.includes(child)) {
var dx = player.x - child.x;
var dy = player.y - child.y;
var distance = Math.sqrt(dx * dx + dy * dy);
var playerHalfWidth = player.width / 2;
var playerHalfHeight = player.height / 2;
var obstacleRadius = Math.min(child.width, child.height) / 2;
var combinedRadius = obstacleRadius + Math.abs(playerHalfWidth, playerHalfHeight);
// Check collision based on player's orientation
if (!player.inAir) {
// Standing position: check height
if (child.lastWasIntersecting === false && distance < obstacleRadius + playerHalfHeight) {
LK.effects.flashScreen(0xff0000, 1000); // Flash screen red for 1 second
LK.showGameOver(); // Trigger game over when player collides with any obstacle
return;
}
} else {
// Lying down position: check width
if (child.lastWasIntersecting === false && distance < obstacleRadius + playerHalfWidth) {
LK.effects.flashScreen(0xff0000, 1000); // Flash screen red for 1 second
LK.showGameOver(); // Trigger game over when player collides with any obstacle
return;
}
}
child.lastWasIntersecting = distance < combinedRadius;
}
if (child.lastWasIntersecting === undefined) {
child.lastWasIntersecting = false;
}
if (child.lastX === undefined) {
child.lastX = child.x;
}
if (child.lastY === undefined) {
child.lastY = child.y;
}
if (child === domImage) {
if (child.lastX === undefined) {
child.lastX = child.x;
}
if (child.lastY === undefined) {
child.lastY = child.y;
}
if (child.lastX === undefined) {
child.lastX = child.x;
}
if (child.lastY === undefined) {
child.lastY = child.y;
}
child.x -= 3 * Math.cos(child.rotation); // Set speed for domImage
child.y -= 3 * Math.sin(child.rotation); // Set speed for domImage
child.lastX = child.x;
child.lastY = child.y;
} else if (domImages.includes(child)) {
child.x -= 3 * Math.cos(child.rotation); // Set speed for newDom images
child.y -= 3 * Math.sin(child.rotation); // Set speed for newDom images
} else {
if (child === oblako || child === oblakoLeft || oblakoInstances.includes(child)) {
child.x -= 1 * Math.cos(child.rotation); // Set speed for 'Oblako' and 'OblakoLeft'
child.y -= 1 * Math.sin(child.rotation); // Set speed for 'Oblako' and 'OblakoLeft'
} else {
child.x -= otherImageSpeed * Math.cos(child.rotation); // Apply increased speed for other images
child.y -= otherImageSpeed * Math.sin(child.rotation); // Apply increased speed for other images
}
}
if (child.y + child.height / 2 < 0 || child.x - child.width / 2 > 2048 || child.y - child.height / 2 > 2732) {
// If the image is completely off the screen
child.destroy(); // Remove the image
if (obstacles.includes(child)) {
obstacles.splice(obstacles.indexOf(child), 1); // Remove from obstacles array
}
if (oblakoInstances.includes(child)) {
oblakoInstances.splice(oblakoInstances.indexOf(child), 1); // Remove from oblakoInstances array
}
if (domImages.includes(child)) {
domImages.splice(domImages.indexOf(child), 1); // Remove from domImages array
}
}
}
game.setChildIndex(player, game.children.length - 1); // Move player to the top
game.setChildIndex(buttonBot, game.children.length - 1); // Ensure buttonBot is on top
game.setChildIndex(buttonTop, game.children.length - 1); // Ensure buttonTop is on top
});
// Add shaking effect to the player
if (gameStarted) {
if (LK.ticks < 130) {
// Strong shake for the first second (assuming 60 FPS)
player.x = player.lastX + Math.sin(LK.ticks / 0.5) * 10;
player.y = player.lastY + Math.cos(LK.ticks / 0.5) * 10;
} else {
player.x = player.lastX + Math.sin(LK.ticks / 0.5) * 3;
player.y = player.lastY + Math.cos(LK.ticks / 0.5) * 3;
}
if (vzriv && vzriv.parent) {
vzriv.destroy();
}
}
};
создать мультяшного сидячего персонажа. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
snowball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
белая стрелочка вниз. Ровная. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Алмаз, мультяшный. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Скелет дракона. Мультяшный. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Ufo (летающая тарелка). Мультяшная. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Пингвин в снегу. Мультяшный. Головой в снегу. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Мультяшный рыбак зимой сидит рыбачит. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Человек летит на параплане. Мультяшный. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Куст в снегу мультяшный. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Дирижабль, мультяшный. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Рука белая. Иконка. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Монетка золотая мультяшная. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
снежинка. мультяшная. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
text: New Record! Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows