User prompt
add goalie movement on tik
User prompt
make goalie move
User prompt
goalie should move towards hero withing its current limits
User prompt
goalie should only move inside the goal
User prompt
goalie should move towards herobullet
User prompt
hero shoot should go towards goal
User prompt
goalie should move towards the hero but stay in the limits of the goal
User prompt
create goalie asset. goalie asset will be created inside goal asset
Code edit (1 edits merged)
Please save this source code
User prompt
increse goal asset size to 600 pixels by 300 pixels
User prompt
show goal asset o the top of the screen
User prompt
initialize goal asset ono game start
User prompt
create goal asset. it should be on the top center of the screen. it will be 800 pixels by 200 pixels
Code edit (8 edits merged)
Please save this source code
User prompt
improve game perfomance
Code edit (1 edits merged)
Please save this source code
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
var SpatialGrid = Container.expand(function (cellSize) { var self = Container.call(this); self.cellSize = cellSize; self.grid = {}; self._cellKey = function (x, y) { var cellX = Math.floor(x / self.cellSize); var cellY = Math.floor(y / self.cellSize); return cellX + ':' + cellY; }; self.insert = function (object) { var key = self._cellKey(object.x, object.y); if (!self.grid[key]) { self.grid[key] = []; } self.grid[key].push(object); }; self.retrieve = function (x, y) { var key = self._cellKey(x, y); return self.grid[key] || []; }; self.clear = function () { self.grid = {}; }; }); 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 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 -= 10; }; }); 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; var bulletTimer = 0; var bulletInterval = 100; LK.on('tick', function () { hero.move(); bulletTimer++; if (bulletTimer >= bulletInterval) { var newBullet = new HeroBullet(); newBullet.x = hero.x; newBullet.y = hero.y; heroBullets.push(newBullet); self.addChild(newBullet); bulletTimer = 0; } 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; } var spatialGrid = new SpatialGrid(100); for (var i = 0; i < enemies.length; i++) { spatialGrid.insert(enemies[i]); } for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var nearbyEnemies = spatialGrid.retrieve(enemy.x, enemy.y); var moveX = hero.x - enemy.x; var moveY = hero.y - enemy.y; var moveMagnitude = Math.sqrt(moveX * moveX + moveY * moveY); enemy.x += moveX / moveMagnitude; enemy.y += moveY / moveMagnitude; for (var j = 0; j < nearbyEnemies.length; j++) { var otherEnemy = nearbyEnemies[j]; if (otherEnemy !== enemy && enemy.intersects(otherEnemy)) { var overlapX = enemy.x - otherEnemy.x; var overlapY = enemy.y - otherEnemy.y; var overlapMagnitude = Math.sqrt(overlapX * overlapX + overlapY * overlapY); if (overlapMagnitude < 10) { enemy.x += overlapX / overlapMagnitude; enemy.y += overlapY / overlapMagnitude; } } } } spatialGrid.clear(); for (var i = 0; i < heroBullets.length; i++) { heroBullets[i].move(); for (var j = 0; j < enemies.length; j++) { if (heroBullets[i].intersects(enemies[j])) { heroBullets[i].destroy(); heroBullets.splice(i, 1); break; } } } for (var i = 0; i < enemyBullets.length; i++) { enemyBullets[i].move(); } }); stage.on('move', function (obj) { var pos = obj.event.getLocalPosition(self); hero.x = pos.x; hero.y = pos.y; }); });
===================================================================
--- original.js
+++ change.js
@@ -202,9 +202,9 @@
if (otherEnemy !== enemy && enemy.intersects(otherEnemy)) {
var overlapX = enemy.x - otherEnemy.x;
var overlapY = enemy.y - otherEnemy.y;
var overlapMagnitude = Math.sqrt(overlapX * overlapX + overlapY * overlapY);
- if (overlapMagnitude < 80) {
+ if (overlapMagnitude < 10) {
enemy.x += overlapX / overlapMagnitude;
enemy.y += overlapY / overlapMagnitude;
}
}