相反,预期目标的碰撞仅沿轴碰撞

时间:2018-12-12 02:05:39

标签: processing collision-detection

我试图让一个物体与两个障碍中的任何一个碰撞并设置其位置,但是无论何时我通过它们中的任何一个,它都在记录碰撞,老实说,我让自己非常困惑,不知道是什么在这一点上是错误的。这是我正在使用的代码,与其他代码无关:

int[] player1;
int[] player2;
int p1width = 50;
int p1height = 50;
int sandbagwidth = 30;
int sandbagheight = 200;
int sand11 =200;
int sand12 = 0;
int sand21 =200;
int sand22 = 400;
void setup(){
  size(1200, 600);
  player1= new int[] {250, 250};

}

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;
    }
  }



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


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

   //COLLISION
   fill(0,255,0);
   rect(sand11, sand12, sandbagwidth, sandbagheight);
   fill(0,255,0);
   rect(sand21, sand22, sandbagwidth, sandbagheight);
   if(player1[0] + p1width/2 > sand11 -  sandbagwidth/2
    && player1[0] - p1width/2 < sand11 + sandbagwidth/2
    && player1[1] + p1height/2 > sand12 - sandbagheight/2
    && player1[1] - p1height/2 < sand12 + sandbagheight/2){
     player1[0]=220;
     player1[1]=250;
    }

    if(player1[0] + p1width/2 > sand21 - sandbagwidth-25
    && player1[0] - p1width/2 < sand21 + sandbagwidth-25
    && player1[1] + p1height/2 > sand22 - sandbagheight-25
    && player1[1] - p1height/2 < sand22 + sandbagheight-25){
     player1[0]=50;
     player1[1]=50;
   }
  }

1 个答案:

答案 0 :(得分:1)

在我看来,您在绘制时使用player1sandXX等作为左上角,但在计算碰撞时将其用作中心(除非您有{{1 }}调用您未包含的代码)。这很容易导致您的错误-即使底部没有可见的缝隙,也请尝试通过底部的沙袋。

Nitpick:您还可以在常量和计算值之间切换;从长远来看,即使它在这里起作用,它也会咬你。例如,rectMode应该是rect(600,0,width/2,height)。碰撞响应代码中的rect(width/2,0,width/2,height)是被基于您的变量的计算所取代的更好的选择。