/**** * 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,10 +1,5 @@
/****
-* Plugins
-****/
-var tween = LK.import("@upit/tween.v1");
-
-/****
* Classes
****/
var Car = Container.expand(function () {
var self = Container.call(this);