打开和关闭门,并在关闭时限制运动

时间:2018-04-07 11:00:39

标签: boolean processing

我正试图在5-10秒内随意打开和关闭门。

这是我到目前为止所做的:

float doorRandom = random(5,10);
float doorRandomClose = random(5,10);

void setup() {
  size(1000, 1000);
}

void draw() {
    if(millis()>doorRandom*1000){
     doorClosed();
   }
   else{
     doorOpen();
   }
}

void doorOpen() {
    noFill();
    rect(500,500,100,200);
}

void doorClosed() {
    fill(0);
    rect(500,500,100,200);
}

门开始打开,然后在5-10秒后关闭。然而,门然后保持关闭。如何打开,关闭,打开,关闭等等......

另外,我有一个用左右箭头键控制的矩形:

float x = 50;
float y = 500;
float speed = 50;

void display() {
      fill(255, 0, 0);                         
      rect(x, y, 40, 75);
}

void keyPressed() {
  if(keyCode == LEFT && x > 50)
  {
    x = x - speed;
  }
  if(keyCode == RIGHT && x < 1000)
  {
    x = x + speed;
  }
}

我的愿望就是这样,当门打开时,矩形可以通过并向右移动到屏幕的右侧,当门关闭时,让矩形无法通过,所以:

if(keyCode == RIGHT && x < 500)

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以通过将门的开放性以布尔值存储来打开和关闭门,然后在打开和关闭之间切换门时在绘制功能内生成随机时间

然后你可以使用这个布尔值来允许矩形只有在打开时通过检查矩形的x值和门的开放性来通过门,并在门被限制时限制矩形的移动。不要打开,以免它无法穿过门。

当矩形在门内关闭时,你必须决定一个行为。

让您入门的实现:

float doorRandom = random(5,10);
bool doorOpened = false; // does Java have false?

void setup() {
  size(1000, 1000);
}

void draw() {
    if(millis()>doorRandom*1000){
     doorOpened = !doorOpened; // Toggle door
     doorRandom = random(5,10);
    }
    if(doorOpened) {
     doorOpen();
   }
   else{
     doorClosed();
   }
}

void doorOpen() {
    noFill();
    rect(500,500,100,200);
}

void doorClosed() {
    fill(0);
    rect(500,500,100,200);
}

答案 1 :(得分:0)

关闭后你没有做任何重新打开门的逻辑。

这行代码:

if(millis()>doorRandom*1000)

永远是真的 - 因此门永远都会保持密切。

当您想再次打开门时,需要重置millis()功能。

最好的方法就是这样(它不是纯粹的javascript,但你明白了):

time = currentTimeMillis() 


if(currentTimeMillis() - time >doorRandom*1000)...

当你想重置时只需再次更新时间:

time = currentTimeMillis()