【问题标题】:Processing - How to make 2 moving images collide?处理 - 如何使 2 个运动图像发生碰撞?
【发布时间】:2017-06-07 07:59:58
【问题描述】:

我想让熊猫(用户使用左右箭头键移动)与从屏幕左上角落下的糖果图像发生碰撞。当 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 &amp;&amp; pandaY==yPosCandy),但没有成功。我也试过if (pandaX&gt;xPosCandy &amp;&amp; pandaY&lt;yPosCandy),但它说你太早接触了糖果。

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

【问题讨论】:

    标签: java image processing collision


    【解决方案1】:

    看看这一行:

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

    只有当熊猫和糖果处于完全相同的位置时才会如此。这不太可能。

    同样,看这一行:

    if (pandaX>xPosCandy && pandaY<yPosCandy)
    

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

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

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

    无耻的自我推销:我写了一篇关于 Processing 中的碰撞检测(包括矩形-矩形碰撞)的教程,可在 here 获取。

    【讨论】:

    • 谢谢,我尝试测试它们是否像您建议的那样重叠。我还为高度和宽度制作了变量,以使其更容易理解。这就是我所做的 if (candyX+candyW > pandaX && candyX pandaY && candyY
    • 我实际上回到了我的代码中,发现当我调用方法 touchCandy() 时,它没有以正确的顺序调用参数。现在可以了,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多