Ich habe ein Space Invaders-Spiel, an dem ich gerade arbeite. Sehr einfach und einfach. Bisher habe ich einen Shooter, der sich bewegt (links und rechts) und schießt. Ich habe auch einen Eindringling, der sich in einem Muster bewegt. Ich möchte, dass die Kugeln den Eindringling verschwinden lassen.Kollisionserkennung bei Verarbeitung
Also meine Frage ist, wie bekomme ich Kollisionserkennung zu arbeiten (nicht Farbkollision)? Wenn mir jemand zeigen kann, wie es gemacht wird, werde ich dankbar sein.
Hinweis: Ich wurde in der Vergangenheit dazu aufgefordert, zu viel Code einzugeben, daher hoffe ich, dass nur die Bullet- und Invader-Klasse der richtige Weg ist.
ArrayList <Bullet> bullets;
class Bullet
{
float x;
float y;
float speed;
Bullet(float tx, float ty)
{
x = tx;
y = ty;
}
void display()
{
stroke(255, 0, 0);
fill(255);
ellipse(x,y, 10, 10);
}
void move()
{
y -= 5;
}
}
void moveAll()
{
for(Bullet temp : bullets)
{
temp.move();
}
}
void displayAll()
{
for(Bullet temp : bullets)
{
temp.display();
}
}
Cell[][] grid;
float i, j;
boolean b3=false;
boolean b4=true;
boolean b5=false;
int cols = 5;
int rows = 2;
color pixel;
class Cell {
float cX,cY;
Cell(float tempX, float tempY, float tempW, float tempH) {
cX = tempX;
cY = tempY;
}
void display2() {
stroke(255, 0, 0);
fill(255, 0, 0);
rect(cX+30,cY+100,5,5);
rect(cX+35,cY+95,5,5);
rect(cX+35,cY+90,5,5);
rect(cX+40,cY+85,5,5);
rect(cX+45,cY+80,5,5);
rect(cX+50,cY+80,5,5);
rect(cX+55,cY+75,5,5);
rect(cX+60,cY+75,5,5);
rect(cX+65,cY+75,5,5);
rect(cX+70,cY+75,5,5);
rect(cX+75,cY+80,5,5);
rect(cX+80,cY+80,5,5);
rect(cX+85,cY+85,5,5);
rect(cX+90,cY+90,5,5);
rect(cX+90,cY+95,5,5);
rect(cX+95,cY+100,5,5);
rect(cX+95,cY+105,5,5);
rect(cX+95,cY+110,5,5);
rect(cX+95,cY+115,5,5);
rect(cX+90,cY+120,5,5);
rect(cX+85,cY+120,5,5);
rect(cX+80,cY+120,5,5);
rect(cX+75,cY+115,5,5);
rect(cX+70,cY+115,5,5);
rect(cX+70,cY+120,5,5);
rect(cX+70,cY+125,5,5);
rect(cX+65,cY+115,5,5);
rect(cX+60,cY+115,5,5);
rect(cX+55,cY+115,5,5);
rect(cX+55,cY+120,5,5);
rect(cX+55,cY+125,5,5);
rect(cX+50,cY+115,5,5);
rect(cX+45,cY+115,5,5);
rect(cX+45,cY+120,5,5);
rect(cX+40,cY+120,5,5);
rect(cX+35,cY+120,5,5);
rect(cX+30,cY+115,5,5);
rect(cX+30,cY+110,5,5);
rect(cX+30,cY+105,5,5);
rect(cX+40,cY+125,5,5);
rect(cX+40,cY+130,5,5);
rect(cX+45,cY+135,5,5);
rect(cX+50,cY+140,5,5);
rect(cX+55,cY+140,5,5);
rect(cX+60,cY+140,5,5);
rect(cX+65,cY+140,5,5);
rect(cX+70,cY+140,5,5);
rect(cX+75,cY+140,5,5);
rect(cX+80,cY+135,5,5);
rect(cX+85,cY+130,5,5);
rect(cX+85,cY+125,5,5);
if(b4==true) { //moving right
b3 = false;
b5 = false;
cX += 2;
}
else if(b5==true) { //moving left
b3 = false;
b4 = false;
cX -= 2;
}
if((b4 == true && cX >= 780) || (b5 == true && cX <= -1))
{
b3 = true; //moving down
b4 = false;
b5 = false;
}
if(b3 == true) //moving down
{
cY += 3;
if (cY % 10 == 0) //moving down 10 pixels
{
b3=false;
if (cX >= 780) //if it is on the right edge
{
b4 = false;
b5 = true;
}
else if (cX <= -1) //if it is on the left edge
{
b4 = true;
b5 = false;
cY += 3;
}
}
}
}
void monster()
{
display2();
}
}
Danke, Kevin, das erste Beispiel, gilt es nur für Kreise oder irgendein Objekt? – FredTheHomie
@FredTheHomie Stellen Sie sich vor, Sie zeichnen einen Kreis um Ihre Objekte. Sie können dann nur eine Kollision zwischen den Kreisen durchführen. Das wird nicht für jeden Fall funktionieren, aber es wird für viele einfache Fälle funktionieren. Denken Sie darüber nach: Die Kreise sind imaginär. Sie müssen sie eigentlich nicht zeichnen. Sie verwenden sie nur, um die Kollision zwischen Objekten zu erleichtern. Gleiches gilt für die rechteckige Begrenzungsbox. –
Ich verstehe, das macht Sinn. Also, sagen Sie, mein Eindringling, ich habe einen Bildkreis darum? Wie stelle ich diesen "Kreis" um? – FredTheHomie