/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var DoodleCharacter = Container.expand(function () { var self = Container.call(this); var characterGraphics = self.attachAsset('doodleCharacter', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = 0; self.velocityX = 0; self.gravity = 0.4; self.jumpPower = -15; self.isJumping = true; self.maxVelocityX = 8; self.friction = 0.95; self.jump = function () { self.velocityY = self.jumpPower; self.isJumping = true; LK.getSound('jump').play(); }; self.update = function () { // Apply gravity self.velocityY += self.gravity; // Apply velocities self.y += self.velocityY; self.x += self.velocityX; // Apply friction to horizontal movement self.velocityX *= self.friction; // Wrap around screen horizontally if (self.x < -40) { self.x = 2048 + 40; } else if (self.x > 2048 + 40) { self.x = -40; } // Update jumping state if (self.velocityY > 0) { self.isJumping = true; } }; return self; }); var Platform = Container.expand(function (type) { var self = Container.call(this); self.platformType = type || 'normal'; self.used = false; self.direction = 1; self.speed = 1; var assetId = 'platform'; if (self.platformType === 'breakable') { assetId = 'breakablePlatform'; } else if (self.platformType === 'moving') { assetId = 'movingPlatform'; } var platformGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { if (self.platformType === 'moving') { self.x += self.direction * self.speed; if (self.x <= 60 || self.x >= 2048 - 60) { self.direction *= -1; } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var doodleCharacter = game.addChild(new DoodleCharacter()); var platforms = []; var cameraY = 0; var highestY = 2732; var platformSpacing = 200; var lastPlatformY = 2732 - 100; // Initialize starting platforms for (var i = 0; i < 15; i++) { var platformY = 2732 - i * platformSpacing; var platformX = Math.random() * (2048 - 120) + 60; var platformType = 'normal'; if (i > 5) { var rand = Math.random(); if (rand < 0.15) { platformType = 'breakable'; } else if (rand < 0.25) { platformType = 'moving'; } } var platform = new Platform(platformType); platform.x = platformX; platform.y = platformY; platforms.push(platform); game.addChild(platform); } // Position character on first platform doodleCharacter.x = platforms[platforms.length - 1].x; doodleCharacter.y = platforms[platforms.length - 1].y - 50; // Score display var scoreTxt = new Text2('0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Control variables var isPressingLeft = false; var isPressingRight = false; // Touch controls game.down = function (x, y, obj) { if (x < 2048 / 2) { isPressingLeft = true; } else { isPressingRight = true; } }; game.up = function (x, y, obj) { isPressingLeft = false; isPressingRight = false; }; game.update = function () { // Handle character input if (isPressingLeft) { doodleCharacter.velocityX -= 0.8; if (doodleCharacter.velocityX < -doodleCharacter.maxVelocityX) { doodleCharacter.velocityX = -doodleCharacter.maxVelocityX; } } if (isPressingRight) { doodleCharacter.velocityX += 0.8; if (doodleCharacter.velocityX > doodleCharacter.maxVelocityX) { doodleCharacter.velocityX = doodleCharacter.maxVelocityX; } } // Check platform collisions for (var i = platforms.length - 1; i >= 0; i--) { var platform = platforms[i]; // Only check collision when character is falling and above platform if (doodleCharacter.velocityY > 0 && doodleCharacter.y < platform.y && doodleCharacter.y + 40 > platform.y - 10 && doodleCharacter.x > platform.x - 60 && doodleCharacter.x < platform.x + 60) { if (platform.platformType === 'breakable' && !platform.used) { platform.used = true; tween(platform, { alpha: 0, scaleY: 0.1 }, { duration: 300, onFinish: function onFinish() { platform.destroy(); platforms.splice(platforms.indexOf(platform), 1); } }); LK.getSound('break').play(); } doodleCharacter.jump(); break; } } // Update camera to follow character if (doodleCharacter.y < highestY) { highestY = doodleCharacter.y; var targetCameraY = highestY - 1500; cameraY = targetCameraY; // Move all game objects down relative to camera game.y = -cameraY; // Update score based on height var score = Math.floor((2732 - highestY) / 10); LK.setScore(score); scoreTxt.setText(LK.getScore()); } // Generate new platforms as we go higher while (lastPlatformY > highestY - 2000) { lastPlatformY -= platformSpacing; var platformX = Math.random() * (2048 - 120) + 60; var platformType = 'normal'; var rand = Math.random(); if (rand < 0.2) { platformType = 'breakable'; } else if (rand < 0.3) { platformType = 'moving'; } var platform = new Platform(platformType); platform.x = platformX; platform.y = lastPlatformY; platforms.push(platform); game.addChild(platform); } // Remove platforms that are too far down for (var j = platforms.length - 1; j >= 0; j--) { if (platforms[j].y > cameraY + 3000) { platforms[j].destroy(); platforms.splice(j, 1); } } // Check game over (character fell below screen) if (doodleCharacter.y > cameraY + 2732 + 200) { LK.showGameOver(); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,212 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var DoodleCharacter = Container.expand(function () {
+ var self = Container.call(this);
+ var characterGraphics = self.attachAsset('doodleCharacter', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityY = 0;
+ self.velocityX = 0;
+ self.gravity = 0.4;
+ self.jumpPower = -15;
+ self.isJumping = true;
+ self.maxVelocityX = 8;
+ self.friction = 0.95;
+ self.jump = function () {
+ self.velocityY = self.jumpPower;
+ self.isJumping = true;
+ LK.getSound('jump').play();
+ };
+ self.update = function () {
+ // Apply gravity
+ self.velocityY += self.gravity;
+ // Apply velocities
+ self.y += self.velocityY;
+ self.x += self.velocityX;
+ // Apply friction to horizontal movement
+ self.velocityX *= self.friction;
+ // Wrap around screen horizontally
+ if (self.x < -40) {
+ self.x = 2048 + 40;
+ } else if (self.x > 2048 + 40) {
+ self.x = -40;
+ }
+ // Update jumping state
+ if (self.velocityY > 0) {
+ self.isJumping = true;
+ }
+ };
+ return self;
+});
+var Platform = Container.expand(function (type) {
+ var self = Container.call(this);
+ self.platformType = type || 'normal';
+ self.used = false;
+ self.direction = 1;
+ self.speed = 1;
+ var assetId = 'platform';
+ if (self.platformType === 'breakable') {
+ assetId = 'breakablePlatform';
+ } else if (self.platformType === 'moving') {
+ assetId = 'movingPlatform';
+ }
+ var platformGraphics = self.attachAsset(assetId, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.update = function () {
+ if (self.platformType === 'moving') {
+ self.x += self.direction * self.speed;
+ if (self.x <= 60 || self.x >= 2048 - 60) {
+ self.direction *= -1;
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var doodleCharacter = game.addChild(new DoodleCharacter());
+var platforms = [];
+var cameraY = 0;
+var highestY = 2732;
+var platformSpacing = 200;
+var lastPlatformY = 2732 - 100;
+// Initialize starting platforms
+for (var i = 0; i < 15; i++) {
+ var platformY = 2732 - i * platformSpacing;
+ var platformX = Math.random() * (2048 - 120) + 60;
+ var platformType = 'normal';
+ if (i > 5) {
+ var rand = Math.random();
+ if (rand < 0.15) {
+ platformType = 'breakable';
+ } else if (rand < 0.25) {
+ platformType = 'moving';
+ }
+ }
+ var platform = new Platform(platformType);
+ platform.x = platformX;
+ platform.y = platformY;
+ platforms.push(platform);
+ game.addChild(platform);
+}
+// Position character on first platform
+doodleCharacter.x = platforms[platforms.length - 1].x;
+doodleCharacter.y = platforms[platforms.length - 1].y - 50;
+// Score display
+var scoreTxt = new Text2('0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Control variables
+var isPressingLeft = false;
+var isPressingRight = false;
+// Touch controls
+game.down = function (x, y, obj) {
+ if (x < 2048 / 2) {
+ isPressingLeft = true;
+ } else {
+ isPressingRight = true;
+ }
+};
+game.up = function (x, y, obj) {
+ isPressingLeft = false;
+ isPressingRight = false;
+};
+game.update = function () {
+ // Handle character input
+ if (isPressingLeft) {
+ doodleCharacter.velocityX -= 0.8;
+ if (doodleCharacter.velocityX < -doodleCharacter.maxVelocityX) {
+ doodleCharacter.velocityX = -doodleCharacter.maxVelocityX;
+ }
+ }
+ if (isPressingRight) {
+ doodleCharacter.velocityX += 0.8;
+ if (doodleCharacter.velocityX > doodleCharacter.maxVelocityX) {
+ doodleCharacter.velocityX = doodleCharacter.maxVelocityX;
+ }
+ }
+ // Check platform collisions
+ for (var i = platforms.length - 1; i >= 0; i--) {
+ var platform = platforms[i];
+ // Only check collision when character is falling and above platform
+ if (doodleCharacter.velocityY > 0 && doodleCharacter.y < platform.y && doodleCharacter.y + 40 > platform.y - 10 && doodleCharacter.x > platform.x - 60 && doodleCharacter.x < platform.x + 60) {
+ if (platform.platformType === 'breakable' && !platform.used) {
+ platform.used = true;
+ tween(platform, {
+ alpha: 0,
+ scaleY: 0.1
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ platform.destroy();
+ platforms.splice(platforms.indexOf(platform), 1);
+ }
+ });
+ LK.getSound('break').play();
+ }
+ doodleCharacter.jump();
+ break;
+ }
+ }
+ // Update camera to follow character
+ if (doodleCharacter.y < highestY) {
+ highestY = doodleCharacter.y;
+ var targetCameraY = highestY - 1500;
+ cameraY = targetCameraY;
+ // Move all game objects down relative to camera
+ game.y = -cameraY;
+ // Update score based on height
+ var score = Math.floor((2732 - highestY) / 10);
+ LK.setScore(score);
+ scoreTxt.setText(LK.getScore());
+ }
+ // Generate new platforms as we go higher
+ while (lastPlatformY > highestY - 2000) {
+ lastPlatformY -= platformSpacing;
+ var platformX = Math.random() * (2048 - 120) + 60;
+ var platformType = 'normal';
+ var rand = Math.random();
+ if (rand < 0.2) {
+ platformType = 'breakable';
+ } else if (rand < 0.3) {
+ platformType = 'moving';
+ }
+ var platform = new Platform(platformType);
+ platform.x = platformX;
+ platform.y = lastPlatformY;
+ platforms.push(platform);
+ game.addChild(platform);
+ }
+ // Remove platforms that are too far down
+ for (var j = platforms.length - 1; j >= 0; j--) {
+ if (platforms[j].y > cameraY + 3000) {
+ platforms[j].destroy();
+ platforms.splice(j, 1);
+ }
+ }
+ // Check game over (character fell below screen)
+ if (doodleCharacter.y > cameraY + 2732 + 200) {
+ LK.showGameOver();
+ }
+};
\ No newline at end of file