Code edit (1 edits merged)
Please save this source code
User prompt
arregla el movimiento de star para que su movimiento sea más perfecto como ejemplo usa la luna, esta se mueve de manera circular al rededor de la recta que tiene otra trayectoria
Code edit (1 edits merged)
Please save this source code
User prompt
star no esta bien implementado en damage player logic
Code edit (1 edits merged)
Please save this source code
User prompt
haz que star haga circulos al rededor de su camino
User prompt
haz que star gire como saw
User prompt
Please fix the bug: 'Timeout.tick error: tween is not defined' in or related to this line: 'tween(self, {' Line Number: 154 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
haz que star rote ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
haz que star rote y se desplace en circulos
User prompt
agrega star a todo el codigo de enemigos
User prompt
agrega un nuevo enemigo llamado "star" con la logica de arrow para su nivel correspondido
User prompt
remplaza ninja level por star
User prompt
elimina ninja y new ninja y todo lo relacionado a ello en el codigo
User prompt
corrige lo siguiente: - Aunque ninja es destruido antes de aparecer, los new ninjas aparecen igual. - Aunque new ninjas se eliminen player aun se hace daño si se acerca a la ubicación donde estos estaban por ultima vez
User prompt
player se daña con newNinja aunque estos se destruyan
Code edit (1 edits merged)
Please save this source code
User prompt
agrega newNinjas a allenemies y a todo lo relacionado
User prompt
agrega newNinjas a allenemies
User prompt
agrega a newninjas a una lista y agregalo al sistema de destucción
User prompt
Please fix the bug: 'ReferenceError: NewNinjas is not defined' in or related to this line: 'var allEnemies = enemyArrows.concat(enemySaw, enemyNinjas, NewNinjas);' Line Number: 256
Code edit (1 edits merged)
Please save this source code
User prompt
parece que los enemigos eliminados no se sacan de la lista
Code edit (3 edits merged)
Please save this source code
User prompt
new ninja sigue dañando aunque se destruya
/**** * Plugins ****/ var facekit = LK.import("@upit/facekit.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Background = Container.expand(function () { var self = Container.call(this); var backgroundGraphics = self.attachAsset('Background', { anchorX: 0.5, anchorY: 0.5 }); self.x = 2048 / 2; // Set the x position to the center of the screen self.y = 2732 / 2; // Set the y position to the center of the screen }); var Button = Container.expand(function (text, x, y, callback) { var self = Container.call(this); var buttonAsset = self.attachAsset('Buttom', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); buttonAsset.x = x; buttonAsset.y = y; var buttonText = new Text2(text, { size: 100, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" }); buttonText.anchor.set(0.5, 0.5); buttonText.x = x; buttonText.y = y; self.addChild(buttonText); buttonAsset.down = callback; }); var EnemyArrow = Container.expand(function () { var self = Container.call(this); var bEnemyArrowGraphics = self.attachAsset('EnemyArrow', { anchorX: 0.5, anchorY: 0.5 }); enemyLogic(self); var targetX = player.x; var targetY = player.y; self.update = function () { if (!gamestart) { return; } var dx = targetX - self.x; var dy = targetY - self.y; var angle = Math.atan2(dy, dx); self.x += Math.cos(angle) * 8.5; self.y += Math.sin(angle) * 8.5; self.rotation = angle; if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) { targetX += Math.cos(angle) * 1000; targetY += Math.sin(angle) * 1000; } if (self.x < 0 || self.x > 3000 || self.y < 0 || self.y > 3000) { self.destroy(); } }; }); var EnemySaw = Container.expand(function () { var self = Container.call(this); var bEnemySawGraphics = self.attachAsset('EnemySaw', { anchorX: 0.5, anchorY: 0.5 }); enemyLogic(self); var targetX = player.x; var targetY = player.y; self.update = function () { if (!gamestart) { return; } var dx = targetX - self.x; var dy = targetY - self.y; var angle = Math.atan2(dy, dx); if (!self.stopSaw && !self.hasStopped && Math.sqrt(dx * dx + dy * dy) < 100) { self.stopSaw = true; self.hasStopped = true; LK.setTimeout(function () { self.stopSaw = false; targetX = player.x; targetY = player.y; }, 2000); } if (!self.stopSaw) { var speedMultiplier = self.hasStopped ? 1.5 : 1; self.x += Math.cos(angle) * 7.5 * speedMultiplier; self.y += Math.sin(angle) * 7.5 * speedMultiplier; } self.rotation += 0.03; if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) { targetX += Math.cos(angle) * 1000; targetY += Math.sin(angle) * 1000; } // Check if the EnemySaw has moved to the opposite side of its spawn point if (self.x < 0 || self.x > 3000 || self.y < 0 || self.y > 3000) { self.destroy(); } }; }); var EnemyStar = Container.expand(function () { var self = Container.call(this); var bEnemyStarGraphics = self.attachAsset('EnemyStar', { anchorX: 0.5, anchorY: 0.5 }); enemyLogic(self); var targetX = player.x; var targetY = player.y; self.update = function () { if (!gamestart) { return; } var dx = targetX - self.x; var dy = targetY - self.y; var angle = Math.atan2(dy, dx); var radius = 10; // Radius of the circular path var speed = 0.1; // Speed of the circular movement self.x += Math.cos(angle) * 8.5 + Math.cos(self.rotation) * radius * speed; self.y += Math.sin(angle) * 8.5 + Math.sin(self.rotation) * radius * speed; self.rotation += 0.03; // Add rotation logic similar to EnemySaw if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) { targetX += Math.cos(angle) * 1000; targetY += Math.sin(angle) * 1000; } if (self.x < 0 || self.x > 3000 || self.y < 0 || self.y > 3000) { self.destroy(); } }; }); var Energy = Container.expand(function () { var self = Container.call(this); var energyGraphics = self.attachAsset('Energy', { anchorX: 0.5, anchorY: 0.5 }); self.value = 100; // Initial energy value self.decrease = function (amount) { self.value = Math.max(0, self.value - amount); }; self.increase = function (amount) { self.value = Math.min(100, self.value + amount); }; }); var Life = Container.expand(function () { var self = Container.call(this); var lifeGraphics = self.attachAsset('Life', { anchorX: 0.5, anchorY: 0.5 }); self.value = 100; // Initial life value self.decrease = function (amount) { self.value = Math.max(0, self.value - amount); if (self.value === 0) { lifeQuantity = Math.max(0, lifeQuantity - 1); updateLifeIcons(); if (lifeQuantity === 0) { self.destroy(); LK.showGameOver(); } } }; self.increase = function (amount) { self.value = Math.min(100, self.value + amount); }; }); var Player = Container.expand(function () { var self = Container.call(this); var faceGraphics = self.attachAsset('faceObject', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { if (!gamestart) { return; } var smoothing = 0.05; var targetX = facekit.noseTip.x; var targetY = facekit.noseTip.y; var leftBound = (2048 - 1000) / 2; var rightBound = leftBound + 1000; var topBound = (2732 - 1000) / 2; var bottomBound = topBound + 1000; targetX = Math.max(leftBound, Math.min(rightBound, targetX)); targetY = Math.max(topBound, Math.min(bottomBound, targetY)); self.x += (targetX - self.x) * smoothing; self.y += (targetY - self.y) * smoothing; var allEnemies = enemyArrows.concat(enemySaw, enemyStars); for (var i = 0; i < allEnemies.length; i++) { if (self.intersects(allEnemies[i]) && !allEnemies[i].destroyed) { lifeQuantity = Math.max(0, lifeQuantity - 1); updateLifeIcons(); allEnemies[i].destroy(); if (enemyArrows.includes(allEnemies[i])) { enemyArrows.splice(enemyArrows.indexOf(allEnemies[i]), 1); } else if (enemySaw.includes(allEnemies[i])) { enemySaw.splice(enemySaw.indexOf(allEnemies[i]), 1); } else if (enemyStars.includes(allEnemies[i])) { enemyStars.splice(enemyStars.indexOf(allEnemies[i]), 1); } if (lifeQuantity === 0) { self.destroy(); gamestart = false; LK.showGameOver(); } break; } } }; }); var RangedLimiter = Container.expand(function () { var self = Container.call(this); var limiterGraphics = self.attachAsset('RangedLimiter', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 }); }); var TextElement = Container.expand(function (text, size, color, font, x, y) { var self = Container.call(this); var textElement = new Text2(text, { size: size, fill: color, font: font }); textElement.anchor.set(0.5, 0.5); textElement.x = x; textElement.y = y; self.addChild(textElement); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ function showSelectLevelPage() { // Create a new container for the select level page var selectLevelContainer = new Container(); // Add a background to the select level page var selectLevelBackground = LK.getAsset('BackgroundMenu', { anchorX: 0.5, anchorY: 0.5 }); selectLevelBackground.x = 2048 / 2; selectLevelBackground.y = 2732 / 2; selectLevelContainer.addChild(selectLevelBackground); // Add a title to the select level page var selectLevelTitle = new TextElement('Select Level', 150, 0xFFFFFF, "'Press Start 2P', cursive", 2048 / 2, 500); selectLevelContainer.addChild(selectLevelTitle); // Add a back button to return to the main menu var backButton = new Button('Back', 2048 / 2, 2300, function (x, y, obj) { selectLevelContainer.visible = false; // Hide the select level page menuContainer.visible = true; // Show the main menu }); selectLevelContainer.addChild(backButton); // Add level selectors var levelNames = ['endless', 'arrow', 'saw', 'star']; // Removed 'ninja' level and kept 'star' var levelSelectors = []; // Array to store level selectors for (var i = 0; i < levelNames.length; i++) { var levelSelector = LK.getAsset('level', { anchorX: 0.5, anchorY: 0.5 }); levelSelector.x = 2048 / 2 - 600 + i * 600; // Position each level selector in a row levelSelector.y = 1500; // Align vertically levelSelector.levelType = levelNames[i]; levelSelector.down = function (index) { // Create a closure to capture the current index return function (x, y, obj) { gamestart = true; // Start the game selectLevelContainer.visible = false; // Hide the select level page levelID = index; // Update levelID based on the order of the level selector console.log("Starting level:", obj.levelType); // Log the selected level type // Additional logic to initialize the selected level can be added here }; }(i); // Pass the current index to the closure selectLevelContainer.addChild(levelSelector); // Add level text below each level selector var levelText = new Text2(levelNames[i], { size: 80, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" }); levelText.anchor.set(0.5, 0.5); levelText.x = levelSelector.x; levelText.y = levelSelector.y + 300; // Position text below the selector selectLevelContainer.addChild(levelText); levelSelector.levelText = levelText; // Store levelText in levelSelector levelSelectors.push(levelSelector); // Add to array } // Add scrolling functionality selectLevelContainer.down = function (x, y, obj) { var startX = x; var initialPositions = levelSelectors.map(function (selector) { return selector.x; }); selectLevelContainer.move = function (moveX, moveY, moveObj) { var deltaX = moveX - startX; for (var i = 0; i < levelSelectors.length; i++) { levelSelectors[i].x = initialPositions[i] + deltaX; levelSelectors[i].levelText.x = levelSelectors[i].x; // Move the text along with the selector } }; selectLevelContainer.up = function (upX, upY, upObj) { selectLevelContainer.move = null; selectLevelContainer.up = null; }; }; game.addChild(selectLevelContainer); } var levelID = 0; var lifeQuantity = 3; var energyQuantity = 100; var gamestart = false; function enemyLogic(entity) { var spawnPositions = [{ x: Math.random() * 2000, y: 0 }, { x: Math.random() * 2000, y: 3000 }, { x: 0, y: Math.random() * 2000 }, { x: 3000, y: Math.random() * 2000 }]; var position = spawnPositions[Math.floor(Math.random() * spawnPositions.length)]; entity.x = position.x; entity.y = position.y; entity.spawnTime = entity.spawnTime || Math.random() * 2000 + 2000; } var background = game.addChild(new Background()); var timerTxt = new Text2('0', { size: 100, fill: 0xFFFFFF }); timerTxt.anchor.set(0.5, 0); LK.gui.top.addChild(timerTxt); var elapsedTime = 0; var timerInterval = LK.setInterval(function () { if (!gamestart) { return; } // Ensure timer only updates when gamestart is true elapsedTime++; var minutes = Math.floor(elapsedTime / 60); // Calculate minutes var seconds = elapsedTime % 60; // Calculate remaining seconds var timeString = minutes > 0 ? minutes + "m " + seconds + "s" : seconds + "s"; // Format time string timerTxt.setText(timeString); }, 1000); var player = game.addChild(new Player()); player.x = 2048 / 2; // Center the player on the x-axis player.y = 2732 / 2; // Center the player on the y-axis game.up = function (x, y, obj) { player.scaleX = 1; player.scaleY = 1; }; game.down = function (x, y, obj) { player.scaleX = 0.5; player.scaleY = 0.5; }; // Create a list to store EnemyArrow instances var enemyArrows = []; // Create a timer that creates a new EnemyArrow every random interval between 1 and 2 seconds function spawnEnemy(type, interval, levelCheck, enemyArray, enemyClass) { return LK.setInterval(function () { if (!gamestart || !levelCheck()) { return; } var newEnemy = game.addChild(new enemyClass()); enemyArray.push(newEnemy); LK.setTimeout(function () { if (enemyArray.includes(newEnemy)) { newEnemy.destroy(); enemyArray.splice(enemyArray.indexOf(newEnemy), 1); } }, 20000); }, interval); } var enemySaw = []; var enemyStars = []; // New array to store EnemyStar instances var enemyArrowInterval = spawnEnemy('arrow', Math.random() * 380 + 1000, function () { return levelID === 0 || levelID === 1; }, enemyArrows, EnemyArrow); var enemySawInterval = spawnEnemy('saw', 2000, function () { return levelID === 0 || levelID === 2; }, enemySaw, EnemySaw); var enemyStarInterval = spawnEnemy('star', 1500, function () { // New interval for EnemyStar return levelID === 0 || levelID === 3; // Check for 'star' level }, enemyStars, EnemyStar); var lifeIcons = []; for (var i = 0; i < lifeQuantity; i++) { var lifeIcon = game.addChild(new Life()); lifeIcon.x = 2048 / 2 - 600 + i * 160; // Position each life icon to the right of the previous one lifeIcon.y = 100; // Align vertically with the timer lifeIcons.push(lifeIcon); } // Function to update life icons when life decreases function updateLifeIcons() { for (var i = 0; i < lifeIcons.length; i++) { if (i < lifeQuantity) { lifeIcons[i].visible = true; } else { lifeIcons[i].visible = false; } } } var energy = game.addChild(new Energy()); energy.x = 2048 / 2 + 600; // Position energy to the right of the timer energy.y = 100; // Align vertically with the timer var energyText = new Text2(energyQuantity + '%', { size: 80, fill: 0xFFFFFF }); energyText.anchor.set(1, 0.5); // Anchor to the right center energyText.x = energy.x - 100; // Position to the left of energy energyText.y = energy.y; game.addChild(energyText); var rangerlimited = game.addChild(new RangedLimiter()); rangerlimited.x = 2048 / 2; // Center the RangedLimiter on the x-axis rangerlimited.y = 2732 / 2; // Center the RangedLimiter on the y-axis // Create an initial menu var menuContainer = new Container(); /* * Menu inicial */ var menuBackground = LK.getAsset('BackgroundMenu', { anchorX: 0.5, anchorY: 0.5 }); menuBackground.x = 2048 / 2; menuBackground.y = 2732 / 2; menuContainer.addChild(menuBackground); // Add a title to the menu var title = new TextElement('Game Title', 150, 0xFFFFFF, "'Press Start 2P', cursive", 2048 / 2, 500); menuContainer.addChild(title); // Create buttons var startButton = new Button('Game Start', 2048 / 2, 1000, function (x, y, obj) { menuContainer.visible = false; // Hide the menu showSelectLevelPage(); // Redirect to 'select level' page }); menuContainer.addChild(startButton); var recordButton = new Button('Record', 2048 / 2, 1300, function (x, y, obj) { var tempMessage = new Text2('Option not yet implemented due to engine errors', { size: 40, fill: 0xFF0000, font: "'Press Start 2P', cursive" }); tempMessage.anchor.set(0.5, 0.5); tempMessage.x = 2048 / 2; tempMessage.y = 2732 - 300; // Position at the bottom of the screen game.addChild(tempMessage); LK.setTimeout(function () { game.removeChild(tempMessage); }, 3000); }); menuContainer.addChild(recordButton); var howToPlayButton = new Button('How to Play', 2048 / 2, 1600, function (x, y, obj) { // Add logic for how to play button }); menuContainer.addChild(howToPlayButton); var creditsButton = new Button('Credits', 2048 / 2, 1900, function (x, y, obj) { showCreditsPage(); }); menuContainer.addChild(creditsButton); function showCreditsPage() { // Create a new container for the credits page var creditsContainer = new Container(); // Add the credits background var creditsBackground = LK.getAsset('Credits', { anchorX: 0.5, anchorY: 0.5 }); creditsBackground.x = 2048 / 2; creditsBackground.y = 2732 / 2; creditsContainer.addChild(creditsBackground); // Add event listener to hide credits page on touch creditsBackground.down = function (x, y, obj) { creditsContainer.visible = false; // Hide the credits page menuContainer.visible = true; // Show the main menu }; // Add the credits page to the game game.addChild(creditsContainer); } game.addChild(menuContainer); ; // Function to display the records page function showRecordsPage() { // Create a new container for the records page var recordsContainer = new Container(); // Add a black background to the records page var recordsBackground = LK.getAsset('BackgroundMenu', { anchorX: 0.5, anchorY: 0.5 }); recordsBackground.x = 2048 / 2; recordsBackground.y = 2732 / 2; recordsContainer.addChild(recordsBackground); // Add a title to the records page var recordsTitle = new TextElement('Records', 150, 0xFFFFFF, "'Press Start 2P', cursive", 2048 / 2, 500); recordsContainer.addChild(recordsTitle); var backButtonAsset = LK.getAsset('Buttom', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); backButtonAsset.x = 2048 / 2; backButtonAsset.y = 2300; recordsContainer.addChild(backButtonAsset); var backButton = new Text2('Back', { size: 100, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" }); backButton.anchor.set(0.5, 0.5); backButton.x = 2048 / 2; backButton.y = 2400; recordsContainer.addChild(backButton); // Add event listener to 'Back' button backButtonAsset.down = function (x, y, obj) { recordsContainer.visible = false; // Hide the records page menuContainer.visible = true; // Show the main menu }; // Add the records page to the game game.addChild(recordsContainer); }
===================================================================
--- original.js
+++ change.js
@@ -120,10 +120,10 @@
}
var dx = targetX - self.x;
var dy = targetY - self.y;
var angle = Math.atan2(dy, dx);
- var radius = 100; // Radius of the circular path
- var speed = 0.05; // Speed of the circular movement
+ var radius = 10; // Radius of the circular path
+ var speed = 0.1; // Speed of the circular movement
self.x += Math.cos(angle) * 8.5 + Math.cos(self.rotation) * radius * speed;
self.y += Math.sin(angle) * 8.5 + Math.sin(self.rotation) * radius * speed;
self.rotation += 0.03; // Add rotation logic similar to EnemySaw
if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) {