/**** * Classes ****/ var Car = Container.expand(function () { var self = Container.call(this); self.projectMovement = function (vector) { var angle = -Math.PI / 4; var cosAngle = Math.cos(angle); var sinAngle = Math.sin(angle); return { x: vector.x * cosAngle - vector.y * sinAngle, y: vector.x * sinAngle + vector.y * cosAngle }; }; var carGraphics = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.ORIGINAL_SPEED = 2; self.speed = self.ORIGINAL_SPEED; self.direction = 0; self.momentum = { x: 0, y: 0 }; self._move_migrated = function () { var momentumModifier = 0.1; self.speed *= 1.01; if (self.direction === 0) { self.momentum.x += self.speed * momentumModifier; } else { self.momentum.y -= self.speed * momentumModifier; } var projectedMovement = self.projectMovement(self.momentum); self.x += projectedMovement.x; self.y += projectedMovement.y; var nonTravelMomentum; if (self.direction === 0) { self.momentum.x *= 0.98; self.momentum.y *= 0.95; nonTravelMomentum = self.momentum.y; } else { self.momentum.x *= 0.95; self.momentum.y *= 0.98; nonTravelMomentum = self.momentum.x; } self.nonTravelMomentum = nonTravelMomentum; }; self.changeDirection = function () { self.direction = self.direction === 0 ? 1 : 0; self.speed = self.ORIGINAL_SPEED; carGraphics.scale.x *= -1; LK.getSound('Skid').play(); }; }); var Driver = Container.expand(function () { var self = Container.call(this); self.x = +1700; self.y = +1500; var driverGraphics = self.attachAsset('driver', { anchorX: 0.5, anchorY: 0.5 }); }); var Particle = Container.expand(function () { var self = Container.call(this); 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(); } }; }); /**** * 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 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 }); 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 }); 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 = []; LK.playMusic('backgroundMusic'); 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: 0xFFFFFF, weight: '800', dropShadow: true, dropShadowColor: '#373330', dropShadowBlur: 4, dropShadowAngle: Math.PI / 6, dropShadowDistance: 6 }); scoreText.anchor.set(0, 0); LK.gui.top.addChild(scoreText); var notificationTexts = ['Onun sıcak kucağını özlüyorum', 'Her kıvrımda aşkım daha da büyüyor', 'Zaman duman gibi akıp gidiyor', 'Sesi zihnimde yankılanıyor', 'Her viraj umutsuzluğumu bilemekte', 'Kıvrımlar beni onun kucağına götürüyor', 'Her dönüşte tutkularım alevleniyor', 'Zaman geçiyor ama aşk kalıyor', 'Her hareketim umutsuzlukla keskinleşiyor', 'Kavuşma, en büyük itici gücüm', 'Beni bekliyor mu?', 'Nerede olabilir?', 'Zamanında ulaşabilecek miyim?', 'Vardığımda bana gülümseyecek mi?', 'Geldiğimi biliyor mu?', 'Ödülüm onun kucağı', 'Hâlâ beni hatırlıyor mu?', 'Gözlerinde aşkı görebilecek miyim?', 'Acelemi hissediyor mu?', 'Aşkımız daha da güçlenecek mi?', 'Sesi benim kutup yıldızım', 'Hâlâ kalbini taşıyor muyum?', 'Zamanında ulaşabilir miyim?', 'Hâlâ bize inanıyor mu?', 'Aşkımız her şeye galip gelecek mi?', 'Ne kadar hızlı gidebilirim?', 'Sınırlarımı zorlayabilir miyim?', 'Hız beni ona ulaştırır mı?', 'Acele mi beni yönlendiriyor?', 'Zamana karşı yarışabilir miyim?', 'Bu zamanla bir yarış mı?', 'Ivme bizi kurtarabilir mi?', 'Hız şeridinde miyim?', 'Yeni bir rekor kırabilir miyim?', 'Hızla mı besleniyorum?', 'Zamanı geride bırakabilir miyim?', 'En hızlı sürücü ben miyim?', 'Ona hızla ulaşabilir miyim?', 'Aşkın aciliyeti hızımı artırıyor', 'Her kilometre beni ona yaklaştırıyor', 'Bu yol sonsuz mu yoksa ebedi mi?', 'Yıldızlar yolculuğuma tanıklık ediyor', 'Yol onun adını mırıldanıyor', 'Rüzgar onun varlığını fısıldıyor', 'Her viraj kararlılığımı sınıyor', 'Aşkı motorumu besliyor', 'Aşk mesafeyi aşabilir mi?', 'Ufka bakıp beni düşünüyor mu?', 'Yeniden kavuşmayı hayal ediyor mu?', 'Hızımdan etkilenecek mi?', 'Şafak vakti bizi bir araya getirecek mi?', 'Aşk yolu fethedebilir mi?', 'Her kilometre kalp atışı kadar yakın', 'Onu mu kovalıyorum yoksa kendimi mi?', 'Gelişimi hissediyor mu?', 'Ay bana yol gösteriyor', 'Ufuk onun vaadini taşıyor', 'Motorumun sesini duyacak mı?', 'Zamanın boşluğunu kapatabilir miyim?', 'Bu aşk mı yoksa takıntı mı?', 'Yolculuk aşkımızı tanımlıyor', 'Asfalt tekerlerimin altında mırıldanıyor', 'Şehir gözlerimin önünde bir bulanıklık oluyor', 'Kokusu hafızamda hâlâ taze', 'Farlarım karanlığı deliyor', 'Yol bir kalp atışı gibi uzanıyor', 'Adrenalin damarlarımda şarkı söylüyor', 'Kahkahası azmimi besliyor', 'Her viraj cesaretimi test ediyor', 'Gökyüzü onun siluetini saklıyor', 'Yarışın ödülü o mu?', 'Her saniye özlemimi kışkırtıyor', 'Bu gece yıldızlar bizim için hizalanacak mı?', 'Yol bilmecelerle konuşuyor', 'Umutla mı yoksa çaresizlikle mi sürüyorum?', 'Hayali aynalarda dans ediyor', 'Motor kararlılıkla homurdanıyor', 'Her vites geçişinde saat daha da yüksek sesle tıklıyor', 'Rüzgar adını bana taşıyor', 'Lastiklerim kalbine giden yolu çiziyor', 'Yol düşüncelerimi tüketiyor', 'Aşkı pusulam yapıyor', 'Her kırmızı ışık sonsuzluk gibi geliyor', 'Hızım özlemime yetişebilir mi?', 'Her tabela beni ona yaklaştırıyor', 'Bu yarış aşk için mi kurtuluş için mi?', 'Açık yol hiçbir şey vaat etmiyor', 'Gözleri beni sisin içinden çekiyor', 'Ufuk onun yokluğuyla yanıyor', 'Her gölge bir anısını gizliyor', 'Gece şüphemi yutuyor', 'İçimdeki kaosu dizginleyebilir miyim?', 'Mesafe sadakatimi küçümsüyor', 'Her sokak vedasını fısıldıyor', 'Yol onun nazik dokunuşu gibi kıvrılıyor', 'Her virajda kararlılığım artıyor', 'Gecenin soğuğu ateşimi söndüremez', 'Aynaya her bakış beni ileri itiyor', 'Hız göstergesi özlemimi ölçüyor', 'Her virajda adını ruhuma kazıyorum', 'Yokluğu önümdeki yolu şekillendiriyor', 'Her saniye yakıyor', 'Çığlığı yankılanıyor', 'Saat çığlık atıyor', 'Yavaşlayamam', 'Kokusu hızla soluyor', 'Yol geri saldırıyor', 'Zaman bir bıçak gibi kesiyor', 'Elimden kayıyor', 'Rüzgar adını uluyor', 'Tutkum artıyor', 'Lastikler aciliyeti haykırıyor', 'Yüzü silikleşiyor', 'Gece beni beklemeyecek', 'Zamanım tükeniyor', 'Motor onun adını haykırıyor', 'Kalbim onunla yarışıyor', 'Her kıvrım bana karşı', 'Onu hayal kırıklığına uğratamam', 'Karanlık beni alaya alıyor', 'Sesi benim yaşam çizgim', 'Ufuk yaklaşmıyor', 'Her saniye bir işkence', 'Beni şimdiye ihtiyacı var', 'Kader ensemde nefes alıyor', 'Her dönüş zamanı çalıyor', 'Sıcaklığı kayboluyor', 'Onu bırakmam', 'Yol direniyor', 'Çok geç olmamalı', 'Kalp atışı soluyor', 'Yıldızlar hızla bulanıyor', 'Fren yok, sadece aşk', 'Gölgesinin peşindeyim', 'Her ışık umudu yakıyor', 'Bu yolculuk yaşamla ölüm arasında', 'Kucaklaması elimden kayıyor', 'Gece beni affetmeyecek', 'Zaman bana ait değil', 'Yol bir savaş alanı']; var usedNotificationTexts = []; function getRandomNotificationText() { if (notificationTexts.length === 0) { notificationTexts = usedNotificationTexts.splice(0, usedNotificationTexts.length); } var index = Math.floor(Math.random() * notificationTexts.length); var text = notificationTexts.splice(index, 1)[0]; usedNotificationTexts.push(text); return text; } var notificationText = new Text2(getRandomNotificationText(), { size: 60, fill: 0xFFFFFF, weight: '400', align: 'center', stroke: '#000000', strokeThickness: 8 }); notificationText.anchor.set(0, 4); notificationText.x -= 350; LK.gui.bottom.addChild(notificationText); var car = mainContainer.addChild(new Car()); car.x = 2048 / 2; car.y = 2732 / 2; var driver = LK.gui.addChild(new Driver()); driver.x = 250; driver.y = 1800; var isGameOver = false; var score = 0; var closestSegment = null; game.on('down', function (x, y, obj) { car.changeDirection(); }); LK.on('tick', function () { car._move_migrated(); 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 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 (distance < segment.width / 2 - 50) { carIsOnRoad = true; } }); if (closestSegment !== currentClosestSegment && !currentClosestSegment.used) { closestSegment = currentClosestSegment; closestSegment.used = true; score++; car.ORIGINAL_SPEED += 0.1; scoreText.setText(score.toString()); notificationText.setText(getRandomNotificationText()); } 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(); } } });
===================================================================
--- original.js
+++ change.js
@@ -54,9 +54,9 @@
};
});
var Driver = Container.expand(function () {
var self = Container.call(this);
- self.x = +1500;
+ self.x = +1700;
self.y = +1500;
var driverGraphics = self.attachAsset('driver', {
anchorX: 0.5,
anchorY: 0.5