/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Car = Container.expand(function () { var self = Container.call(this); var carGraphics = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0; self.maxSpeed = 12; self.acceleration = 0.02; self.driftDirection = 0; // -1 left, 0 straight, 1 right self.driftSpeed = 0; self.maxDriftSpeed = 8; self.driftDecay = 0.92; self.roadPosition = 0; // Position relative to road center (-1 to 1) self.update = function () { // Increase speed over time if (self.speed < self.maxSpeed) { self.speed += self.acceleration; } // Apply drifting if (self.driftDirection !== 0) { self.driftSpeed += self.driftDirection * 0.8; self.driftSpeed = Math.max(-self.maxDriftSpeed, Math.min(self.maxDriftSpeed, self.driftSpeed)); } // Apply drift decay when not actively drifting if (self.driftDirection === 0) { self.driftSpeed *= self.driftDecay; } // Update road position based on drift self.roadPosition += self.driftSpeed * 0.02; // Update visual rotation for drifting effect carGraphics.rotation = self.driftSpeed * 0.15; }; self.startDrift = function (direction) { self.driftDirection = direction; }; self.stopDrift = function () { self.driftDirection = 0; }; return self; }); var RoadSegment = Container.expand(function () { var self = Container.call(this); self.roadWidth = 400; self.curveAmount = 0; self.segmentHeight = 40; var roadCenter = self.attachAsset('roadSegment', { anchorX: 0.5, anchorY: 0.5 }); var leftEdge = self.attachAsset('roadEdge', { anchorX: 0.5, anchorY: 0.5 }); var rightEdge = self.attachAsset('roadEdge', { anchorX: 0.5, anchorY: 0.5 }); self.setup = function (width, curve) { self.roadWidth = width; self.curveAmount = curve; roadCenter.width = width; leftEdge.x = -width / 2 - 10; rightEdge.x = width / 2 + 10; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ var car = game.addChild(new Car()); var roadSegments = []; var roadCurve = 0; var roadCurveChange = 0; var distance = 0; var gameSpeed = 1; var roadWidth = 400; var minRoadWidth = 200; var roadNarrowRate = 0.001; // UI Elements var scoreTxt = new Text2('0m', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var speedTxt = new Text2('Speed: 0', { size: 50, fill: 0xFFFFFF }); speedTxt.anchor.set(0, 0); speedTxt.x = 50; speedTxt.y = 50; LK.gui.topLeft.addChild(speedTxt); // Position car car.x = 2048 / 2; car.y = 2732 - 300; // Create initial road segments for (var i = 0; i < 20; i++) { var segment = new RoadSegment(); segment.y = 2732 - i * 40; segment.x = 2048 / 2; segment.setup(roadWidth, 0); roadSegments.push(segment); game.addChild(segment); } // Input handling var isDrifting = false; var driftDirection = 0; game.down = function (x, y, obj) { isDrifting = true; driftDirection = x < 2048 / 2 ? -1 : 1; car.startDrift(driftDirection); LK.getSound('drift').play(); }; game.up = function (x, y, obj) { isDrifting = false; car.stopDrift(); }; // Game update loop game.update = function () { // Update distance and score distance += car.speed * 0.1; scoreTxt.setText(Math.floor(distance) + 'm'); speedTxt.setText('Speed: ' + Math.floor(car.speed * 10)); // Gradually narrow the road if (roadWidth > minRoadWidth) { roadWidth -= roadNarrowRate; } // Update road curve roadCurveChange += (Math.random() - 0.5) * 0.02; roadCurveChange = Math.max(-0.1, Math.min(0.1, roadCurveChange)); roadCurve += roadCurveChange; // Move road segments down for (var i = roadSegments.length - 1; i >= 0; i--) { var segment = roadSegments[i]; segment.y += car.speed * 2; // Apply curve to segment position var curveOffset = Math.sin(segment.y * 0.01 + roadCurve) * 100; segment.x = 2048 / 2 + curveOffset; // Remove segments that are off screen if (segment.y > 2732 + 100) { segment.destroy(); roadSegments.splice(i, 1); } } // Add new road segments at the top while (roadSegments.length < 25) { var newSegment = new RoadSegment(); var lastSegment = roadSegments[0]; newSegment.y = lastSegment.y - 40; var curveOffset = Math.sin(newSegment.y * 0.01 + roadCurve) * 100; newSegment.x = 2048 / 2 + curveOffset; newSegment.setup(roadWidth, roadCurve); roadSegments.unshift(newSegment); game.addChild(newSegment); } // Update car position based on road curve and drift var nearestSegment = null; var minDistance = Infinity; for (var j = 0; j < roadSegments.length; j++) { var seg = roadSegments[j]; var dist = Math.abs(seg.y - car.y); if (dist < minDistance) { minDistance = dist; nearestSegment = seg; } } if (nearestSegment) { // Calculate car's world position relative to road var carWorldX = car.x + car.roadPosition * 200; var roadCenterX = nearestSegment.x; var roadLeftEdge = roadCenterX - roadWidth / 2; var roadRightEdge = roadCenterX + roadWidth / 2; // Update car visual position car.x = roadCenterX + car.roadPosition * 200; // Check if car is off the road if (carWorldX < roadLeftEdge || carWorldX > roadRightEdge) { // Game over LK.getSound('crash').play(); LK.effects.flashScreen(0xff0000, 1000); LK.setScore(Math.floor(distance)); LK.showGameOver(); } } // Increase game speed over time gameSpeed += 0.001; if (car.maxSpeed < 20) { car.maxSpeed += 0.002; } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,207 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Car = Container.expand(function () {
+ var self = Container.call(this);
+ var carGraphics = self.attachAsset('car', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 0;
+ self.maxSpeed = 12;
+ self.acceleration = 0.02;
+ self.driftDirection = 0; // -1 left, 0 straight, 1 right
+ self.driftSpeed = 0;
+ self.maxDriftSpeed = 8;
+ self.driftDecay = 0.92;
+ self.roadPosition = 0; // Position relative to road center (-1 to 1)
+ self.update = function () {
+ // Increase speed over time
+ if (self.speed < self.maxSpeed) {
+ self.speed += self.acceleration;
+ }
+ // Apply drifting
+ if (self.driftDirection !== 0) {
+ self.driftSpeed += self.driftDirection * 0.8;
+ self.driftSpeed = Math.max(-self.maxDriftSpeed, Math.min(self.maxDriftSpeed, self.driftSpeed));
+ }
+ // Apply drift decay when not actively drifting
+ if (self.driftDirection === 0) {
+ self.driftSpeed *= self.driftDecay;
+ }
+ // Update road position based on drift
+ self.roadPosition += self.driftSpeed * 0.02;
+ // Update visual rotation for drifting effect
+ carGraphics.rotation = self.driftSpeed * 0.15;
+ };
+ self.startDrift = function (direction) {
+ self.driftDirection = direction;
+ };
+ self.stopDrift = function () {
+ self.driftDirection = 0;
+ };
+ return self;
+});
+var RoadSegment = Container.expand(function () {
+ var self = Container.call(this);
+ self.roadWidth = 400;
+ self.curveAmount = 0;
+ self.segmentHeight = 40;
+ var roadCenter = self.attachAsset('roadSegment', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var leftEdge = self.attachAsset('roadEdge', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var rightEdge = self.attachAsset('roadEdge', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.setup = function (width, curve) {
+ self.roadWidth = width;
+ self.curveAmount = curve;
+ roadCenter.width = width;
+ leftEdge.x = -width / 2 - 10;
+ rightEdge.x = width / 2 + 10;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87ceeb
+});
+
+/****
+* Game Code
+****/
+var car = game.addChild(new Car());
+var roadSegments = [];
+var roadCurve = 0;
+var roadCurveChange = 0;
+var distance = 0;
+var gameSpeed = 1;
+var roadWidth = 400;
+var minRoadWidth = 200;
+var roadNarrowRate = 0.001;
+// UI Elements
+var scoreTxt = new Text2('0m', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var speedTxt = new Text2('Speed: 0', {
+ size: 50,
+ fill: 0xFFFFFF
+});
+speedTxt.anchor.set(0, 0);
+speedTxt.x = 50;
+speedTxt.y = 50;
+LK.gui.topLeft.addChild(speedTxt);
+// Position car
+car.x = 2048 / 2;
+car.y = 2732 - 300;
+// Create initial road segments
+for (var i = 0; i < 20; i++) {
+ var segment = new RoadSegment();
+ segment.y = 2732 - i * 40;
+ segment.x = 2048 / 2;
+ segment.setup(roadWidth, 0);
+ roadSegments.push(segment);
+ game.addChild(segment);
+}
+// Input handling
+var isDrifting = false;
+var driftDirection = 0;
+game.down = function (x, y, obj) {
+ isDrifting = true;
+ driftDirection = x < 2048 / 2 ? -1 : 1;
+ car.startDrift(driftDirection);
+ LK.getSound('drift').play();
+};
+game.up = function (x, y, obj) {
+ isDrifting = false;
+ car.stopDrift();
+};
+// Game update loop
+game.update = function () {
+ // Update distance and score
+ distance += car.speed * 0.1;
+ scoreTxt.setText(Math.floor(distance) + 'm');
+ speedTxt.setText('Speed: ' + Math.floor(car.speed * 10));
+ // Gradually narrow the road
+ if (roadWidth > minRoadWidth) {
+ roadWidth -= roadNarrowRate;
+ }
+ // Update road curve
+ roadCurveChange += (Math.random() - 0.5) * 0.02;
+ roadCurveChange = Math.max(-0.1, Math.min(0.1, roadCurveChange));
+ roadCurve += roadCurveChange;
+ // Move road segments down
+ for (var i = roadSegments.length - 1; i >= 0; i--) {
+ var segment = roadSegments[i];
+ segment.y += car.speed * 2;
+ // Apply curve to segment position
+ var curveOffset = Math.sin(segment.y * 0.01 + roadCurve) * 100;
+ segment.x = 2048 / 2 + curveOffset;
+ // Remove segments that are off screen
+ if (segment.y > 2732 + 100) {
+ segment.destroy();
+ roadSegments.splice(i, 1);
+ }
+ }
+ // Add new road segments at the top
+ while (roadSegments.length < 25) {
+ var newSegment = new RoadSegment();
+ var lastSegment = roadSegments[0];
+ newSegment.y = lastSegment.y - 40;
+ var curveOffset = Math.sin(newSegment.y * 0.01 + roadCurve) * 100;
+ newSegment.x = 2048 / 2 + curveOffset;
+ newSegment.setup(roadWidth, roadCurve);
+ roadSegments.unshift(newSegment);
+ game.addChild(newSegment);
+ }
+ // Update car position based on road curve and drift
+ var nearestSegment = null;
+ var minDistance = Infinity;
+ for (var j = 0; j < roadSegments.length; j++) {
+ var seg = roadSegments[j];
+ var dist = Math.abs(seg.y - car.y);
+ if (dist < minDistance) {
+ minDistance = dist;
+ nearestSegment = seg;
+ }
+ }
+ if (nearestSegment) {
+ // Calculate car's world position relative to road
+ var carWorldX = car.x + car.roadPosition * 200;
+ var roadCenterX = nearestSegment.x;
+ var roadLeftEdge = roadCenterX - roadWidth / 2;
+ var roadRightEdge = roadCenterX + roadWidth / 2;
+ // Update car visual position
+ car.x = roadCenterX + car.roadPosition * 200;
+ // Check if car is off the road
+ if (carWorldX < roadLeftEdge || carWorldX > roadRightEdge) {
+ // Game over
+ LK.getSound('crash').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.setScore(Math.floor(distance));
+ LK.showGameOver();
+ }
+ }
+ // Increase game speed over time
+ gameSpeed += 0.001;
+ if (car.maxSpeed < 20) {
+ car.maxSpeed += 0.002;
+ }
+};
\ No newline at end of file