处理 - 通过碰撞改变方向

时间:2017-11-29 17:21:20

标签: boolean processing collision detection

我正在努力使用矩形碰撞工具。我尝试制作一个程序,当两个图像发生碰撞时,图像会改变方向。

我想使用此代码,但我不确定我把它放在哪里?我还可以用什么替代ob1(object1)和x1以及在哪里放置宽度和高度变量?感谢

 boolean Collision()

  ( ob1 - x1, ob1 -y1, ob1 - w, ob1 - h,
    ob2 - x1, ob2 -y1, ob2 -w, ob2-h)

  return 
  (ob1 - x1 < ob2 - x2 && ob1 - x2 > ob2 = x1 &&  //insert y variables








//start of code


    class Bouncy 
    {

      int x;
      int y;
      int dx; 
      int dy;

      PImage nw, ne, sw, se;

      Bouncy(int x, int y, int dx, int dy) 
      {
        this.x = x;
        this.y = y;
        this.dx = dx;
        this.dy = dy;
    nw = loadImage("NorthW.png");
    ne = loadImage("NorthE.png");
    sw = loadImage("SouthW.png");
    se = loadImage("SouthE.png");
      }


      void update() 
      {
        render();
        move();
      }

      void render() 
      {
    if (dx == -1 && dy == -1)
      image(nw,x,y);

    else if (dx == 1 && dy == -1)
    image(ne,x,y);

    else if (dx == -1 && dy == 1)
    image(sw,x,y);

    else if (dx == 1 && dy == 1)
    image(se,x,y);
          }

      void checkCollisions() 
      {
        int edge = 65; // half width of one of the PNG files

        if (y<=(edge-edge)) // hit top border
     dy=1; // switch to moving downwards

    if (y>=500-(edge*2)) // hit bottom border
     dy=-1; // switch to moving upwards

        if (x<=edge-edge) // hit left border
    dx=1; // switch to moving right

    if (x>=500-(edge*2)) // hit right border
    dx=-1;
      }



      void move() 
      {
    checkCollisions();
    x += dx;
    y += dy;

      }
    }

    Bouncy janet,jeff,jerry;

    void setup() 
    {
      size(500,500);
      janet = new Bouncy(10,100,1,-1);
      jeff = new Bouncy(10,150,-1,1);
      jerry = new Bouncy(10,350,1,1);

    }

    void draw() 
    {
      background(255);
      janet.update();
      jeff.update();
      jerry.update();

    }

1 个答案:

答案 0 :(得分:0)

我认为你应退后一步break your problem down into smaller pieces,然后一次一件。例如:为什么不开始使用两个硬编码的矩形,而不是尝试使用完整的程序,这些矩形会在它们交叉时改变颜色?

这将使您能够在不担心所有额外内容的情况下进行基本的碰撞检测。因为现在你的碰撞检测代码没有多大意义。你需要比较两个矩形,而不仅仅是一个。无耻的自我推销:我写了一篇关于碰撞检测的教程here。您正在寻找矩形 - 矩形碰撞检测:

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

使用两个硬编码矩形。然后让它与第三个一起工作。如果您遇到特定步骤,那么您可以发布MCVE以及更具体的问题。祝你好运。