私が取り組んでいるSpace Invadersのゲームがあります。非常に基本的でシンプル。これまで私は(左と右に)動き、撃つ射手を持っています。私もパターンで動く侵略者が1人あります。弾丸が侵略者を消滅させるようにしたい。処理上の衝突検出
私の質問は、どうやって衝突検出が機能するか(色の衝突ではない)ですか?誰かが私にそれがどのように行われたかを示すことができれば、私は感謝するでしょう。
注:過去にあまりにも多くのコードを入れてしまったので、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();
}
}
ありがとうKevin、最初の例は、サークルやオブジェクトにのみ適用されますか? – FredTheHomie
@FredTheHomieあなたのオブジェクトの周りに円を描くと想像してください。その後、サークル間の衝突を行うことができます。それはすべてのケースでうまくいくわけではありませんが、多くの単純なケースでうまくいくでしょう。このように考えてみましょう。円は想像上のものです。実際に描く必要はありません。あなたはオブジェクト間の衝突をより簡単にするためにそれらを使用しています。四角形の境界ボックスと同じです。 –
私は理解しています、これは理にかなっています。だから、私の侵略者は、私はそれの周りにイメージサークルがありますか?だから私はどのようにそれの周りにこの "円"を置くのですか? – FredTheHomie