我想让熊猫(用户用左右箭头键移动)与从屏幕左上方落下的糖果图像发生碰撞。当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。
任何帮助将不胜感激,如果您需要更多代码,请告诉我们。谢谢!
答案 0 :(得分:0)
看看这一行:
if (pandaX==xPosCandy && pandaY==yPosCandy)
只有当熊猫和糖果处于完全相同的位置时才会出现这种情况。这是不太可能的。
同样,请看这一行:
if (pandaX>xPosCandy && pandaY<yPosCandy)
只有当熊猫在糖果的右边和上方时才会出现这种情况,这不是你想要的。
相反,您需要检查它们是否重叠。你可以通过检查每一方来做到这一点,如下所示:
if(rectOneRight > rectTwoLeft && rectOneLeft < rectTwoRight && rectOneBottom > rectTwoTop && rectOneTop < rectTwoBottom){
//collision
}
无耻的自我推销:我在Processing({矩形 - 矩形碰撞)中编写了一个关于碰撞检测的教程here。