User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'tower.lastX')' in or related to this line: 'if (tower.lastX >= -200 && tower.x < -200) {' Line Number: 175
User prompt
El avión va más rápida que la cámara
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'tower.lastX')' in or related to this line: 'if (tower.lastX >= -200 && tower.x < -200) {' Line Number: 172
User prompt
El juego no se inicia
User prompt
Tower Dodge Flight
Initial prompt
Quiero que crees un juego en el que haya que volar un avión y esquivar torres, cuanta más torres esquives más puntos conseguirás, quiero que vaya por niveles, cuánto más alto el nivel mayor será el nivel de dificultad, si te chocas con una de las torres pierdes y tienes que reintentar el nivel, para pasar al siguiente nivel siempre hay que completar el anterior, excepto en el primer nivel
/**** * Classes ****/ var Aircraft = Container.expand(function () { var self = Container.call(this); var aircraftGraphics = self.attachAsset('aircraft', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.lastY = 0; self.update = function () { // Keep aircraft moving forward self.x += self.speed; // Update last position for collision detection self.lastY = self.y; }; return self; }); var Tower = Container.expand(function () { var self = Container.call(this); var towerGraphics = self.attachAsset('tower', { anchorX: 0.5, anchorY: 0.5 }); self.passed = false; self.update = function () { // Initialize lastX if not set if (self.lastX === undefined) self.lastX = self.x; // Move tower from right to left self.x -= 4; // Update last position self.lastX = self.x; }; return self; }); /**** * Initialize Game ****/ // Game variables var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background for flight game }); /**** * Game Code ****/ // Game variables // Initialize assets for the tower dodge flight game var aircraft; var towers = []; var currentLevel = 1; var levelScore = 0; var towersToComplete = 10; // Towers to dodge to complete level var towerSpawnTimer = 0; var gameStarted = false; // UI Elements var levelText = new Text2('Level: 1', { size: 60, fill: 0xFFFFFF }); levelText.anchor.set(0, 0); LK.gui.topLeft.addChild(levelText); levelText.x = 120; // Avoid top-left menu area levelText.y = 20; var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); var progressText = new Text2('Progress: 0/10', { size: 50, fill: 0xFFFFFF }); progressText.anchor.set(0.5, 0); LK.gui.top.addChild(progressText); progressText.y = 100; // Initialize aircraft aircraft = game.addChild(new Aircraft()); aircraft.x = 300; aircraft.y = 1366; // Center vertically aircraft.lastIntersecting = false; // Touch controls for aircraft movement var dragActive = false; game.down = function (x, y, obj) { dragActive = true; gameStarted = true; }; game.up = function (x, y, obj) { dragActive = false; }; game.move = function (x, y, obj) { if (dragActive) { aircraft.y = y; // Keep aircraft within screen bounds if (aircraft.y < 50) aircraft.y = 50; if (aircraft.y > 2680) aircraft.y = 2680; } }; // Function to spawn tower function spawnTower() { var tower = new Tower(); tower.x = 2200; // Start from right edge // Random height position with gap for aircraft to pass var gapSize = Math.max(300, 400 - currentLevel * 20); // Gap gets smaller each level var gapPosition = Math.random() * (2732 - gapSize - 200) + 100; // Create top tower var topTower = game.addChild(new Tower()); topTower.x = tower.x; topTower.y = gapPosition / 2; topTower.lastX = topTower.x; topTower.lastIntersecting = false; towers.push(topTower); // Create bottom tower var bottomTower = game.addChild(new Tower()); bottomTower.x = tower.x; bottomTower.y = gapPosition + gapSize + (2732 - gapPosition - gapSize) / 2; bottomTower.lastX = bottomTower.x; bottomTower.lastIntersecting = false; towers.push(bottomTower); } // Function to complete level function completeLevel() { currentLevel++; levelScore = 0; towersToComplete = Math.min(15, 10 + currentLevel); // Max 15 towers per level // Clear existing towers for (var i = towers.length - 1; i >= 0; i--) { towers[i].destroy(); towers.splice(i, 1); } // Reset aircraft position aircraft.x = 300; aircraft.y = 1366; // Update UI levelText.setText('Level: ' + currentLevel); progressText.setText('Progress: 0/' + towersToComplete); // Flash screen green for level completion LK.effects.flashScreen(0x00ff00, 1000); } // Function to handle game over function gameOver() { LK.effects.flashScreen(0xff0000, 1000); LK.getSound('crash').play(); LK.showGameOver(); } // Main game update loop game.update = function () { if (!gameStarted) return; // Spawn towers based on level difficulty var spawnRate = Math.max(60, 120 - currentLevel * 10); // Faster spawning each level if (LK.ticks % spawnRate === 0) { spawnTower(); } // Update towers for (var i = towers.length - 1; i >= 0; i--) { var tower = towers[i]; // Check if tower went off screen if (tower.lastX >= -200 && tower.x < -200) { tower.destroy(); towers.splice(i, 1); continue; } // Check collision with aircraft var currentIntersecting = aircraft.intersects(tower); if (!tower.lastIntersecting && currentIntersecting) { gameOver(); return; } tower.lastIntersecting = currentIntersecting; // Check if aircraft passed tower (score point) if (!tower.passed && tower.x < aircraft.x - 100) { tower.passed = true; levelScore++; LK.setScore(LK.getScore() + 10 * currentLevel); // More points per level LK.getSound('dodge').play(); // Update progress var progress = Math.floor(levelScore / 2); // Two towers per obstacle progressText.setText('Progress: ' + progress + '/' + towersToComplete); scoreText.setText('Score: ' + LK.getScore()); // Check level completion if (progress >= towersToComplete) { completeLevel(); } } } // Keep aircraft moving at level-appropriate speed aircraft.speed = 3 + currentLevel * 0.5; };
===================================================================
--- original.js
+++ change.js
@@ -22,11 +22,12 @@
var towerGraphics = self.attachAsset('tower', {
anchorX: 0.5,
anchorY: 0.5
});
- self.lastX = 0;
self.passed = false;
self.update = function () {
+ // Initialize lastX if not set
+ if (self.lastX === undefined) self.lastX = self.x;
// Move tower from right to left
self.x -= 4;
// Update last position
self.lastX = self.x;
@@ -108,14 +109,16 @@
// Create top tower
var topTower = game.addChild(new Tower());
topTower.x = tower.x;
topTower.y = gapPosition / 2;
+ topTower.lastX = topTower.x;
topTower.lastIntersecting = false;
towers.push(topTower);
// Create bottom tower
var bottomTower = game.addChild(new Tower());
bottomTower.x = tower.x;
bottomTower.y = gapPosition + gapSize + (2732 - gapPosition - gapSize) / 2;
+ bottomTower.lastX = bottomTower.x;
bottomTower.lastIntersecting = false;
towers.push(bottomTower);
}
// Function to complete level