移动一个形状并让另一个跟随它

时间:2014-02-12 13:55:12

标签: processing shapes

我正在尝试在处理过程中绘制多种形状,以对彼此的运动作出反应。因此,当我移动其中一个时,它会连接到草图中的其他形状中的1个或2个。但是我不希望它是一个静态的运动,我希望它看起来很自然。

我目前唯一的代码是拖动它时移动的形状的基本绘图,但不知道如何链接形状:(帮助!!

float bx;
float by;
int boxSize = 75;
boolean overBox = false;
boolean locked = false;
float xOffset = 0.0; 
float yOffset = 0.0;

void setup() 
{
  size(640, 360);
  bx = width/2.0;
  by = height/2.0;
  rectMode(RADIUS);  
}

void draw() 
{ 
  background(0);

  // Test if the cursor is over the box 
  if (mouseX > bx-boxSize && mouseX < bx+boxSize && 
      mouseY > by-boxSize && mouseY < by+boxSize) {
    overBox = true;  
      }
  // Draw the box
  rect(bx, by, boxSize, boxSize);
}

void mousePressed() {
  if(overBox) { 
    locked = true; 
  } else {
    locked = false;
  }
  xOffset = mouseX-bx; 
  yOffset = mouseY-by; 
}

void mouseDragged() {
  if(locked) {
    bx = mouseX-xOffset; 
    by = mouseY-yOffset; 
  }
}

void mouseReleased() {
  locked = false;
}

我想我需要使用PShape,但我不确定。

1 个答案:

答案 0 :(得分:0)

首先,我建议您使用类来表示形状,这样您就可以轻松地链接它们。 我在您的代码中进行了一些更改,以便获得某种以下行为。

class Box{
  float bx;
  float by; 
  int size = 75;

  Box(float bx, float by){
    this.bx = bx;
    this.by = by;   
  }

  void drawBox(){
    rect(bx, by, size, size);
  }

  void moveBox(float x, float y){
    bx = bx + x;
    by = by + y; 
  }

}



boolean overBox = false;
boolean locked = false;
float xOffset = 0.0; 
float yOffset = 0.0;
Box box, secondBox, thirdBox;

void setup() 
{
  size(640, 360); 
  box = new Box(width/2.0, height/2.0); 
  secondBox = new Box(100, 100);
  thirdBox = new Box(500, 300);  
  rectMode(RADIUS);  
}

void draw() 
{ 
  background(0);

  // Test if the cursor is over the box 
  if (mouseX > box.bx-box.size && mouseX < box.bx+box.size && 
      mouseY > box.by-box.size && mouseY < box.by+box.size) {
    overBox = true; 
    box.drawBox();   
    secondBox.drawBox();
    thirdBox.drawBox();   
  }

}

void mousePressed() {
  if(overBox) { 
    locked = true; 
  } else {
    locked = false;
  }
  xOffset = mouseX-box.bx; 
  yOffset = mouseY-box.by; 
}

void mouseDragged() {
  if(locked) {
    box.bx = mouseX-xOffset; 
    box.by = mouseY-yOffset; 

    deltaMovemente(box, secondBox);
    deltaMovemente(box, thirdBox);
  }
}

void mouseReleased() {
  locked = false;
}

void deltaMovemente(Box follow, Box box){
  float dx = (follow.bx - box.bx)/50;
  float dy = (follow.by - box.by)/50;

  box.moveBox(dx, dy);
}

希望这可能有用。 问候。