处理 - 如何使2个运动图像发生碰撞?

时间:2017-06-06 23:53:01

标签: java image processing collision

我想让熊猫(用户用左右箭头键移动)与从屏幕左上方落下的糖果图像发生碰撞。当2个图像发生碰撞时,它会说"你触摸了糖果"在屏幕和控制台上。但是当熊猫和糖果接触时,没有任何反应。

以下是代码:

PImage candy, panda;


int pandaX = 800;
 int pandaY = 790;
 int candySpeed = 20;
 int yDirCandy = 1;
 int yPosCandy = 10;
 int xPosCandy = 20;

 void setup() {
 candy = loadImage("goodCandy1.png");
 panda = loadImage("panda.png");
 }
 void loadStuff() {
   image(panda, pandaX, pandaY, 80, 112);
   text("Lives: " + lives, 1400, 70);
   image(candy, xPosCandy, yPosCandy, 187, 121);
   yPosCandy = yPosCandy + (candySpeed * yDirCandy);
   touchCandy(pandaX, pandaY, yPosCandy, xPosCandy);
 }
 void keyPressed() {
   if (key==CODED) {
     if (keyCode==LEFT) {
       pandaX = pandaX-20;
     }
     if (keyCode==RIGHT) {
       pandaX = pandaX+20;
     }
    if (pandaX<=10) {
      pandaX=10;
      lives = lives -1;
    }
    if (pandaX>=1500) {
      pandaX=1500;
    }
   }

 }

 void touchCandy(int xPosCandy, int yPosCandy, int pandaX, int pandaY) {
   if (pandaX==xPosCandy && pandaY==yPosCandy ) { 
     text("YOU TOUCHED THE CANDY!", width/2, height/2);
     print("YOU TOUCHED THE CANDY!");
   }

 }

我尝试过做if (pandaX==xPosCandy && pandaY==yPosCandy)但它没有用。我也尝试过做if (pandaX>xPosCandy && pandaY<yPosCandy),但它说你很快就接触了CANDY。

任何帮助将不胜感激,如果您需要更多代码,请告诉我们。谢谢!

1 个答案:

答案 0 :(得分:0)

看看这一行:

if (pandaX==xPosCandy && pandaY==yPosCandy)

只有当熊猫和糖果处于完全相同的位置时才会出现这种情况。这是不太可能的。

同样,请看这一行:

if (pandaX>xPosCandy && pandaY<yPosCandy)

只有当熊猫在糖果的右边和上方时才会出现这种情况,这不是你想要的。

相反,您需要检查它们是否重叠。你可以通过检查每一方来做到这一点,如下所示:

if(rectOneRight > rectTwoLeft && rectOneLeft < rectTwoRight && rectOneBottom > rectTwoTop && rectOneTop < rectTwoBottom){
   //collision
}

无耻的自我推销:我在Processing({矩形 - 矩形碰撞)中编写了一个关于碰撞检测的教程here