+ 14
Game Dev Support
I have 2 issues with my code at the moment. 1. How can I make the button re-pressable. It only works once 2. How can I access enemies[i] and bullets[i] in the same function. In order for me to code collision I need to loop through BOTH arrays and program it with an index of [i]. I have tried nested loops but it doesn't work. In other words. How can I implement collision between the bullets and the enemy ships Those 2 issues are the ones I've saved till last because I have no idea what to do. Does anyone know how to do these? https://code.sololearn.com/WtAirtYvU5tg/?ref=app
17 ответов
+ 14
The buttons in the screen I can press multiple times to shoot out dots that are orange. Are you trying to move the shooter instead?
EDIT:
I got to go, but I can do the buttons tommorow. The buttons don't work at all yet, its just design.
EDIT:
Dang it. Someone beat me to it. Well, I hope you found what you needed. Good luck!
+ 7
The button doesn't work. It can't even be pressed once. You could just use <button> tags instead, and label them with arrows.
+ 4
Anton Böhler The buttons won't respond at all anymore unfortunately.
+ 3
part1:
let bullets = [];
let enemies = [];
class Bullet{
constructor(x, y, w, h, ySpeed){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.r = this.w/2;
this.ySpeed = ySpeed;
this.d;
}
show(){
fill("orange");
ellipse(this.x, this.y, this.w, this.h);
//console.log("hit")
}
move(){
this.y -= this.ySpeed;
}
}
class Ship{
constructor(x, y, w, h, xSpeed, ySpeed, col){
this.x = x
this.y = y;
this.w = w;
this.h = h;
this.xSpeed = 0;
this.ySpeed = 0;
this.maxXSpeed = xSpeed;
this.maxYSpeed = ySpeed;
this.r = this.w / 2;
}
show(){
fill("white");
rect(this.x, this.y, this.w, this.h);
}
move(){
this.x += this.xSpeed;
this.y += this.ySpeed;
}
}
class Enemy{
constructor(x, y, w, h){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
show(){
fill("red");
ellipse(this.x, this.y, this.w, this.h);
//console.log("test");
}
intersectsBullet(bullet){
return Math.sqrt(Math.pow(this.x - bullet.x, 2) + Math.pow(this.y - bullet.y, 2)) < this.w/2 + bullet.r;
}
}
function setup(){
createCanvas(335, 390);
rectMode(CENTER);
angleMode(DEGREES);
player = new Ship(width/2, 375, 10, 30, 5, 5, 0);
//buttonL = createButton("<").id("btnL");
//buttonL.touchStarted(left)
//buttonL.touchEnded(leftEnded);
//buttonR = createButton(">").id("btnR");
//buttonR.touchStarted(right);
//buttonR.touchEnded(rightEnded);
for (let j = 0; j < 5; j++){
enemies.push(new Enemy(j * 70, 30, 30, 30));
enemies[j].show();
}
}
+ 3
part2:
function left(){
//console.log("left");
player.xSpeed = -player.maxXSpeed;
}
function right(){
//console.log("right");
player.xSpeed = player.maxXSpeed;
}
function stop(){
//console.log("stop");
player.xSpeed = 0;
}
function mouseClicked(){
bullets.push(new Bullet(player.x, player.y, 10, 10, 4));
}
function bulletCollide(){
//console.log()
for(var i=enemies.length-1;i>=0;i--){
for(var j=bullets.length-1;j>=0;j--){
if(enemies[i].intersectsBullet(bullets[j])){
console.log(enemies.length)
enemies.splice(i, 1);
bullets.splice(j, 1);
}
}
}
}
function draw(){
background(0);
player.show();
player.move();
for (let i in bullets){
bullets[i].show();
bullets[i].move();
}
for(let i in enemies){
enemies[i].show();
}
bulletCollide();
/*
for (let j = 0; j < 5; j++){
enemies.push(new Enemy(j * 70, 30, 30, 30));
enemies[j].show();
}
*/
}
+ 3
html:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/p5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/addons/p5.dom.min.js"></script>
</head>
<body onCopy="return false" onpaste="return false" onselectstart="return false" onDrag="return false">
<button onmousedown="left()" onmouseup="stop()"
ontouchend="stop()"><</button>
<button onmousedown="right()" onmouseup="stop()"
ontouchend="stop()">></button>
</body>
</html>
+ 2
Coder It still isn't working. I had some saving issues so I might have missed something important. It has no response what so ever.
edit: Yes I found the error, I will replace the move() method
+ 2
Coder Sorry, this is confusing me. One moment it's there, the next moment it's not. The whole code is glitching out for me. Don't know if it's network or something
+ 2
Coder Well, I've done something. It kinda works.
+ 2
Coder I have successfully completed collision! 😂🎊 All that's left is the buttons. I'll pvt message you later as I now need to do something. Thank you and happy coding!
+ 2
Felix Cuevas About 3 maybe 4 hours