User prompt
Please fix the bug: 'TypeError: player.update is not a function' in or related to this line: 'player.update();' Line Number: 372
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'isTouching')' in or related to this line: 'if (player.isTouching) {' Line Number: 311
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'length')' in or related to this line: 'for (var i = enemies.length - 1; i >= 0; i--) {' Line Number: 370
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in or related to this line: 'player.update();' Line Number: 366
User prompt
Please fix the bug: 'ReferenceError: player is not defined' in or related to this line: 'player.update();' Line Number: 358
User prompt
Please fix the bug: 'level is not defined' in or related to this line: 'var levelText = new Text2('Level: ' + level, {' Line Number: 283
User prompt
make a main menu
User prompt
bi hata yapıyosun hala göremiyorum
User prompt
hala göremiyorum ve oyunu başlatamıyorum
User prompt
göremiyorum
User prompt
menüye oyunu başlat seçeneği ekle
User prompt
ana menü yap,menüdeyken oyun başlamasın
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'setText')' in or related to this line: 'levelText.setText('Level: ' + level);' Line Number: 592
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'rotation')' in or related to this line: 'var sin = Math.sin(player.rotation);' Line Number: 43
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'var dx = player.x - enemy.x;' Line Number: 525
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 9 + Math.random() * 4.5; // Increase base speed and range self.health = 1; self.lastWasIntersecting = false; self.update = function () { // Move towards the player's current position self.x += self.vx; self.y += self.vy; // Check collision with player var isIntersecting = self.intersects(player); // Only deal damage if enemy collides with the white part of the player (not the headDot) // Since headDot is not a child, calculate its global position based on player's position and rotation var headDotOffset = 90; // Distance from player center to nose (approximate, based on player asset height/2 - headDot radius) var headDotLocalX = 0; var headDotLocalY = -headDotOffset; var sin = Math.sin(player.rotation); var cos = Math.cos(player.rotation); var headDotGlobal = { x: player.x + (headDotLocalX * cos - headDotLocalY * sin), y: player.y + (headDotLocalX * sin + headDotLocalY * cos) }; var enemyGlobal = self.toGlobal({ x: 0, y: 0 }); var dx = headDotGlobal.x - enemyGlobal.x; var dy = headDotGlobal.y - enemyGlobal.y; var distToHead = Math.sqrt(dx * dx + dy * dy); // The headDot has a radius of 12, so if the enemy is within 24px of the headDot center, it's hitting the head var isHittingHead = distToHead < 24; if (!self.lastWasIntersecting && isIntersecting && !isHittingHead) { player.takeDamage(10); self.destroy(); var index = enemies.indexOf(self); if (index > -1) { enemies.splice(index, 1); } } self.lastWasIntersecting = isIntersecting; // Check if the enemy has exited the screen without colliding with the player if (!isIntersecting && (self.x < -self.width || self.x > 2048 + self.width || self.y < -self.height || self.y > 2732 + self.height)) { LK.setScore(LK.getScore() + 10); self.destroy(); var index = enemies.indexOf(self); if (index > -1) { enemies.splice(index, 1); } } }; self.takeDamage = function (amount) { self.health -= amount; if (self.health <= 0) { LK.getSound('explosion').play(); LK.effects.flashObject(self, 0xFFFFFF, 100); self.destroy(); var index = enemies.indexOf(self); if (index > -1) { enemies.splice(index, 1); } LK.setScore(LK.getScore() + 10); } }; return self; }); // Set background color var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // The headDot is not added to the player, so the red ellipse is not visible self.health = 100; self.rotation = 0; self.shootCooldown = 0; // Store targetX and targetY for movement and aiming self.targetX = 2048 / 2; self.targetY = 2732 / 2; self.update = function () { if (self.shootCooldown > 0) { self.shootCooldown--; } // Move player towards target position var dx = self.targetX - self.x; var dy = self.targetY - self.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 1) { self.x += dx / dist * 8; // Slightly increased speed for faster movement self.y += dy / dist * 8; // Slightly increased speed for faster movement } // Rotate player so the head (red dot) points away from the target self.rotation = Math.atan2(self.targetY - self.y, self.targetX - self.x) + Math.PI / 2; }; self.shoot = function () { // Shooting functionality removed }; self.takeDamage = function (amount) { self.health -= 20; LK.getSound('damage').play(); LK.effects.flashObject(self, 0xFF0000, 300); healthBarForeground.width = self.health / 100 * 400; // Update health bar width to match new size // Update health text healthText.setText(self.health); // Calculate the gray overlay intensity based on remaining health var grayIntensity = 1 - self.health / 100; LK.effects.flashScreen(0x808080, 300, { alpha: grayIntensity }); if (self.health <= 0) { LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Set the background image as the game background // Update player var backgroundImage = LK.getAsset('backround', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); game.addChildAt(backgroundImage, 0); // Add as the bottom-most layer // Always play the background music asset 'ss' LK.playMusic('ss'); // --- Main Menu State --- var isMenuActive = true; var menuOverlay = new Container(); var menuBg = LK.getAsset('healthBarBackground', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, width: 900, height: 600 }); menuBg.alpha = 0.92; menuOverlay.addChild(menuBg); var menuTitle = new Text2('Uçak Oyunu', { size: 120, fill: 0xffffff, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" }); menuTitle.anchor.set(0.5, 0); menuTitle.x = 2048 / 2; menuTitle.y = 2732 / 2 - 220; menuOverlay.addChild(menuTitle); var menuStart = new Text2('Başla', { size: 100, fill: 0x00ff00, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" }); menuStart.anchor.set(0.5, 0.5); menuStart.x = 2048 / 2; menuStart.y = 2732 / 2 + 60; menuOverlay.addChild(menuStart); LK.gui.center.addChild(menuOverlay); // Only allow game input after menu is dismissed function startGameFromMenu() { if (!isMenuActive) return; isMenuActive = false; if (menuOverlay.parent) menuOverlay.parent.removeChild(menuOverlay); // Now allow game to start player = new Player(); player.x = 2048 / 2; player.y = 2732 / 2; game.addChild(player); spawnEnemy(); } // Touch/click anywhere on menu to start menuOverlay.down = function (x, y, obj) { startGameFromMenu(); }; menuStart.down = function (x, y, obj) { startGameFromMenu(); }; // Game variables var player; var enemies = []; var spawnTimer = 0; var level = 1; // Removed duplicate initialization of levelText var spawnInterval = 60; // Decrease interval for more frequent spawns var spawnDistance = 800; // Distance from center to spawn enemies var aimDirection = 0; var score = 0; // Create graphical health bar var healthBarContainer = new Container(); var healthBarBackground = LK.getAsset('healthBarBackground', { anchorX: 0, anchorY: 0 }); var healthBarForeground = LK.getAsset('healthBarForeground', { anchorX: 0, anchorY: 0 }); healthBarContainer.addChild(healthBarBackground); healthBarContainer.addChild(healthBarForeground); // Add text to display remaining health var healthText = new Text2('100', { size: 40, fill: 0xFFFFFF, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Suitable font for the game }); healthText.anchor.set(0.5, 0.5); healthBarContainer.addChild(healthText); healthText.x = healthBarBackground.width / 2; healthText.y = healthBarBackground.height / 2; healthBarForeground.anchorX = 0; healthBarForeground.anchorY = 0; LK.gui.topLeft.addChild(healthBarContainer); healthBarContainer.x = 10; // Position health bar away from the left edge healthBarContainer.y = 10; // Position health bar away from the top edge // Create score text var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Suitable font for the game }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // Create level text var levelText = new Text2('Level: ' + level, { size: 60, fill: 0xFFFFFF, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Suitable font for the game }); levelText.anchor.set(1, 0); LK.gui.topRight.addChild(levelText); levelText.x = -10; // Position level text away from the right edge // Handle touch/click input for aiming and shooting game.down = function (x, y, obj) { if (isMenuActive) return; // Set target position for player to move towards and rotate head to this position player.targetX = x; player.targetY = y; // Mark that the player is being controlled player.isTouching = true; }; game.move = function (x, y, obj) { if (isMenuActive) return; // If the player is being touched/dragged, update the target position continuously if (player.isTouching) { player.targetX = x; player.targetY = y; } }; game.up = function (x, y, obj) { if (isMenuActive) return; // Stop continuous control when touch/click is released player.isTouching = false; }; // Spawn enemy at random position around the player function spawnEnemy() { var enemy; enemy = new Enemy(); // Randomly choose an edge of the screen to spawn the enemy var edge = Math.floor(Math.random() * 4); switch (edge) { case 0: // Top edge enemy.x = Math.random() * 2048; enemy.y = -enemy.height; break; case 1: // Right edge enemy.x = 2048 + enemy.width; enemy.y = Math.random() * 2732; break; case 2: // Bottom edge enemy.x = Math.random() * 2048; enemy.y = 2732 + enemy.height; break; case 3: // Left edge enemy.x = -enemy.width; enemy.y = Math.random() * 2732; break; } // Calculate direction towards player var dx = player.x - enemy.x; var dy = player.y - enemy.y; var dist = Math.sqrt(dx * dx + dy * dy); enemy.vx = dx / dist * (enemy.speed + level * 0.5); enemy.vy = dy / dist * (enemy.speed + level * 0.5); // Rotate enemy to face the player with its sharp edge enemy.rotation = Math.atan2(dy, dx); game.addChild(enemy); enemies.push(enemy); // Increase difficulty if (spawnInterval > 30) { spawnInterval -= 0.5; } } // Game update loop game.update = function () { if (isMenuActive) return; // Update player player.update(); // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].update(); // Add animation to enemy if (typeof enemies[i] !== 'undefined' && typeof enemies[i].rotation !== 'undefined') { tween(enemies[i], { rotation: enemies[i].rotation + Math.PI * 2 }, { duration: 2000, easing: tween.easeInOut }); } } // Spawn enemies spawnTimer++; if (spawnTimer >= spawnInterval) { spawnEnemy(); spawnTimer = 0; } // Update score and level display scoreText.setText('Score: ' + LK.getScore()); levelText.setText('Level: ' + level); // Increase level every 30 points if (LK.getScore() >= level * 30) { level++; levelText.setText('Level: ' + level); // Play level up sound LK.getSound('levelUp').play(); } };
===================================================================
--- original.js
+++ change.js
@@ -25,22 +25,14 @@
// Since headDot is not a child, calculate its global position based on player's position and rotation
var headDotOffset = 90; // Distance from player center to nose (approximate, based on player asset height/2 - headDot radius)
var headDotLocalX = 0;
var headDotLocalY = -headDotOffset;
- var sin = 0,
- cos = 1,
- headDotGlobal = {
- x: 0,
- y: 0
- };
- if (typeof player !== "undefined" && player && typeof player.rotation !== "undefined") {
- sin = Math.sin(player.rotation);
- cos = Math.cos(player.rotation);
- headDotGlobal = {
- x: player.x + (headDotLocalX * cos - headDotLocalY * sin),
- y: player.y + (headDotLocalX * sin + headDotLocalY * cos)
- };
- }
+ var sin = Math.sin(player.rotation);
+ var cos = Math.cos(player.rotation);
+ var headDotGlobal = {
+ x: player.x + (headDotLocalX * cos - headDotLocalY * sin),
+ y: player.y + (headDotLocalX * sin + headDotLocalY * cos)
+ };
var enemyGlobal = self.toGlobal({
x: 0,
y: 0
});
@@ -144,344 +136,148 @@
/****
* Game Code
****/
-// --- MAIN MENU & SETTINGS UI ---
-var mainMenuContainer = new Container();
+// Set the background image as the game background
+// Update player
+var backgroundImage = LK.getAsset('backround', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: 0,
+ width: 2048,
+ height: 2732
+});
+game.addChildAt(backgroundImage, 0); // Add as the bottom-most layer
+// Always play the background music asset 'ss'
+LK.playMusic('ss');
+// --- Main Menu State ---
+var isMenuActive = true;
+var menuOverlay = new Container();
var menuBg = LK.getAsset('healthBarBackground', {
anchorX: 0.5,
anchorY: 0.5,
- x: 1024,
- y: 1366,
+ x: 2048 / 2,
+ y: 2732 / 2,
width: 900,
- height: 900
+ height: 600
});
menuBg.alpha = 0.92;
-mainMenuContainer.addChild(menuBg);
-// Title
+menuOverlay.addChild(menuBg);
var menuTitle = new Text2('Uçak Oyunu', {
size: 120,
fill: 0xffffff,
font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
});
menuTitle.anchor.set(0.5, 0);
-menuTitle.x = 1024;
-menuTitle.y = 600;
-mainMenuContainer.addChild(menuTitle);
-// Start Button
-var startBtn = LK.getAsset('healthBarForeground', {
- anchorX: 0.5,
- anchorY: 0.5,
- x: 1024,
- y: 1100,
- width: 500,
- height: 120
-});
-startBtn.interactive = true;
-startBtn.buttonMode = true;
-mainMenuContainer.addChild(startBtn);
-var startBtnText = new Text2('Oyunu Başlat', {
- size: 70,
- fill: 0x000000,
+menuTitle.x = 2048 / 2;
+menuTitle.y = 2732 / 2 - 220;
+menuOverlay.addChild(menuTitle);
+var menuStart = new Text2('Başla', {
+ size: 100,
+ fill: 0x00ff00,
font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
});
-startBtnText.anchor.set(0.5, 0.5);
-startBtnText.x = 1024;
-startBtnText.y = 1100;
-mainMenuContainer.addChild(startBtnText);
-// Settings Button
-var settingsBtn = LK.getAsset('healthBarForeground', {
- anchorX: 0.5,
- anchorY: 0.5,
- x: 1024,
- y: 1270,
- width: 500,
- height: 120
-});
-settingsBtn.interactive = true;
-settingsBtn.buttonMode = true;
-mainMenuContainer.addChild(settingsBtn);
-var settingsBtnText = new Text2('Ayarlar', {
- size: 70,
- fill: 0x000000,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
-});
-settingsBtnText.anchor.set(0.5, 0.5);
-settingsBtnText.x = 1024;
-settingsBtnText.y = 1270;
-mainMenuContainer.addChild(settingsBtnText);
-// Add menu to GUI center
-LK.gui.center.addChild(mainMenuContainer);
-// --- SETTINGS POPUP ---
-var settingsContainer = new Container();
-var settingsBg = LK.getAsset('healthBarBackground', {
- anchorX: 0.5,
- anchorY: 0.5,
- x: 1024,
- y: 1366,
- width: 800,
- height: 700
-});
-settingsBg.alpha = 0.96;
-settingsContainer.addChild(settingsBg);
-var settingsTitle = new Text2('Ayarlar', {
- size: 90,
- fill: 0xffffff,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
-});
-settingsTitle.anchor.set(0.5, 0);
-settingsTitle.x = 1024;
-settingsTitle.y = 800;
-settingsContainer.addChild(settingsTitle);
-// Music Volume
-var musicLabel = new Text2('Müzik Sesi', {
- size: 50,
- fill: 0xffffff,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
-});
-musicLabel.anchor.set(0, 0.5);
-musicLabel.x = 700;
-musicLabel.y = 1100;
-settingsContainer.addChild(musicLabel);
-var musicVolume = 1;
-var musicSliderBg = LK.getAsset('healthBarBackground', {
- anchorX: 0,
- anchorY: 0.5,
- x: 950,
- y: 1100,
- width: 300,
- height: 30
-});
-settingsContainer.addChild(musicSliderBg);
-var musicSliderFg = LK.getAsset('healthBarForeground', {
- anchorX: 0,
- anchorY: 0.5,
- x: 950,
- y: 1100,
- width: 300,
- height: 30
-});
-settingsContainer.addChild(musicSliderFg);
-function updateMusicSlider() {
- musicSliderFg.width = 300 * musicVolume;
+menuStart.anchor.set(0.5, 0.5);
+menuStart.x = 2048 / 2;
+menuStart.y = 2732 / 2 + 60;
+menuOverlay.addChild(menuStart);
+LK.gui.center.addChild(menuOverlay);
+// Only allow game input after menu is dismissed
+function startGameFromMenu() {
+ if (!isMenuActive) return;
+ isMenuActive = false;
+ if (menuOverlay.parent) menuOverlay.parent.removeChild(menuOverlay);
+ // Now allow game to start
+ player = new Player();
+ player.x = 2048 / 2;
+ player.y = 2732 / 2;
+ game.addChild(player);
+ spawnEnemy();
}
-updateMusicSlider();
-musicSliderBg.interactive = true;
-musicSliderBg.buttonMode = true;
-musicSliderBg.down = function (x, y, obj) {
- var localX = x - musicSliderBg.x;
- musicVolume = Math.max(0, Math.min(1, localX / 300));
- updateMusicSlider();
- LK.setMusicVolume(musicVolume);
+// Touch/click anywhere on menu to start
+menuOverlay.down = function (x, y, obj) {
+ startGameFromMenu();
};
-// Sound Volume
-var soundLabel = new Text2('Ses Efekti', {
- size: 50,
- fill: 0xffffff,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
-});
-soundLabel.anchor.set(0, 0.5);
-soundLabel.x = 700;
-soundLabel.y = 1200;
-settingsContainer.addChild(soundLabel);
-var soundVolume = 1;
-var soundSliderBg = LK.getAsset('healthBarBackground', {
+menuStart.down = function (x, y, obj) {
+ startGameFromMenu();
+};
+// Game variables
+var player;
+var enemies = [];
+var spawnTimer = 0;
+var level = 1;
+// Removed duplicate initialization of levelText
+var spawnInterval = 60; // Decrease interval for more frequent spawns
+var spawnDistance = 800; // Distance from center to spawn enemies
+var aimDirection = 0;
+var score = 0;
+// Create graphical health bar
+var healthBarContainer = new Container();
+var healthBarBackground = LK.getAsset('healthBarBackground', {
anchorX: 0,
- anchorY: 0.5,
- x: 950,
- y: 1200,
- width: 300,
- height: 30
+ anchorY: 0
});
-settingsContainer.addChild(soundSliderBg);
-var soundSliderFg = LK.getAsset('healthBarForeground', {
+var healthBarForeground = LK.getAsset('healthBarForeground', {
anchorX: 0,
- anchorY: 0.5,
- x: 950,
- y: 1200,
- width: 300,
- height: 30
+ anchorY: 0
});
-settingsContainer.addChild(soundSliderFg);
-function updateSoundSlider() {
- soundSliderFg.width = 300 * soundVolume;
-}
-updateSoundSlider();
-soundSliderBg.interactive = true;
-soundSliderBg.buttonMode = true;
-soundSliderBg.down = function (x, y, obj) {
- var localX = x - soundSliderBg.x;
- soundVolume = Math.max(0, Math.min(1, localX / 300));
- updateSoundSlider();
- LK.setSoundVolume(soundVolume);
-};
-// Close Settings Button
-var closeSettingsBtn = LK.getAsset('healthBarForeground', {
- anchorX: 0.5,
- anchorY: 0.5,
- x: 1024,
- y: 1400,
- width: 400,
- height: 100
+healthBarContainer.addChild(healthBarBackground);
+healthBarContainer.addChild(healthBarForeground);
+// Add text to display remaining health
+var healthText = new Text2('100', {
+ size: 40,
+ fill: 0xFFFFFF,
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Suitable font for the game
});
-closeSettingsBtn.interactive = true;
-closeSettingsBtn.buttonMode = true;
-settingsContainer.addChild(closeSettingsBtn);
-var closeSettingsBtnText = new Text2('Kapat', {
+healthText.anchor.set(0.5, 0.5);
+healthBarContainer.addChild(healthText);
+healthText.x = healthBarBackground.width / 2;
+healthText.y = healthBarBackground.height / 2;
+healthBarForeground.anchorX = 0;
+healthBarForeground.anchorY = 0;
+LK.gui.topLeft.addChild(healthBarContainer);
+healthBarContainer.x = 10; // Position health bar away from the left edge
+healthBarContainer.y = 10; // Position health bar away from the top edge
+// Create score text
+var scoreText = new Text2('Score: 0', {
size: 60,
- fill: 0x000000,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
+ fill: 0xFFFFFF,
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Suitable font for the game
});
-closeSettingsBtnText.anchor.set(0.5, 0.5);
-closeSettingsBtnText.x = 1024;
-closeSettingsBtnText.y = 1400;
-settingsContainer.addChild(closeSettingsBtnText);
-// Hide settings popup initially
-settingsContainer.visible = false;
-LK.gui.center.addChild(settingsContainer);
-// --- MENU LOGIC ---
-function showMainMenu() {
- mainMenuContainer.visible = true;
- settingsContainer.visible = false;
- // Pause game logic
- game.paused = true;
-}
-function hideMainMenu() {
- mainMenuContainer.visible = false;
- game.paused = false;
-}
-function showSettings() {
- mainMenuContainer.visible = false;
- settingsContainer.visible = true;
-}
-function hideSettings() {
- settingsContainer.visible = false;
- mainMenuContainer.visible = true;
-}
-// Button events
-startBtn.down = function (x, y, obj) {
- hideMainMenu();
-};
-settingsBtn.down = function (x, y, obj) {
- showSettings();
-};
-closeSettingsBtn.down = function (x, y, obj) {
- hideSettings();
-};
-// --- GAME INITIALIZATION (deferred until menu closed) ---
-var backgroundImage,
- player,
- enemies = [],
- spawnTimer = 0,
- level = 1,
- spawnInterval = 60,
- spawnDistance = 800,
- aimDirection = 0,
- score = 0;
-var healthBarContainer, healthBarBackground, healthBarForeground, healthText, scoreText, levelText;
-function startGame() {
- // Set the background image as the game background
- backgroundImage = LK.getAsset('backround', {
- anchorX: 0,
- anchorY: 0,
- x: 0,
- y: 0,
- width: 2048,
- height: 2732
- });
- game.addChildAt(backgroundImage, 0); // Add as the bottom-most layer
- // Always play the background music asset 'ss'
- LK.playMusic('ss', {
- volume: musicVolume
- });
- // Create player in center of screen
- player = new Player();
- player.x = 2048 / 2;
- player.y = 2732 / 2;
- game.addChild(player);
- // Spawn an initial enemy at the start of the game
- spawnEnemy();
- // Create graphical health bar
- healthBarContainer = new Container();
- healthBarBackground = LK.getAsset('healthBarBackground', {
- anchorX: 0,
- anchorY: 0
- });
- healthBarForeground = LK.getAsset('healthBarForeground', {
- anchorX: 0,
- anchorY: 0
- });
- healthBarContainer.addChild(healthBarBackground);
- healthBarContainer.addChild(healthBarForeground);
- // Add text to display remaining health
- healthText = new Text2('100', {
- size: 40,
- fill: 0xFFFFFF,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
- });
- healthText.anchor.set(0.5, 0.5);
- healthBarContainer.addChild(healthText);
- healthText.x = healthBarBackground.width / 2;
- healthText.y = healthBarBackground.height / 2;
- healthBarForeground.anchorX = 0;
- healthBarForeground.anchorY = 0;
- LK.gui.topLeft.addChild(healthBarContainer);
- healthBarContainer.x = 10;
- healthBarContainer.y = 10;
- // Create score text
- scoreText = new Text2('Score: 0', {
- size: 60,
- fill: 0xFFFFFF,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
- });
- scoreText.anchor.set(0.5, 0);
- LK.gui.top.addChild(scoreText);
- // Create level text
- levelText = new Text2('Level: ' + level, {
- size: 60,
- fill: 0xFFFFFF,
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
- });
- levelText.anchor.set(1, 0);
- LK.gui.topRight.addChild(levelText);
- levelText.x = -10;
-}
-// Only start game after menu is closed
-var gameStarted = false;
-var oldGameUpdate = game.update;
-game.update = function () {
- if (mainMenuContainer.visible) {
- // Pause game logic while menu is open
- return;
- }
- if (!gameStarted) {
- startGame();
- gameStarted = true;
- }
- if (typeof oldGameUpdate === "function") {
- oldGameUpdate();
- }
-};
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+// Create level text
+var levelText = new Text2('Level: ' + level, {
+ size: 60,
+ fill: 0xFFFFFF,
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Suitable font for the game
+});
+levelText.anchor.set(1, 0);
+LK.gui.topRight.addChild(levelText);
+levelText.x = -10; // Position level text away from the right edge
// Handle touch/click input for aiming and shooting
game.down = function (x, y, obj) {
- if (!player || mainMenuContainer.visible) return;
+ if (isMenuActive) return;
+ // Set target position for player to move towards and rotate head to this position
player.targetX = x;
player.targetY = y;
+ // Mark that the player is being controlled
player.isTouching = true;
};
game.move = function (x, y, obj) {
- if (!player || mainMenuContainer.visible) return;
+ if (isMenuActive) return;
+ // If the player is being touched/dragged, update the target position continuously
if (player.isTouching) {
player.targetX = x;
player.targetY = y;
}
};
game.up = function (x, y, obj) {
- if (!player || mainMenuContainer.visible) return;
+ if (isMenuActive) return;
+ // Stop continuous control when touch/click is released
player.isTouching = false;
};
-// Show menu at game start
-showMainMenu();
// Spawn enemy at random position around the player
function spawnEnemy() {
var enemy;
enemy = new Enemy();
@@ -509,21 +305,11 @@
enemy.y = Math.random() * 2732;
break;
}
// Calculate direction towards player
- var dx = 0,
- dy = 0,
- dist = 1;
- if (typeof player !== "undefined" && player && typeof player.x !== "undefined" && typeof player.y !== "undefined") {
- dx = player.x - enemy.x;
- dy = player.y - enemy.y;
- dist = Math.sqrt(dx * dx + dy * dy);
- } else {
- // Default direction if player is not defined
- dx = 0;
- dy = 1;
- dist = 1;
- }
+ var dx = player.x - enemy.x;
+ var dy = player.y - enemy.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
enemy.vx = dx / dist * (enemy.speed + level * 0.5);
enemy.vy = dy / dist * (enemy.speed + level * 0.5);
// Rotate enemy to face the player with its sharp edge
enemy.rotation = Math.atan2(dy, dx);
@@ -535,12 +321,11 @@
}
}
// Game update loop
game.update = function () {
+ if (isMenuActive) return;
// Update player
- if (player && typeof player.update === "function") {
- player.update();
- }
+ player.update();
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].update();
// Add animation to enemy
@@ -559,20 +344,14 @@
spawnEnemy();
spawnTimer = 0;
}
// Update score and level display
- if (typeof scoreText !== "undefined" && scoreText && typeof scoreText.setText === "function") {
- scoreText.setText('Score: ' + LK.getScore());
- }
- if (typeof levelText !== "undefined" && levelText && typeof levelText.setText === "function") {
- levelText.setText('Level: ' + level);
- }
+ scoreText.setText('Score: ' + LK.getScore());
+ levelText.setText('Level: ' + level);
// Increase level every 30 points
if (LK.getScore() >= level * 30) {
level++;
- if (typeof levelText !== "undefined" && levelText && typeof levelText.setText === "function") {
- levelText.setText('Level: ' + level);
- }
+ levelText.setText('Level: ' + level);
// Play level up sound
LK.getSound('levelUp').play();
}
};
\ No newline at end of file