Üzerinde çalıştığım bir Space Invaders oyunu var. Çok basit ve basit. Şimdiye kadar (sol ve sağ) ve sürgünler hareket eden bir atıcı var. Bir modelde hareket eden bir de istilacı var. Mermilerin istilacıyı ortadan kaldırmasını istiyorum.İşleme üzerinde Çarpışma algılaması
Benim sorum şu ki, çarpışma algılamasını nasıl çalıştırabilirim (renk çarpışması değil)? Herkes bana nasıl yapıldığını gösterebilirse o zaman minnettar olacağım.
Not: Geçmişte çok fazla kod koymak için çağrıldım. Bu nedenle, yalnızca Kurşun ve Invader sınıfının bunu yapmanın doğru yolu olduğunu umuyorum.
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();
}
}
Teşekkürler, Kevin, İlk örnek, sadece daireler veya herhangi bir nesne için geçerli mi? – FredTheHomie
@FredTheHomie Nesnelerinizin etrafında bir daire çizmeyi hayal edin. Daha sonra sadece daireler arasında çarpışma yapabilirsiniz. Bu her durum için işe yaramaz, ancak birçok basit durum için çalışır. Bu şekilde düşünün: daireler hayalidir. Aslında onları çizmek zorunda değilsin. Sadece nesneleri daha kolay çarpışmak için kullanıyorsun. Dikdörtgen sınırlayıcı kutu ile aynı. –
Anladım, bu mantıklı. Öyleyse, benim istilacım, etrafındaki bir görüntü dairem var mı? Peki bu "daireyi" etrafına nasıl koyarım? – FredTheHomie