Code edit (1 edits merged)
Please save this source code
User prompt
use spatial partitioning withing the game class to prevent enemies from colliding/overlapping
User prompt
enemies should not colide
User prompt
prevent enemies from colliding using spatial partitioning
User prompt
Fix Bug: 'ReferenceError: spatialPartition is not defined' in this line: 'var nearbyEnemies = spatialPartition.getNearbyEnemies(this);' Line Number: 48
User prompt
Fix Bug: 'ReferenceError: spatialPartition is not defined' in this line: 'var nearbyEnemies = spatialPartition.getNearbyEnemies(this);' Line Number: 48
User prompt
Fix Bug: 'ReferenceError: spatialPartition is not defined' in this line: 'var nearbyEnemies = spatialPartition.getNearbyEnemies(this);' Line Number: 48
User prompt
create spatial partitioning within the game class to prevent enemies from overlapping
User prompt
add spatial partitioning to prevent enemies from colliding with each other
User prompt
hero bullet will be destroyed if it collides with an enemy
User prompt
hero bullets in lk should move upwards
Code edit (1 edits merged)
Please save this source code
User prompt
add auto shoot for hero bullets
User prompt
set up event listener for mouse movement. hero should follow mouse movement
User prompt
hero bullets should shoot automatically
User prompt
shoot bullets from hero
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'push')' in this line: 'heroBullets.push(bullet);' Line Number: 9
User prompt
Fix Bug: 'ReferenceError: heroBullets is not defined' in this line: 'heroBullets.push(bullet);' Line Number: 9
User prompt
hero should shoot hero bullets upwards
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading '0')' in this line: 'if (!grid[gridX][gridY]) grid[gridX][gridY] = [];' Line Number: 174
User prompt
add herobullet.move to the begining of the lk.ono
User prompt
fix code
User prompt
make sure hero bullets condition of moving forward is defined withing the game class
User prompt
fix the issue that hero bullets are not moving correctly because the `move` method in the `HeroBullet` class contains conflicting movement logic and relies on an undefined `speed` property.
User prompt
add movement to hero bullets in the game
var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.createAsset('hero', 'Hero character', .5, .5); self.move = function () {}; self.shoot = function () { var bullet = new HeroBullet(); bullet.x = this.x; bullet.y = this.y; heroBullets.push(bullet); self.addChild(bullet); }; }); var EnemyWave1 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 10; var enemyGraphics = self.createAsset('enemyWave1', 'Enemy Wave 1 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var EnemyWave2 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 3; var enemyGraphics = self.createAsset('enemyWave2', 'Enemy Wave 2 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var EnemyWave3 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 4; var enemyGraphics = self.createAsset('enemyWave3', 'Enemy Wave 3 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var EnemyWave4 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 20; var enemyGraphics = self.createAsset('enemyWave4', 'Enemy Wave 4 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var EnemyWave5 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 1; var enemyGraphics = self.createAsset('enemyWave5', 'Enemy Wave 5 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('heroBullet', 'Hero Bullet', .5, .5); self.move = function () { this.y -= 5; }; }); var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('enemyBullet', 'Enemy Bullet', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var Game = Container.expand(function () { var self = Container.call(this); self.getEnemyCountForWave = function (waveIndex) { switch (waveIndex % 5) { case 0: return 10; case 1: return 3; case 2: return 4; case 3: return 20; case 4: return 1; } }; var hero = self.addChild(new Hero()); var enemies = []; var waveIndex = 0; var maxWaveCount = 5; var waveTimer = 500; var waveInterval = 500; var heroBullets = []; var enemyBullets = []; hero.x = 2048 / 2; hero.y = 2732 / 2; LK.on('tick', function () { hero.move(); if (waveIndex < maxWaveCount) { waveTimer++; } if (waveTimer >= waveInterval && waveIndex < maxWaveCount) { for (var i = 0; i < self.getEnemyCountForWave(waveIndex); i++) { var newEnemy; var enemyCount = self.getEnemyCountForWave(waveIndex); switch (waveIndex % 5) { case 0: newEnemy = new EnemyWave1(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 0; break; case 1: newEnemy = new EnemyWave2(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 2732; break; case 2: newEnemy = new EnemyWave3(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = Math.random() * 2732; break; case 3: newEnemy = new EnemyWave4(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = Math.random() * 2732; break; case 4: newEnemy = new EnemyWave5(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = Math.random() * 2732; break; } enemies.push(newEnemy); self.addChild(newEnemy); } waveIndex++; waveTimer = 0; } for (var i = 0; i < enemies.length; i++) { enemies[i].move(hero.x, hero.y); } for (var i = 0; i < heroBullets.length; i++) { heroBullets[i].move(); if (heroBullets[i].y < 0) { heroBullets[i].destroy(); heroBullets.splice(i, 1); } } for (var i = 0; i < enemyBullets.length; i++) { enemyBullets[i].move(); } }); stage.on('down', function (obj) { var pos = obj.event.getLocalPosition(self); hero.x = pos.x; hero.y = pos.y; hero.shoot(); }); });
===================================================================
--- original.js
+++ change.js
@@ -4,10 +4,11 @@
self.move = function () {};
self.shoot = function () {
var bullet = new HeroBullet();
bullet.x = this.x;
- bullet.y = this.y - this.height / 2;
- this.parent.addChild(bullet);
+ bullet.y = this.y;
+ heroBullets.push(bullet);
+ self.addChild(bullet);
};
});
var EnemyWave1 = Container.expand(function (enemyCount) {
var self = Container.call(this);
@@ -72,12 +73,9 @@
var HeroBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.createAsset('heroBullet', 'Hero Bullet', .5, .5);
self.move = function () {
- this.y -= 10;
- if (this.y < -this.height) {
- this.destroy();
- }
+ this.y -= 5;
};
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
@@ -116,11 +114,8 @@
var enemyBullets = [];
hero.x = 2048 / 2;
hero.y = 2732 / 2;
LK.on('tick', function () {
- for (var i = 0; i < heroBullets.length; i++) {
- heroBullets[i].move();
- }
hero.move();
if (waveIndex < maxWaveCount) {
waveTimer++;
}
@@ -160,50 +155,15 @@
}
waveIndex++;
waveTimer = 0;
}
- var grid = [];
- for (var i = 0; i < 10; i++) {
- grid[i] = [];
- for (var j = 0; j < 14; j++) {
- grid[i][j] = [];
- }
- }
for (var i = 0; i < enemies.length; i++) {
- var gridX = Math.floor(enemies[i].x / 204.8);
- var gridY = Math.floor(enemies[i].y / 195.14);
- if (!grid[gridX]) grid[gridX] = [];
- if (!grid[gridX][gridY]) grid[gridX][gridY] = [];
- grid[gridX][gridY].push(enemies[i]);
- }
- for (var i = 0; i < 10; i++) {
- for (var j = 0; j < 14; j++) {
- for (var k = 0; k < grid[i][j].length; k++) {
- for (var l = k + 1; l < grid[i][j].length; l++) {
- if (grid[i][j][k].intersects(grid[i][j][l])) {
- var dx = grid[i][j][l].x - grid[i][j][k].x;
- var dy = grid[i][j][l].y - grid[i][j][k].y;
- var distance = Math.sqrt(dx * dx + dy * dy);
- if (distance < grid[i][j][k].width / 2 + grid[i][j][l].width / 2) {
- var overlap = grid[i][j][k].width / 2 + grid[i][j][l].width / 2 - distance;
- dx /= distance;
- dy /= distance;
- grid[i][j][k].x -= overlap / 2 * dx;
- grid[i][j][k].y -= overlap / 2 * dy;
- grid[i][j][l].x += overlap / 2 * dx;
- grid[i][j][l].y += overlap / 2 * dy;
- }
- }
- }
- }
- }
- }
- for (var i = 0; i < enemies.length; i++) {
enemies[i].move(hero.x, hero.y);
}
- for (var i = heroBullets.length - 1; i >= 0; i--) {
+ for (var i = 0; i < heroBullets.length; i++) {
heroBullets[i].move();
- if (heroBullets[i].isDestroyed) {
+ if (heroBullets[i].y < 0) {
+ heroBullets[i].destroy();
heroBullets.splice(i, 1);
}
}
for (var i = 0; i < enemyBullets.length; i++) {