Processing 使用碰撞拾取项目

Processing 使用碰撞拾取项目,processing,collision-detection,Processing,Collision Detection,我目前正在努力制作一个版本的捕获标志的处理,但我遇到了一个冲突的问题。老实说,我对碰撞不太了解,我正试图抓住敌人的障碍。我可以从y轴拾取它,但是如果我在对象下方或上方,它仍然会拾取我不想要的对象。就是这样,我不知道如何设置顶部和底部的碰撞来拾取物品 (我希望这是有意义的,与块冲突并抓住块的代码在//move fecks下) 目标:可以从侧面、底部或顶部收集物品。当收集到物品时,物品跟随捡起它的玩家的x和y坐标 int[] player1; int[] player2; int[] player1

我目前正在努力制作一个版本的捕获标志的处理,但我遇到了一个冲突的问题。老实说,我对碰撞不太了解,我正试图抓住敌人的障碍。我可以从y轴拾取它,但是如果我在对象下方或上方,它仍然会拾取我不想要的对象。就是这样,我不知道如何设置顶部和底部的碰撞来拾取物品

(我希望这是有意义的,与块冲突并抓住块的代码在//move fecks下)

目标:可以从侧面、底部或顶部收集物品。当收集到物品时,物品跟随捡起它的玩家的x和y坐标

int[] player1;
int[] player2;
int[] player1chicken1;
int[] player1chicken2;
int[] player1chicken3;
int[] player2chicken1;
int[] player2chicken2;
int[] player2chicken3;
int p1chicken1width = 50;
int p1chicken1height = 50;
int p1chicken2width = 50;
int p1chicken2height = 50;
int p1chicken3width = 50;
int p1chicken3height = 50;
int p2chicken1width = 50;
int p2chicken1height = 50;
int p2chicken2width = 50;
int p2chicken2height = 50;
int p2chicken3width = 50;
int p2chicken3height = 50;
int p1width = 50;
int p1height = 50;
int p2width = 50;
int p2height = 50;
void setup(){
  size(1200, 600);
  player1= new int[] {250, 250};
  player2= new int[] {950, 250};
  player1chicken1= new int[] {40, 250};
  player1chicken2= new int[] {40, 50};
  player1chicken3= new int[] {40, 500};
  player2chicken1= new int[] {1110, 250};
  player2chicken2= new int[] {1110, 50};
  player2chicken3= new int[] {1110, 500};
}

void draw(){
  //draw players
  fill(0);
  rect(0,0,width/2,height);
  fill(255,0,0);
  rect(600,0,width/2,height);
  //move players
  fill(255);
  rect(player1[0], player1[1], p1width, p1height);
  if (keyPressed) {
    switch(keyCode) {
    case LEFT:
      player1[0] -=10;
      break;
    case RIGHT:
      player1[0] +=10;
      break;
    case UP:
      player1[1] -=10;
      break;
    case DOWN:
      player1[1] +=10;
      break;
    }
  }

  fill(255,255,0);
  rect(player2[0], player2[1], p2width, p2height);
  if (keyPressed) {
    if (key=='a'){
      player2[0] -=10;
      }
    if (key=='s'){
      player2[0] +=10;
      }
    if (key=='w'){
      player2[1] -=10;
      }
    if (key=='d'){
      player2[1] +=10;
      }
    }

   if(player1[0]+25>1150){
     player1[0]-=25;
   }
    if(player1[0]-25<0){
     player1[0]+=50;
   }

    if(player2[0]+25>1150){
      player2[0]-=25;
   }
    if(player2[0]-25<0){
      player2[0]+=50;
   }

   if(player1[1]+25>550){
     player1[1]-=25;
   }
   if(player1[1]-25<0){
     player1[1]+=50;
   }

   if(player2[1]+25>550){
     player2[1]-=25;
   }
   if(player2[1]-25<0){
     player2[1]+=50;
   }
   ////////////////////////////////chickens
   fill(0,0,255);
   rect(player1chicken1[0],player1chicken1[1],
   p1chicken1width,p1chicken1height);

   fill(0,0,255);
   rect(player1chicken2[0],player1chicken2[1],
   p1chicken2width, p1chicken2height);

   fill(0,0,255);
   rect(player1chicken3[0],player1chicken3[1],
   p1chicken3width,p1chicken3width);


   fill(0,0,255);
   rect(player2chicken1[0],player2chicken1[1],
   p2chicken1width,p2chicken1width);

   fill(0,0,255);
   rect(player2chicken2[0],player2chicken2[1],
   p2chicken2width,p2chicken2width);

   fill(0,0,255);
   rect(player2chicken3[0],player2chicken3[1],
   p2chicken3width,p2chicken3width);

   //move chickens
   if(player1[0] < player2chicken1[0] 
   +p2chicken1width && 
   player1[0] + p1width > player2chicken1[0]){
   player2chicken1[0]=player1[0];
 }


}
int[]播放器1;
int[]player2;
int[]player1chicken1;
int[]player1chicken2;
int[]player1chicken3;
int[]player2chicken1;
int[]player2chicken2;
int[]player2chicken3;
int p1chicken1width=50;
int P11高度=50;
int p1chicken2width=50;
int P1CHICKEN2高度=50;
int P13宽度=50;
int p1chicken3height=50;
int p2chicken1width=50;
int P2CHICKEN1高度=50;
int p2chicken2width=50;
int P2CHICKEN2高度=50;
int P23宽度=50;
int p2chicken3height=50;
int p1width=50;
int p1高度=50;
int p2width=50;
int p2高度=50;
无效设置(){
大小(1200、600);
player1=newint[]{250250};
player2=newint[]{950250};
player1chicken1=newint[]{40250};
player1chicken2=newint[]{40,50};
player1chicken3=newint[]{40500};
player2chicken1=newint[]{1110,250};
player2chicken2=newint[]{1110,50};
player2chicken3=新整数[]{1110500};
}
作废提款(){
//吸引玩家
填充(0);
矩形(0,0,宽度/2,高度);
填充(255,0,0);
矩形(600,0,宽/2,高);
//移动玩家
填充(255);
rect(player1[0],player1[1],p1width,p1height);
如果(按键){
开关(钥匙代码){
案例左:
player1[0]=10;
打破
案例权利:
player1[0]+=10;
打破
个案:
player1[1]=10;
打破
按大小写:
player1[1]+=10;
打破
}
}
填充(255255,0);
rect(player2[0],player2[1],p2width,p2height);
如果(按键){
如果(键=='a'){
player2[0]=10;
}
如果(键=='s'){
player2[0]+=10;
}
如果(键=='w'){
player2[1]=10;
}
如果(键=='d'){
player2[1]+=10;
}
}
如果(播放机1[0]+25>1150){
player1[0]=25;
}
如果(播放器1[0]-251150){
player2[0]=25;
}
如果(播放机2[0]-25550){
player1[1]=25;
}
如果(播放器1[1]-25550){
player2[1]=25;
}
如果(播放机2[1]-25播放机2缓存1[0]){
player2chicken1[0]=player1[0];
}
}

对不起,我刚刚发现我做错了什么。我没有包括玩家1的宽度。包括播放器1的宽度也使得顶部和底部的碰撞也起作用。我犯了一个简单的错误,尽管我花了几个小时试图纠正它,但还是没有抓住。以下是全部结果:

if(player1[0] + p1width/2 > 
   player2chicken1[0] - p2chicken1width/2
   && player1[0] - p1width/2 <    
   player2chicken1[0] + p2chicken1width/2
   && player1[1] + p1width/2 > 
   player2chicken1[1] - p2chicken1height/2
   && player1[1] - p1width/2 < 
   player2chicken1[1] + p2chicken1height/2){
       player2chicken1[0]=player1[0];
       player2chicken1[1]=player1[1];
}
if(播放器1[0]+p1width/2>
player2chicken1[0]-p2chicken1宽度/2
&&播放器1[0]-p1宽度/2<
player2chicken1[0]+p2chicken1宽度/2
&&播放器1[1]+p1width/2>
播放器2 Chicken1[1]-P2Chicken1高度/2
&&播放器1[1]-p1width/2<
播放器2 Chicken1[1]+P2Chicken1高度/2){
player2chicken1[0]=player1[0];
player2chicken1[1]=player1[1];
}