У меня есть игра Space Invaders, над которой я работаю. Очень простой и простой. Пока у меня есть стрелок, который движется (влево и вправо) и стреляет. У меня также есть один захватчик, который перемещается по шаблону. Я хочу, чтобы пули заставили захватчика исчезнуть.Обнаружение столкновений при обработке
Так что мой вопрос в том, как получить обнаружение столкновения для работы (а не цветное столкновение)? Если кто-нибудь покажет мне, как это будет сделано, я буду благодарен.
Примечание: меня обвинили в том, что вы использовали слишком много кода в прошлом, поэтому я надеюсь, что только класс Bullet и Invader - это правильный способ сделать это.
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();
}
}
Спасибо, Кевин, Первый пример, применим ли он только к кругам или к любому объекту? – FredTheHomie
@FredTheHomie Представьте, что вы крутите вокруг своих объектов. Затем вы можете просто столкнуться между кругами. Это не будет работать для каждого случая, но это будет работать для многих простых случаев. Подумайте об этом так: круги являются мнимыми. Вам на самом деле не нужно их рисовать. Вы просто используете их для облегчения столкновения между объектами. То же самое с прямоугольной ограничивающей рамкой. –
Я понимаю, это имеет смысл. Итак, скажите, мой захватчик, у меня вокруг кружка изображений? Итак, как мне поместить этот «круг» вокруг него? – FredTheHomie