处理 - 如何使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。
谢谢,我试着测试它们是否像你所建议的那样重叠。我还为高度和宽度创建了变量,以便更容易理解。这是我做过什么 如果(candyX + candyW> pandaX && candyX潘迪&& candyY
Brianna
我真的回去了我的代码,发现当我调用touchCandy()方法时,它并没有按照正确的顺序调用参数。它现在可以工作,非常感谢您的帮助! – Brianna