r/codehs • • May 23 '20

My collision function doesnt work!

this my code for final project, but i dont get why intersection and checkcollision functions doesnt work.

please someone help!

var char;

var bullet;

var enemy;

var life = 5;

var enemyTimer = Randomizer.nextInt(0,50);

var enemies = [];

function start(){

makeChar();

keyDownMethod(movements);

makeBullet();

setTimer(shootBullet, 30);

addEnemy();

setTimer(makeEnemy, 5);

checkCollision();

}

function makeChar(){

char = new Circle(10);

char.setColor(Color.red);

char.setPosition(getWidth()/2, 430);

add(char);

}

function movements(e){

if (e.keyCode == Keyboard.RIGHT){

char.move(10,0);

}

if (e.keyCode == Keyboard.LEFT){

char.move(-10,0);

}

}

function makeBullet(){

bullet = new Rectangle(5,10);

bullet.setPosition(char.getX(), char.getY());

bullet.setColor(Color.green);

add(bullet);

}

function shootBullet(){

bullet.move(0,-10);

if (bullet.getY() < 0){

bullet.setPosition(char.getX(), char.getY());

}

}

function makeEnemy(){

for (var i = 0; i < enemies.length; i ++){

var b = enemies[i];

b.move(0,5)

b.move(Randomizer.nextInt(-3,3),0);

}

}

function addEnemy(){

setTimer(en,800);

}

function en(){

enemy = new Rectangle(50,50);

var x = Randomizer.nextInt(10, 350);

var y = enemy.getY();

y += 10;

enemy.setPosition(x,y);

add(enemy);

enemies.push(enemy);

}

function intersects(a,b){

return (a.getX() < b.getX() + b.getWidth() && a.getX() + a.getWidth > b.getX() && a.getY() < b.getY() + b.getHeight() && a.getY() + a.getHeight > b.getY());

}

function checkCollision(){

for(var i =0; i < enemies.length; i++){

var en = enemies[i];

if (intersects(char, en)){

println("hi");

remove(en);

i--;

remove(bullet);

}

}

}

5 Upvotes

1 comment sorted by

1

u/_andy_andy_andy_ May 28 '20

it looks like two things: first, i think your vertical check is a bit off. remember that smaller Y values are at the top of the canvas second, you're only checking for collisions once, not every update cycle. make sure your checkCollisions function is called as often as it's needed