User prompt
Fix Bug: 'ReferenceError: projectiles is not defined' in this line: 'var index = projectiles.indexOf(self);' Line Number: 25
User prompt
Fix Bug: 'ReferenceError: projectiles is not defined' in this line: 'var index = projectiles.indexOf(self);' Line Number: 25
User prompt
Fix Bug: 'ReferenceError: projectiles is not defined' in this line: 'var index = projectiles.indexOf(self);' Line Number: 25
User prompt
If an projectile leaves the visible part of the scene, it must be destroyed (and removed from the array)
User prompt
If an projectile leaves the visible part of the scene, it must be destroyed (and removed from the array)
Code edit (1 edits merged)
Please save this source code
User prompt
introduce new var numberOfProjectiles that should, at any time, contain info of exact number of projectiles on the screen
Code edit (1 edits merged)
Please save this source code
User prompt
Please, check the code for the change of projectiles array. At any time, it should exactly macth number of projectiles on the screen.
Code edit (5 edits merged)
Please save this source code
User prompt
When new projectile is created (either by player's touch or after the target explodes), add it to the projectiles array. When projectile is destroyed, remove it from the array.
Code edit (1 edits merged)
Please save this source code
User prompt
Within the upper condition, if projectiles array is empty, check if touches left = 0. If that is fulfilled, game is over
User prompt
On each tick check if the projectiles array is empty.
User prompt
Create an array of projectiles. Whenever a projectile is created, it is added to the array. Whenever a projectile gets destroyed, it's removed from the array. When there are no projectiles on the screen, the array is empty.
User prompt
If player has no touches left, wait 2 seconds. After those two seconds, if there are still some targets on the screen, the game is over.
User prompt
In that state,, on each game tick, check the array of active projectiles (If a projectile goes off-screen or hits a target, it should be removed from the array) In that state, when the array of active projectiles is empty (indicating there are no more projectiles on the screen), and the player has no touches left, trigger the game over sequence.
User prompt
If the player has no touches left, enter a state where you check for active projectiles. Do not end the game immediately.
User prompt
When player touches for the first time, instruction text should become empty (do not destroy)
User prompt
If the player has no touches left, enter a state where you check for active projectiles. Do not end the game immediately. On each game tick, check the array of active projectiles (If a projectile goes off-screen or hits a target, it should be removed from the array) When the array of active projectiles is empty (indicating there are no more projectiles on the screen), and the player has no touches left, trigger the game over sequence.
User prompt
If player touches, but has no touches left, do not create any projectiles!
Code edit (17 edits merged)
Please save this source code
User prompt
Level up text is still not centered even though its coordinates are (2048 / 2, 2732 / 2) and the anchor is set to (0.5, 0.5) ! It is in the lower right corner. Flease, fix this.
User prompt
Hide (but do not destroy!) Targets left text. I think it clutters UI. Move Score text a but up, in the place of Targets left
User prompt
Declare a new variable called `points` within the 'Game' class to keep track of the player's score. Initialize this variable to 0 when the game starts. Create a Text2 object that will show the current score. Update this text object's content every time the `points` variable changes to reflect the new score.
var Particle = Container.expand(function () { var self = Container.call(this); var particleGraphics = self.createAsset('particle', 'Particle Graphics', .5, .5); self.speed = Math.random() * 5 + 2; self.direction = Math.random() * Math.PI * 2; self.alpha = 1; self.move = function () { self.x += Math.cos(self.direction) * self.speed; self.y += Math.sin(self.direction) * self.speed; self.alpha -= 0.02; if (self.alpha <= 0) self.destroy(); }; }); var Projectile = Container.expand(function () { var self = Container.call(this); var projectileGraphics = self.createAsset('projectile', 'Projectile Graphics', .5, .5); self.speed = 14; self.direction = ''; self.move = function () { if (self.direction === 'up') self.y -= self.speed; if (self.direction === 'down') self.y += self.speed; if (self.direction === 'left') self.x -= self.speed; if (self.direction === 'right') self.x += self.speed; }; }); var Target = Container.expand(function () { var self = Container.call(this); var targetGraphics = self.createAsset('target', 'Target Graphics', .5, .5); self.speed = 7; self.direction = Math.random() < 0.5 ? 'horizontal' : 'vertical'; self.move = function () { if (self.direction === 'horizontal') { self.x += self.speed; if (self.x > 2048) self.x = 0; if (self.x < 0) self.x = 2048; } else { self.y += self.speed; if (self.y > 2732) self.y = 0; if (self.y < 0) self.y = 2732; } }; }); var Game = Container.expand(function () { var self = Container.call(this); var instructionsText = new Text2('Tap anywhere to create explosions.\nDestroy \'em all!', { size: 70, fill: '#ffffff', align: 'center' }); instructionsText.anchor.set(0.5, 0.5); instructionsText.x = 2048 / 2 - 2048 / 7; instructionsText.y = 1000; LK.gui.addChild(instructionsText); self.level = 1; self.touchesLeft = 5; self.targetsLeft = 5; self.points = 0; var levelText = new Text2('Level: ' + self.level, { size: 70, fill: "#ffffff" }); levelText.anchor.set(0, 1); LK.gui.bottomLeft.addChild(levelText); var touchesLeftText = new Text2('Touches Left: ' + self.touchesLeft, { size: 70, fill: "#ffffff" }); touchesLeftText.anchor.set(0, 0); touchesLeftText.y = 50; touchesLeftText.x = 140; LK.gui.topCenter.addChild(touchesLeftText); var pointsText = new Text2('Score: ' + self.points, { size: 70, fill: "#ffffff" }); pointsText.anchor.set(0, 0); pointsText.x = 140; pointsText.y = 140; LK.gui.topCenter.addChild(pointsText); var targetsLeftText = new Text2('Targets Left: ' + self.targetsLeft, { size: 70, fill: "#ffffff" }); var enemyBullets = []; var projectiles = []; var enemies = []; var targets = []; var touchesLeft = 5; for (var i = 0; i < 5; i++) { var target = new Target(); target.x = Math.random() * (2048 - 100) + 50; target.y = Math.random() * (2732 - 100) + 50; targets.push(target); self.addChild(target); } var spawnEnemy = function () { var enemy = new Enemy(); enemy.x = Math.random() * 2048; enemy.y = 0; enemies.push(enemy); self.addChild(enemy); }; var fireEnemyBullet = function (enemy) { var bullet = new EnemyBullet(); bullet.x = enemy.x; bullet.y = enemy.y; enemyBullets.push(bullet); self.addChild(bullet); }; LK.on('tick', function () { if (self.touchesLeft === 0 && projectiles.length === 0) LK.showGameOver(); for (var i = 0; i < targets.length; i++) { targets[i].move(); } for (var i = 0; i < self.children.length; i++) { if (self.children[i] instanceof Projectile || self.children[i] instanceof Particle) { self.children[i].move(); for (var j = 0; j < targets.length; j++) { if (self.children[i] && targets[j] && self.children[i].intersects(targets[j])) { var directions = ['up', 'down', 'left', 'right']; for (var k = 0; k < 4; k++) { var newProjectile = new Projectile(); newProjectile.x = targets[j].x; newProjectile.y = targets[j].y; newProjectile.direction = directions[k]; projectiles.push(newProjectile); self.addChild(newProjectile); } var index = projectiles.indexOf(self.children[i]); if (index > -1) { projectiles.splice(index, 1); self.children[i].destroy(); console.log(projectiles.length); } targets[j].destroy(); self.targetsLeft--; self.points += 10; pointsText.setText('Score: ' + self.points); targets.splice(j, 1); targetsLeftText.setText('Targets Left: ' + self.targetsLeft); if (self.targetsLeft <= 0) { self.level++; for (var i = self.children.length - 1; i >= 0; i--) { if (self.children[i] instanceof Projectile) { self.children[i].destroy(); } } var levelUpText = new Text2('Level ' + self.level + '!', { size: 70, fill: '#ffffff', align: 'center' }); levelUpText.anchor.set(0.5, 0.5); levelUpText.x = 700; levelUpText.y = 1000; LK.gui.addChild(levelUpText); var blinkInterval = LK.setInterval(function () { levelUpText.visible = !levelUpText.visible; }, 150); LK.setTimeout(function () { LK.clearInterval(blinkInterval); levelUpText.destroy(); levelText.setText('Level: ' + self.level); }, 1500); LK.setTimeout(function () { for (var i = 0; i < 5 + self.level; i++) { var target = new Target(); target.x = Math.random() * 2048; target.y = Math.random() * 2732; targets.push(target); self.addChild(target); } self.targetsLeft = 5 + self.level; targetsLeftText.setText('Targets Left: ' + self.targetsLeft); self.touchesLeft += 1; touchesLeftText.setText('Touches Left: ' + self.touchesLeft); }, 2000); } } } } } }); stage.on('down', function (obj) { if (instructionsText) { instructionsText.setText(''); } if (self.touchesLeft > 0) { var pos = obj.event.getLocalPosition(self); var directions = ['up', 'down', 'left', 'right']; for (var i = 0; i < 4; i++) { var projectile = new Projectile(); projectile.x = pos.x; projectile.y = pos.y; projectile.direction = directions[i]; projectiles.push(projectile); projectile.on('destroy', function () { var index = projectiles.indexOf(projectile); if (index > -1) { projectiles.splice(index, 1); } }); self.addChild(projectile); projectiles.push(projectile); } self.touchesLeft--; touchesLeftText.setText('Touches Left: ' + self.touchesLeft); } }); });
===================================================================
--- original.js
+++ change.js
@@ -193,8 +193,14 @@
projectile.x = pos.x;
projectile.y = pos.y;
projectile.direction = directions[i];
projectiles.push(projectile);
+ projectile.on('destroy', function () {
+ var index = projectiles.indexOf(projectile);
+ if (index > -1) {
+ projectiles.splice(index, 1);
+ }
+ });
self.addChild(projectile);
projectiles.push(projectile);
}
self.touchesLeft--;
Simple flat icon, 200x200pixels, one bright color square with border. No shadows, top down view, transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Simple flat icon, 200x200pixels, one bright color circle with border. No shadows, top down view, transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Simple flat icon, 200x200pixels, one bright color diamond with border. No shadows, top down view, transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Simple flat icon, 200x200pixels, one bright color romb with border. No shadows, top down view, transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Simple flat icon, 200x200pixels, one bright color smiley with border. No shadows, top down view, transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
1024x1366 pixels, totally black no more than 20 very small, barely visible, stars here and there. Simple Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Single Game Texture, 50x50pix. In-Game asset. 2d. Blank background. High contrast. No shadows. Light green circle with border. Simple. No other objects. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.