User prompt
Let the character double jump
User prompt
Set an endgame point 300 meters into the game and give it the appearance of a gate
User prompt
Erase the aura of the boxes
User prompt
Increase the brightness of the boxes and make them stand out ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Allocate a separate asset to harmful boxes
User prompt
The assets of the harmful boxes should be different.
User prompt
After damaging the box, it will shatter like an explosion. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Let's put another box, but this box can cause damage
User prompt
Let them be closer to each other
User prompt
The boxes on top of each other should be stuck together but their hitboxes should be separate.
User prompt
Some of the boxes should be 2-stage, one on top of the other.
User prompt
Let the screen move with us
User prompt
Let us move the character
User prompt
The door should be a little higher
User prompt
Let the door be attached to the floor
User prompt
Place the starting gate at 40 meters
User prompt
Place the starting gate a little further ahead of the character
User prompt
Place the starting gate in the same area as the character
User prompt
Place the starting gate at 20 meters
User prompt
Put a starting gate
User prompt
Bring back the location of the boxes
User prompt
The boxes should not be animated, they should remain stationary and appear closer to the ground.
User prompt
Let the boxes stick to the ground
User prompt
Add small boxes to the game and collectable coins when broken.
User prompt
Let it turn right and left ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Box = Container.expand(function () { var self = Container.call(this); var boxGraphics = self.attachAsset('square_button', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5, tint: 0x8B4513 }); self.speed = gameSpeed; self.broken = false; self.health = 1; // Can be broken in one hit self.update = function () { self.x -= self.speed; }; // Method to break the box and spawn coins self.breakBox = function () { if (!self.broken) { self.broken = true; // Create breaking effect LK.effects.flashObject(self, 0xFFFFFF, 300); // Spawn 2-3 coins around the box var numCoins = 2 + Math.floor(Math.random() * 2); for (var c = 0; c < numCoins; c++) { var coin = new Coin(); coin.x = self.x + (Math.random() - 0.5) * 100; coin.y = self.y + (Math.random() - 0.5) * 80; coins.push(coin); game.addChild(coin); } // Simple fade out without scaling or rotation tween(self, { alpha: 0 }, { duration: 400, onFinish: function onFinish() { self.destroy(); } }); } }; return self; }); var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); // Create aura effect var aura = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5, alpha: 0.3, tint: 0xFFD700 }); self.speed = gameSpeed; self.collected = false; // Floating animation self.floatOffset = 0; // Start aura pulsing animation function startAuraPulse() { tween(aura, { scaleX: 2.0, scaleY: 2.0, alpha: 0.1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(aura, { scaleX: 1.5, scaleY: 1.5, alpha: 0.3 }, { duration: 800, easing: tween.easeInOut, onFinish: startAuraPulse }); } }); } startAuraPulse(); self.update = function () { self.x -= self.speed; // Floating animation self.floatOffset += 0.15; coinGraphics.y = Math.sin(self.floatOffset) * 10; aura.y = Math.sin(self.floatOffset) * 10; // Rotation animation coinGraphics.rotation += 0.1; aura.rotation -= 0.05; // Counter-rotate aura for visual effect }; return self; }); var Gem = Container.expand(function () { var self = Container.call(this); var gemGraphics = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5 }); // Create crystalline aura effect var aura1 = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.3, scaleY: 1.3, alpha: 0.4, tint: 0x00FFFF }); var aura2 = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.6, scaleY: 1.6, alpha: 0.2, tint: 0x8A2BE2 }); self.speed = gameSpeed; self.collected = false; // Crystal aura remains steady without pulsing animation self.update = function () { self.x -= self.speed; // Crystal remains steady without rotation }; // Method to create particle effect when collected self.createParticles = function () { for (var p = 0; p < 8; p++) { var particle = LK.getAsset('gem', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3, alpha: 0.8, x: self.x, y: self.y, tint: p % 2 === 0 ? 0x00FFFF : 0x8A2BE2 }); game.addChild(particle); var angle = p / 8 * Math.PI * 2; var distance = 150 + Math.random() * 100; var targetX = self.x + Math.cos(angle) * distance; var targetY = self.y + Math.sin(angle) * distance; tween(particle, { x: targetX, y: targetY, alpha: 0, scaleX: 0.1, scaleY: 0.1, rotation: Math.PI * 2 }, { duration: 800 + Math.random() * 400, easing: tween.easeOut, onFinish: function onFinish() { particle.destroy(); } }); } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var foxGraphics = self.attachAsset('fox', { anchorX: 0.5, anchorY: 1.0 }); self.isJumping = false; self.velocityY = 0; self.groundY = 2732 - 150 - 3; // Ground level self.jumpPower = -27; self.gravity = 1.2; self.runAnimationTimer = 0; self.isSpinning = false; self.spinDamageRadius = 150; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = self.jumpPower; LK.getSound('jump').play(); // Jump animation - scale up and rotate slightly tween(foxGraphics, { scaleX: 1.2, scaleY: 1.2, rotation: -0.3 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(foxGraphics, { scaleX: 1.0, scaleY: 1.0, rotation: 0 }, { duration: 300, easing: tween.easeIn }); } }); } }; self.spinAttack = function () { if (!self.isSpinning) { self.isSpinning = true; LK.getSound('jump').play(); // Reuse jump sound for spin // Horizontal rotation animation around character's center tween(foxGraphics, { rotation: Math.PI * 4, // 2 full horizontal rotations scaleX: 1.5, scaleY: 1.5, tint: 0xFF4500 }, { duration: 600, easing: tween.easeOut, onFinish: function onFinish() { self.isSpinning = false; foxGraphics.rotation = 0; foxGraphics.scaleX = 1.0; foxGraphics.scaleY = 1.0; foxGraphics.tint = 0xFFFFFF; } }); } }; self.update = function () { // Handle horizontal movement if (moveLeft && self.x > 100) { self.x -= playerSpeed; foxGraphics.scaleX = -1.0; // Face left } if (moveRight && self.x < 1948) { self.x += playerSpeed; foxGraphics.scaleX = 1.0; // Face right } if (self.isJumping) { self.velocityY += self.gravity; self.y += self.velocityY; // Land on ground if (self.y >= self.groundY) { self.y = self.groundY; self.isJumping = false; self.velocityY = 0; } } else { // Running animation when on ground self.runAnimationTimer += 0.2; foxGraphics.y = Math.sin(self.runAnimationTimer) * 3; if (!moveLeft && !moveRight) { foxGraphics.scaleX = 1.0 + Math.sin(self.runAnimationTimer * 2) * 0.05; } } }; return self; }); var StartingGate = Container.expand(function () { var self = Container.call(this); var gateGraphics = self.attachAsset('gate', { anchorX: 0.5, anchorY: 1.0, scaleX: 1.0, scaleY: 1.0 }); self.speed = gameSpeed; self.update = function () { self.x -= self.speed; }; return self; }); var Trail = Container.expand(function () { var self = Container.call(this); var trailGraphics = self.attachAsset('fox', { anchorX: 0.5, anchorY: 1.0, scaleX: 0.6, scaleY: 0.6, alpha: 0.7 }); self.speed = gameSpeed; self.update = function () { self.x -= self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var player; var coins = []; var gems = []; var boxes = []; var trails = []; var gameSpeed = 8; var spawnTimer = 0; var coinCount = 0; var gemCount = 0; var distanceScore = 0; var groundY = 2732 - 150; var playerLives = 3; var trailTimer = 0; var crystalSpawned = false; var startingGate; var background1, background2; var playerSpeed = 12; var moveLeft = false; var moveRight = false; // UI Elements var coinIcon = LK.getAsset('coin_icon', { anchorX: 0.5, anchorY: 0, x: 0, y: 20 }); LK.gui.top.addChild(coinIcon); var coinText = new Text2('0', { size: 60, fill: 0xFFFFFF, font: "'Arial Black', 'Impact', 'Trebuchet MS', sans-serif", fontWeight: '900', stroke: 0x000000, strokeThickness: 15 }); coinText.anchor.set(0.5, 0); coinText.x = 0; coinText.y = 110; LK.gui.top.addChild(coinText); var gemIcon = LK.getAsset('gem_icon', { anchorX: 0.5, anchorY: 0, x: 150, y: 20 }); LK.gui.top.addChild(gemIcon); var gemText = new Text2('0', { size: 60, fill: 0xFF69B4, font: "'Arial Black', 'Impact', 'Trebuchet MS', sans-serif", fontWeight: '900', stroke: 0x000000, strokeThickness: 15 }); gemText.anchor.set(0.5, 0); gemText.x = 150; gemText.y = 110; LK.gui.top.addChild(gemText); var scoreText = new Text2('Distance: 0', { size: 90, fill: 0xFFFFFF, fontStyle: 'italic', fontWeight: 'bold' }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); // Create heart UI elements var hearts = []; for (var h = 0; h < 3; h++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5, x: 97 + h * 105, y: 193 }); hearts.push(heart); LK.gui.topLeft.addChild(heart); } ; // Spin button removed // Play background music constantly LK.playMusic('Arkaplanmuzik'); // Create endless scrolling background background1 = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 })); background2 = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 2048, y: 0 })); // Create animated ground elements for endless scrolling var ground1 = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: 0, y: groundY })); var ground2 = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: 4008, // Position second ground at end of first ground y: groundY })); // Ground animation variables var groundAnimationTimer = 0; // Create starting gate startingGate = new StartingGate(); startingGate.x = 400 + 40 * 10; // Position at 40 meters (40m * 10 pixels per meter) startingGate.y = groundY + 75; // Position gate a little higher above the ground game.addChild(startingGate); // Create player (will be added to foreground later) player = new Player(); player.x = 400; player.y = groundY - 3; player.isInvulnerable = false; // Touch controls for movement and jumping var touchStartX = null; var touchStartY = null; var minSwipeDistance = 100; // Minimum distance for swipe detection game.down = function (x, y, obj) { touchStartX = x; touchStartY = y; // Start movement based on touch position if (x < 1024) { moveLeft = true; moveRight = false; } else { moveRight = true; moveLeft = false; } }; game.up = function (x, y, obj) { // Stop horizontal movement moveLeft = false; moveRight = false; if (touchStartY !== null && touchStartX !== null) { var swipeDistanceY = touchStartY - y; // Positive means swipe up var swipeDistanceX = Math.abs(touchStartX - x); // If swipe up is dominant over horizontal movement if (swipeDistanceY >= minSwipeDistance && swipeDistanceY > swipeDistanceX) { player.jump(); } touchStartY = null; touchStartX = null; } }; game.move = function (x, y, obj) { // Update movement direction based on current touch position if (touchStartX !== null) { if (x < 1024) { moveLeft = true; moveRight = false; } else { moveRight = true; moveLeft = false; } } }; // Spin button interaction removed function spawnCoin() { var coin = new Coin(); coin.x = 2048 + 100; coin.y = groundY - 100 - Math.random() * 150; coins.push(coin); game.addChild(coin); } function spawnGem() { var gem = new Gem(); gem.x = 2048 + 100; gem.y = groundY - 80 - Math.random() * 200; gems.push(gem); game.addChild(gem); } function spawnBox() { var box = new Box(); box.x = 2048 + 100; box.y = groundY - 45; // Closer to ground level boxes.push(box); game.addChild(box); } game.update = function () { // Increase distance score distanceScore += 1; scoreText.setText(Math.floor(distanceScore / 10) + 'm'); // Gradually increase speed gameSpeed = 8 + distanceScore / 2000; // Update starting gate if (startingGate && startingGate.parent) { startingGate.speed = gameSpeed; // Remove gate when it goes off screen if (startingGate.x < -200) { startingGate.destroy(); startingGate = null; } } // Move background with game progression background1.x -= gameSpeed * 0.3; // Slower parallax effect background2.x -= gameSpeed * 0.3; // Reset background positions for endless scrolling if (background1.x <= -2048) { background1.x = background2.x + 2048; } if (background2.x <= -2048) { background2.x = background1.x + 2048; } // Move both ground elements with game progression ground1.x -= gameSpeed; ground2.x -= gameSpeed; // Reset ground positions for endless scrolling if (ground1.x <= -4008) { ground1.x = ground2.x + 4008; } if (ground2.x <= -4008) { ground2.x = ground1.x + 4008; } // Animate ground with subtle movement groundAnimationTimer += 0.1; var groundOffset = Math.sin(groundAnimationTimer) * 2; ground1.y = groundY + groundOffset; ground2.y = groundY + groundOffset; // Add slight scale animation to ground var scaleAnimation = 1.0 + Math.sin(groundAnimationTimer * 0.5) * 0.02; ground1.scaleY = scaleAnimation; ground2.scaleY = scaleAnimation; // Update spawn timer spawnTimer++; trailTimer++; // Create trail when player is jumping if (player.isJumping && trailTimer % 3 == 0) { var trail = new Trail(); trail.x = player.x; trail.y = player.y; trail.speed = gameSpeed; trails.push(trail); game.addChild(trail); // Fade out trail tween(trail, { alpha: 0, scaleX: 0.3, scaleY: 0.3 }, { duration: 500, onFinish: function onFinish() { trail.destroy(); } }); } // Spawn additional coins if (spawnTimer % 60 == 0 && Math.random() < 0.8) { spawnCoin(); } // Spawn boxes occasionally if (spawnTimer % 90 == 0 && Math.random() < 0.6) { spawnBox(); } // Spawn crystal at exactly 100 meters var currentDistance = Math.floor(distanceScore / 10); if (currentDistance >= 100 && !crystalSpawned) { spawnGem(); crystalSpawned = true; } // Update and check coins for (var j = coins.length - 1; j >= 0; j--) { var coin = coins[j]; coin.speed = gameSpeed; // Check collection or spin attack var distanceX = coin.x - player.x; var distanceY = coin.y - player.y; var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); var isInSpinRange = player.isSpinning && distance <= player.spinDamageRadius; if (!coin.collected && (player.intersects(coin) || isInSpinRange)) { coin.collected = true; coinCount++; LK.setScore(coinCount); coinText.setText(coinCount); LK.getSound('coin').play(); // Visual feedback - enhanced for spin attacks if (isInSpinRange) { LK.effects.flashObject(coin, 0xFF4500, 300); } else { LK.effects.flashObject(coin, 0xFFFFFF, 300); } tween(coin, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, onFinish: function onFinish() { coin.destroy(); } }); coins.splice(j, 1); continue; } // Remove off-screen coins if (coin.x < -50) { coin.destroy(); coins.splice(j, 1); } } // Update and check gems for (var g = gems.length - 1; g >= 0; g--) { var gem = gems[g]; gem.speed = gameSpeed; // Check collection or spin attack var distanceX = gem.x - player.x; var distanceY = gem.y - player.y; var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); var isInSpinRange = player.isSpinning && distance <= player.spinDamageRadius; if (!gem.collected && (player.intersects(gem) || isInSpinRange)) { gem.collected = true; gemCount++; coinCount += 5; // Gems are worth 5 points LK.setScore(coinCount); coinText.setText(coinCount); gemText.setText(gemCount); LK.getSound('gem_collect').play(); // Visual feedback with particle explosion - enhanced for spin attacks if (isInSpinRange) { LK.effects.flashScreen(0xFF4500, 200); } else { LK.effects.flashScreen(0x00FFFF, 200); } gem.createParticles(); gem.destroy(); gems.splice(g, 1); continue; } // Remove off-screen gems if (gem.x < -50) { gem.destroy(); gems.splice(g, 1); } } // Update and check boxes for (var b = boxes.length - 1; b >= 0; b--) { var box = boxes[b]; box.speed = gameSpeed; // Check collision with player or spin attack var distanceX = box.x - player.x; var distanceY = box.y - player.y; var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); var isInSpinRange = player.isSpinning && distance <= player.spinDamageRadius; if (!box.broken && (player.intersects(box) || isInSpinRange)) { box.breakBox(); boxes.splice(b, 1); continue; } // Remove off-screen boxes if (box.x < -50) { box.destroy(); boxes.splice(b, 1); } } // Update and clean up trails for (var k = trails.length - 1; k >= 0; k--) { var trail = trails[k]; trail.speed = gameSpeed; // Remove off-screen or completely faded trails if (trail.x < -100 || trail.alpha <= 0.1) { trail.destroy(); trails.splice(k, 1); } } // Ensure player stays in foreground by re-adding it if (player.parent !== game) { game.addChild(player); } else { // Move player to top of render order game.removeChild(player); game.addChild(player); } };
===================================================================
--- original.js
+++ change.js
@@ -233,8 +233,17 @@
});
}
};
self.update = function () {
+ // Handle horizontal movement
+ if (moveLeft && self.x > 100) {
+ self.x -= playerSpeed;
+ foxGraphics.scaleX = -1.0; // Face left
+ }
+ if (moveRight && self.x < 1948) {
+ self.x += playerSpeed;
+ foxGraphics.scaleX = 1.0; // Face right
+ }
if (self.isJumping) {
self.velocityY += self.gravity;
self.y += self.velocityY;
// Land on ground
@@ -246,9 +255,11 @@
} else {
// Running animation when on ground
self.runAnimationTimer += 0.2;
foxGraphics.y = Math.sin(self.runAnimationTimer) * 3;
- foxGraphics.scaleX = 1.0 + Math.sin(self.runAnimationTimer * 2) * 0.05;
+ if (!moveLeft && !moveRight) {
+ foxGraphics.scaleX = 1.0 + Math.sin(self.runAnimationTimer * 2) * 0.05;
+ }
}
};
return self;
});
@@ -307,8 +318,11 @@
var trailTimer = 0;
var crystalSpawned = false;
var startingGate;
var background1, background2;
+var playerSpeed = 12;
+var moveLeft = false;
+var moveRight = false;
// UI Elements
var coinIcon = LK.getAsset('coin_icon', {
anchorX: 0.5,
anchorY: 0,
@@ -409,24 +423,51 @@
player = new Player();
player.x = 400;
player.y = groundY - 3;
player.isInvulnerable = false;
-// Touch controls for swipe up to jump
+// Touch controls for movement and jumping
+var touchStartX = null;
var touchStartY = null;
var minSwipeDistance = 100; // Minimum distance for swipe detection
game.down = function (x, y, obj) {
+ touchStartX = x;
touchStartY = y;
+ // Start movement based on touch position
+ if (x < 1024) {
+ moveLeft = true;
+ moveRight = false;
+ } else {
+ moveRight = true;
+ moveLeft = false;
+ }
};
game.up = function (x, y, obj) {
- if (touchStartY !== null) {
- var swipeDistance = touchStartY - y; // Positive means swipe up
- if (swipeDistance >= minSwipeDistance) {
- // Swipe up detected - make player jump
+ // Stop horizontal movement
+ moveLeft = false;
+ moveRight = false;
+ if (touchStartY !== null && touchStartX !== null) {
+ var swipeDistanceY = touchStartY - y; // Positive means swipe up
+ var swipeDistanceX = Math.abs(touchStartX - x);
+ // If swipe up is dominant over horizontal movement
+ if (swipeDistanceY >= minSwipeDistance && swipeDistanceY > swipeDistanceX) {
player.jump();
}
touchStartY = null;
+ touchStartX = null;
}
};
+game.move = function (x, y, obj) {
+ // Update movement direction based on current touch position
+ if (touchStartX !== null) {
+ if (x < 1024) {
+ moveLeft = true;
+ moveRight = false;
+ } else {
+ moveRight = true;
+ moveLeft = false;
+ }
+ }
+};
// Spin button interaction removed
function spawnCoin() {
var coin = new Coin();
coin.x = 2048 + 100;
Just crystal
Just his head
Background, endless, forest, winter, cartoon. In-Game asset. 2d. High contrast. No shadows
Only the line of the ears and the color of the paws should be gray
Only the line of the ears and the color of the paws should be gray
Let C2 have the character's color
Only the line of the ears and the color of the paws should be gray
Delete the character on it
A version without snow
Koyu mavi elips start butonu. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows
Uçan bir dinazor. In-Game asset. 2d. High contrast. No shadows
Alev topu. In-Game asset. 2d. High contrast. No shadows
Mavi top rasengan top. In-Game asset. 2d. High contrast. No shadows
jump
Sound effect
coin
Sound effect
Arkaplanmuzik
Music
gem_collect
Sound effect
happy_giggle
Sound effect
Canazalma
Sound effect
Arkaplanmuzik1
Music
wumpa1
Sound effect
cancan
Sound effect
box_break
Sound effect
tnt_break
Sound effect
enemy_sound
Sound effect
bullet_sound
Sound effect