Processing 加工过程中的碰撞检测

Processing 加工过程中的碰撞检测,processing,collision-detection,game-physics,Processing,Collision Detection,Game Physics,我正在做一个太空入侵者游戏。非常基本和简单。到目前为止,我有一个射手可以移动(左和右)和射击。我也有一个入侵者以一种模式移动。我要子弹让入侵者消失 所以我的问题是如何让碰撞检测工作(而不是颜色碰撞)?如果有人能告诉我这是怎么做的,我将不胜感激 注意:我在过去被要求输入太多的代码,所以我希望Bullet和Invader类是正确的方法 ArrayList项目符号; 等级子弹 { 浮动x; 浮动y; 浮动速度; 子弹头(浮动tx,浮动ty) { x=tx; y=ty; } 无效显示() { 冲程(25

我正在做一个太空入侵者游戏。非常基本和简单。到目前为止,我有一个射手可以移动(左和右)和射击。我也有一个入侵者以一种模式移动。我要子弹让入侵者消失

所以我的问题是如何让碰撞检测工作(而不是颜色碰撞)?如果有人能告诉我这是怎么做的,我将不胜感激

注意:我在过去被要求输入太多的代码,所以我希望Bullet和Invader类是正确的方法

ArrayList项目符号;
等级子弹
{
浮动x;
浮动y;
浮动速度;
子弹头(浮动tx,浮动ty)
{
x=tx;
y=ty;
}
无效显示()
{
冲程(255,0,0);
填充(255);
椭圆(x,y,10,10);
}
无效移动()
{
y-=5;
}
}
void moveAll()
{
用于(项目符号温度:项目符号)
{
临时移动();
}
}
void displayAll()
{
用于(项目符号温度:项目符号)
{
温度显示();
}
}
Cell[][]网格;
浮点数i,j;
布尔b3=假;
布尔b4=真;
布尔b5=假;
int cols=5;
int行=2;
彩色像素;
类单元{
浮动cX,cY;
单元(浮动速度、浮动速度、浮动速度、浮动速度){
cX=tempX;
cY=坦比;
} 
void display2(){
冲程(255,0,0);
填充(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);
如果(b4==true){//向右移动
b3=假;
b5=假;
cX+=2;
}
如果(b5==true){//向左移动
b3=假;
b4=假;
cX-=2;
}
if((b4==true&&cX>=780)| |(b5==true&&cX=780)//如果它位于右边缘
{
b4=假;
b5=真;
}

else if(cX处理碰撞检测有很多方法,这使得这是一个相当广泛的问题。但我将重点介绍两种可能有用的方法:

方法1:圆圈碰撞

如果您知道两个对象的中心和大小,只需使用
dist()
函数计算两个对象之间的距离。如果该距离小于它们的大小,则对象发生碰撞

这里有一个小例子:

void setup(){
大小(500500);
椭圆模型(半径);
}
作废提款(){
背景(0);
浮动圈=宽度/2;
浮动圈=高度/2;
浮环半径=50;
float circleTwoX=mouseX;
浮动圈woy=鼠标;
浮圈半径=100;
if(dist(circleOneX,circleOneY,circleTwoX,circleTwoY)
方法2:矩形碰撞

或者,您可以在对象周围定义一个边界框。然后您只需要一系列if语句来检查这些框是否重叠。如果重叠,则对象发生碰撞

这里有一个小例子:

void setup(){
大小(500500);
}
作废提款(){
背景(0);
浮动矩形X=宽度/2;
浮动直线Y=高度/2;
浮动矩形宽度=50;
浮动矩形高度=50;
float rectTwoX=鼠标;
float rectTwoY=mouseY;
浮动宽度=100;
浮动高度=100;
if(rectOneXrectTwoX&&
rectOneY直肠长度){
//碰撞!
填充(255,0,0);
}否则{
//不要碰撞!
填充(0,255,0);
}
rect(rectOneX、rectOneY、RECTONEWITH、rectOneHeight);
rect(rectTwoX,rectTwoY,rectTwoWidth,rectTwoHeight);
}

这两种方法都是在处理过程中引入的。

处理碰撞检测的方法有很多,这使得这是一个相当广泛的问题。但我将重点介绍两种可能有用的方法:

方法1:圆圈碰撞

如果您知道两个对象的中心和大小,只需使用
dist()
函数计算两个对象之间的距离。如果该距离小于它们的大小,则对象发生碰撞

这里有一个小例子:

void setup(){
大小(500500);
椭圆模型(半径);
}
作废提款(){
背景(0);
浮动圈=宽度/2;
浮动圈=高度/2;
浮环半径=50;
float circleTwoX=mouseX;
浮动圈woy=鼠标;
浮圈