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

问题描述:

我想让熊猫(用户通过左右箭头键移动)与从屏幕左上角落下的糖果图像碰撞。当两张图像相撞时,屏幕和控制台会显示“您接触到了糖果”。但是当熊猫和糖果碰触时,没有任何反应。处理 - 如何使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),但它说你很快就接触了糖果。

任何帮助将不胜感激,让我知道如果你需要更多的代码。谢谢!

看这句话:

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

如果熊猫和糖果,是在完全相同的位置这只会是真实的。这是不太可能的。

同样,看看这行:

if (pandaX>xPosCandy && pandaY<yPosCandy) 

如果熊猫的权利和糖果上面,这是不是你想要的这只会是真实的。

相反,您需要检查它们是否重叠。你会通过检查每一侧,这样做:

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

无耻的自我宣传:我已经写在处理碰撞检测教程(包括矩形,矩形碰撞)提供here

+0

谢谢,我试着测试它们是否像你所建议的那样重叠。我还为高度和宽度创建了变量,以便更容易理解。这是我做过什么 如果(candyX + candyW> pandaX && candyX 潘迪&& candyY Brianna

+0

我真的回去了我的代码,发现当我调用touchCandy()方法时,它并没有按照正确的顺序调用参数。它现在可以工作,非常感谢您的帮助! – Brianna