User prompt
When setting score text also update LK.setScore
User prompt
when decreasing segmentWidth decrease by 15
User prompt
when subtracting from segmentWidth set min to 350
Code edit (1 edits merged)
Please save this source code
User prompt
set score text drop shadow color to 373330
User prompt
use weight: not fontweight
User prompt
set score weight:800 and add a black drop shadow
User prompt
set the minimum road segment length to 1200
User prompt
when setting closestSegment, set a used property on the element and check for that so you can only get a point for approaching a segment once
User prompt
use a reference to the specific road segment rather than an index
User prompt
Score should update each time a new road segment is the closet segment
User prompt
Add score to the game
User prompt
move down shadow by 50px
User prompt
make the minimum segment length to 700
User prompt
before destroying a road segment first destroy it's shadow
User prompt
Fix Bug: 'ReferenceError: Can't find variable: shadow' in this line: 'roadContainer.addChildAt(shadow, 0);' Line Number: 104
User prompt
assign segment.shadow to shadow
User prompt
set shadow alpha to 1
===================================================================
--- original.js
+++ change.js
@@ -1,11 +1,19 @@
+/****
+* Classes
+****/
var Particle = Container.expand(function () {
var self = Container.call(this);
- var particleGraphics = self.createAsset('particle', 'Car Trail Particle', 0.5, 0.5);
+ var particleGraphics = self.attachAsset('particle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
particleGraphics.rotation = Math.PI / 4;
self.lifetime = 100;
self.tick = function () {
- if (--self.lifetime <= 0) self.destroy();
+ if (--self.lifetime <= 0) {
+ self.destroy();
+ }
};
});
var Car = Container.expand(function () {
var self = Container.call(this);
@@ -17,9 +25,12 @@
x: vector.x * cosAngle - vector.y * sinAngle,
y: vector.x * sinAngle + vector.y * cosAngle
};
};
- var carGraphics = self.createAsset('car', 'Drifting Car', .5, .5);
+ var carGraphics = self.attachAsset('car', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
self.speed = 5;
self.direction = 0;
self.momentum = {
x: 0,
@@ -51,175 +62,188 @@
self.direction = self.direction === 0 ? 1 : 0;
carGraphics.scale.x *= -1;
};
});
-var Game = Container.expand(function () {
- var self = Container.call(this);
- self.calculateDistanceToPoint = function (point, segmentStart, segmentEnd) {
- var A = point.x - segmentStart.x;
- var B = point.y - segmentStart.y;
- var C = segmentEnd.x - segmentStart.x;
- var D = segmentEnd.y - segmentStart.y;
- var dot = A * C + B * D;
- var len_sq = C * C + D * D;
- var param = -1;
- if (len_sq != 0) {
- param = dot / len_sq;
- }
- var xx, yy;
- if (param < 0) {
- xx = segmentStart.x;
- yy = segmentStart.y;
- } else if (param > 1) {
- xx = segmentEnd.x;
- yy = segmentEnd.y;
- } else {
- xx = segmentStart.x + param * C;
- yy = segmentStart.y + param * D;
- }
- var dx = point.x - xx;
- var dy = point.y - yy;
- return Math.sqrt(dx * dx + dy * dy);
- };
- self.addRoadSegment = function () {
- var lastSegment = roadSegments[roadSegments.length - 1];
- zigzag = !zigzag;
- var segment = roadContainer.createAsset('roadSegment', 'Road Segment', 0.5, 0);
- segment.width = segmentWidth;
- segmentWidth = Math.max(350, segmentWidth - 15);
- segment.height = i === 1 ? 3000 : Math.floor(Math.random() * (4000 - 1200 + 1)) + 1200;
- segment.rotation = zigzag ? -Math.PI - Math.PI / 4 : -Math.PI + Math.PI / 4;
- segment.y = currentY;
- segment.x = currentX;
- var adjustedHeight = segment.height - segmentWidth / 2;
- currentY += adjustedHeight * Math.cos(segment.rotation);
- currentX -= adjustedHeight * Math.sin(segment.rotation);
- segment.shadow = roadContainer.createAsset('roadSegmentShadow', 'Road Segment Shadow', 0.5, 0);
- segment.shadow.width = segment.width;
- segment.shadow.height = segment.height;
- segment.shadow.rotation = segment.rotation;
- segment.shadow.x = segment.x;
- segment.shadow.y = segment.y + 50;
- segment.shadow.alpha = 1;
- segment.used = false;
- roadSegments.push(segment);
- roadContainer.addChildAt(segment.shadow, 0);
- roadContainer.addChild(segment);
- };
- LK.stageContainer.setBackgroundColor(0xc39977);
- var particles = [];
- var mainContainer = self.addChild(new Container());
- var roadContainer = mainContainer.addChild(new Container());
- var roadSegments = [];
- var segmentLength = Math.floor(Math.random() * (1000 - 200 + 1)) + 200;
- var segmentWidth = 1200;
- var currentX = 2048 / 2;
- var currentY = 2732 / 2;
- var zigzag = true;
- for (var i = 1; i <= 15; i++) {
- self.addRoadSegment();
+
+/****
+* Initialize Game
+****/
+var game = new LK.Game({
+ backgroundColor: 0x000000
+});
+
+/****
+* Game Code
+****/
+game.calculateDistanceToPoint = function (point, segmentStart, segmentEnd) {
+ var A = point.x - segmentStart.x;
+ var B = point.y - segmentStart.y;
+ var C = segmentEnd.x - segmentStart.x;
+ var D = segmentEnd.y - segmentStart.y;
+ var dot = A * C + B * D;
+ var len_sq = C * C + D * D;
+ var param = -1;
+ if (len_sq != 0) {
+ param = dot / len_sq;
}
- var scoreText = new Text2('0', {
- size: 150,
- fill: "#ffffff",
- weight: '800',
- dropShadow: true,
- dropShadowColor: '#373330',
- dropShadowBlur: 4,
- dropShadowAngle: Math.PI / 6,
- dropShadowDistance: 6
+ var xx, yy;
+ if (param < 0) {
+ xx = segmentStart.x;
+ yy = segmentStart.y;
+ } else if (param > 1) {
+ xx = segmentEnd.x;
+ yy = segmentEnd.y;
+ } else {
+ xx = segmentStart.x + param * C;
+ yy = segmentStart.y + param * D;
+ }
+ var dx = point.x - xx;
+ var dy = point.y - yy;
+ return Math.sqrt(dx * dx + dy * dy);
+};
+game.addRoadSegment = function () {
+ var lastSegment = roadSegments[roadSegments.length - 1];
+ zigzag = !zigzag;
+ var segment = roadContainer.attachAsset('roadSegment', {
+ anchorX: 0.5
});
- scoreText.anchor.set(0.5, 0);
- LK.gui.topCenter.addChild(scoreText);
- var car = mainContainer.addChild(new Car());
- car.x = 2048 / 2;
- car.y = 2732 / 2;
- var isGameOver = false;
- var score = 0;
- var closestSegment = null;
- stage.on('down', function (obj) {
- car.changeDirection();
+ segment.width = segmentWidth;
+ segmentWidth = Math.max(350, segmentWidth - 15);
+ segment.height = i === 1 ? 3000 : Math.floor(Math.random() * (4000 - 1200 + 1)) + 1200;
+ segment.rotation = zigzag ? -Math.PI - Math.PI / 4 : -Math.PI + Math.PI / 4;
+ segment.y = currentY;
+ segment.x = currentX;
+ var adjustedHeight = segment.height - segmentWidth / 2;
+ currentY += adjustedHeight * Math.cos(segment.rotation);
+ currentX -= adjustedHeight * Math.sin(segment.rotation);
+ segment.shadow = roadContainer.attachAsset('roadSegmentShadow', {
+ anchorX: 0.5
});
- LK.on('tick', function () {
- car.move();
- var carIsOnRoad = false;
- var carPosition = {
- x: car.x,
- y: car.y
+ segment.shadow.width = segment.width;
+ segment.shadow.height = segment.height;
+ segment.shadow.rotation = segment.rotation;
+ segment.shadow.x = segment.x;
+ segment.shadow.y = segment.y + 50;
+ segment.shadow.alpha = 1;
+ segment.used = false;
+ roadSegments.push(segment);
+ roadContainer.addChildAt(segment.shadow, 0);
+ roadContainer.addChild(segment);
+};
+game.setBackgroundColor(0xc39977);
+var particles = [];
+var mainContainer = game.addChild(new Container());
+var roadContainer = mainContainer.addChild(new Container());
+var roadSegments = [];
+var segmentLength = Math.floor(Math.random() * (1000 - 200 + 1)) + 200;
+var segmentWidth = 1200;
+var currentX = 2048 / 2;
+var currentY = 2732 / 2;
+var zigzag = true;
+for (var i = 1; i <= 15; i++) {
+ game.addRoadSegment();
+}
+var scoreText = new Text2('0', {
+ size: 150,
+ fill: "#ffffff",
+ weight: '800',
+ dropShadow: true,
+ dropShadowColor: '#373330',
+ dropShadowBlur: 4,
+ dropShadowAngle: Math.PI / 6,
+ dropShadowDistance: 6
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.topCenter.addChild(scoreText);
+var car = mainContainer.addChild(new Car());
+car.x = 2048 / 2;
+car.y = 2732 / 2;
+var isGameOver = false;
+var score = 0;
+var closestSegment = null;
+game.on('down', function (obj) {
+ car.changeDirection();
+});
+LK.on('tick', function () {
+ car.move();
+ var carIsOnRoad = false;
+ var carPosition = {
+ x: car.x,
+ y: car.y
+ };
+ var currentClosestSegment = null;
+ var currentClosestDistance = Infinity;
+ roadSegments.forEach(function (segment) {
+ var segmentStart = {
+ x: segment.x + Math.sin(segment.rotation) * 100,
+ y: segment.y - Math.cos(segment.rotation) * 100
};
- var currentClosestSegment = null;
- var currentClosestDistance = Infinity;
- roadSegments.forEach(function (segment) {
- var segmentStart = {
- x: segment.x + Math.sin(segment.rotation) * 100,
- y: segment.y - Math.cos(segment.rotation) * 100
- };
- var segmentEnd = {
- x: segment.x - Math.sin(segment.rotation) * (segment.height - segment.width / 2),
- y: segment.y + Math.cos(segment.rotation) * (segment.height - segment.width / 2)
- };
- var distance = self.calculateDistanceToPoint(carPosition, segmentStart, segmentEnd);
- if (distance < currentClosestDistance) {
- currentClosestDistance = distance;
- currentClosestSegment = segment;
- }
- if (distance < segment.width / 2 - 50) {
- carIsOnRoad = true;
- }
- });
- if (closestSegment !== currentClosestSegment && !currentClosestSegment.used) {
- closestSegment = currentClosestSegment;
- closestSegment.used = true;
- score++;
- scoreText.setText(score.toString());
+ var segmentEnd = {
+ x: segment.x - Math.sin(segment.rotation) * (segment.height - segment.width / 2),
+ y: segment.y + Math.cos(segment.rotation) * (segment.height - segment.width / 2)
+ };
+ var distance = game.calculateDistanceToPoint(carPosition, segmentStart, segmentEnd);
+ if (distance < currentClosestDistance) {
+ currentClosestDistance = distance;
+ currentClosestSegment = segment;
}
- if (!carIsOnRoad) {
- LK.showGameOver();
- } else {}
- var particleOffsets = [{
- x: 20,
- y: 140
- }, {
- x: 20 + 100,
- y: 140 - 100
- }, {
- x: 20 - 150,
- y: 140 - 150
- }, {
- x: 20 - 150 + 100,
- y: 140 - 150 - 100
- }];
- for (var i = 0; i < particleOffsets.length; i++) {
- var alphaValue = Math.max(0, Math.min(1, Math.abs(car.nonTravelMomentum) / 5 - 0.5));
- if (alphaValue > 0) {
- var particle = new Particle();
- particle.alpha = alphaValue;
- var noiseX = (Math.random() - 0.5) * 10;
- var noiseY = (Math.random() - 0.5) * 10;
- particle.x = car.x + (car.direction === 0 ? -1 : 1) * particleOffsets[i].x + noiseX;
- particle.y = car.y + particleOffsets[i].y + noiseY;
- mainContainer.addChildAt(particle, 1);
- particles.push(particle);
- }
+ if (distance < segment.width / 2 - 50) {
+ carIsOnRoad = true;
}
- particles.forEach(function (particle, index) {
- particle.tick();
- if (particle.lifetime <= 0) {
- particles.splice(index, 1);
- }
- });
- var carLocalPosition = self.toLocal(car.position, car.parent);
- var offsetX = (2048 / 2 - carLocalPosition.x) / 20;
- var offsetY = (2732 - 450 - carLocalPosition.y) / 20;
- mainContainer.x += offsetX;
- mainContainer.y += offsetY;
- for (var i = roadSegments.length - 1; i >= 0; i--) {
- var segmentGlobalPosition = self.toLocal(roadSegments[i].position, roadSegments[i].parent);
- if (segmentGlobalPosition.y - roadSegments[i].height > 2732 * 2) {
- roadSegments[i].shadow.destroy();
- roadSegments[i].destroy();
- roadSegments.splice(i, 1);
- self.addRoadSegment();
- }
+ });
+ if (closestSegment !== currentClosestSegment && !currentClosestSegment.used) {
+ closestSegment = currentClosestSegment;
+ closestSegment.used = true;
+ score++;
+ LK.setScore(score);
+ scoreText.setText(score.toString());
+ }
+ if (!carIsOnRoad) {
+ LK.showGameOver();
+ } else {}
+ var particleOffsets = [{
+ x: 20,
+ y: 140
+ }, {
+ x: 20 + 100,
+ y: 140 - 100
+ }, {
+ x: 20 - 150,
+ y: 140 - 150
+ }, {
+ x: 20 - 150 + 100,
+ y: 140 - 150 - 100
+ }];
+ for (var i = 0; i < particleOffsets.length; i++) {
+ var alphaValue = Math.max(0, Math.min(1, Math.abs(car.nonTravelMomentum) / 5 - 0.5));
+ if (alphaValue > 0) {
+ var particle = new Particle();
+ particle.alpha = alphaValue;
+ var noiseX = (Math.random() - 0.5) * 10;
+ var noiseY = (Math.random() - 0.5) * 10;
+ particle.x = car.x + (car.direction === 0 ? -1 : 1) * particleOffsets[i].x + noiseX;
+ particle.y = car.y + particleOffsets[i].y + noiseY;
+ mainContainer.addChildAt(particle, 1);
+ particles.push(particle);
}
+ }
+ particles.forEach(function (particle, index) {
+ particle.tick();
+ if (particle.lifetime <= 0) {
+ particles.splice(index, 1);
+ }
});
-});
+ var carLocalPosition = game.toLocal(car.position, car.parent);
+ var offsetX = (2048 / 2 - carLocalPosition.x) / 20;
+ var offsetY = (2732 - 450 - carLocalPosition.y) / 20;
+ mainContainer.x += offsetX;
+ mainContainer.y += offsetY;
+ for (var i = roadSegments.length - 1; i >= 0; i--) {
+ var segmentGlobalPosition = game.toLocal(roadSegments[i].position, roadSegments[i].parent);
+ if (segmentGlobalPosition.y - roadSegments[i].height > 2732 * 2) {
+ roadSegments[i].shadow.destroy();
+ roadSegments[i].destroy();
+ roadSegments.splice(i, 1);
+ game.addRoadSegment();
+ }
+ }
+});
\ No newline at end of file