在按下按钮时停止并重新启动游戏

时间:2018-09-19 15:32:03

标签: processing

我目前正在研究一款小型游戏,以学习处理程序。

我希望我的游戏在按“停止”时停止,并且希望我的游戏在“停止”更改为“开始”时重置/重新启动。

(当我单击按钮时,它将Stop(停止)更改为Start(开始),然后又更改为Stop(停止)等。(因此,基本上,我有1个“ button”)

我很挣扎,无法在Internet / stackoverflow上找到解决方案,所以也许有人可以帮助我?

(@ mousePressed,如果需要,我需要“停止并重新启动功能”)

float x = width/2;
float speed = 2;

boolean textHasBeenClicked = false;

int aantalRaak = 0; 
int aantalMis = 0;
int positieText = 20;

void setup() {
  background(0);
  size(600,500);
}

void draw() {
  clear();
  move();
  display();  
  smooth();
  //Scoreboard bovenaan
  fill(255);
  textSize(20);
  textAlign(LEFT);
  text("Aantal geraakt: " + aantalRaak,0, positieText); text("Aantal gemist: " + aantalMis, width/2, positieText);

  //button onderaan
      fill(0,255,0);
      rect(width/2-40, height-40, 100, 50);// draw anyway...

} 

void mousePressed() {
    // toggle 
    textHasBeenClicked = ! textHasBeenClicked;
    fill(0);
    if (textHasBeenClicked) {
        // display text 2
        textSize(30);
        textAlign(CENTER);
        text("Stop" , width/2,height-10); 

    }
    else  {
        // display text 1
        textSize(30);
        textAlign(CENTER);
        text("Start" , width/2,height-10); 
        }
}



void move() {
  x = x + speed;
  if (x > width) {
    x = 0;
  }
}

void display(){
  //schietschijf
  float y = height/2;
  noStroke();
  fill(255, 0, 0);
  ellipse(x, y, 40, 40);   

  fill(255);
  ellipse(x, y, 30, 30);

  fill(255, 0, 0);
  ellipse(x, y, 20, 20);  

  fill(255);
  ellipse(x, y, 10, 10);  
}

2 个答案:

答案 0 :(得分:0)

您应该尝试break your problem down into smaller steps并一次执行一个步骤。您实际上是在问两个问题:

  • 如何显示一个停止按钮,它变成一个开始按钮?
  • 如何重置草图?

对于第一个问题,您可以创建一个布尔变量。在draw()函数中使用该变量,然后在mousePressed()函数中修改该变量。

boolean running = false;

void draw() {
  fill(0);
  if (running) {
    background(255, 0, 0);
    text("Stop", 25, 25);
  } else {
    background(0, 255, 0);
    text("Start", 25, 25);
  }
}

void mousePressed() {
  running = !running;
}

然后,为了重置草图,您可以创建一个函数,将所有变量恢复为默认值。这是一个简单的示例:

float circleY;

void setup() {
  size(100, 500);
}

void draw() {
  background(0);
  circleY++;

  ellipse(width/2, circleY, 20, 20);
}

void reset() {
  circleY = 0;
}

void mousePressed() {
  reset();
}

尝试使用像这样的小示例代替完整的程序,如果遇到困难,请发布MCVE。祝你好运。

答案 1 :(得分:-1)

您可以考虑实现while循环。我不知道您要使用哪个库进行输入,所以我无法确切告诉您该怎么做。但是类似的东西:

while(!InputReceived) {
    if(CheckForMouseInput()) // Assuming CheckForMouseInput returns true if input was detected
        break // Input was detected, now do stuff based on that.
    else {
        // Must #include <thread> and #include <chrono>
        // Wait a bit...

        continue; // Jump back to the top of the loop, effectively restarting it.
    }

可能会满足您的需求。至少那是我要做的。循环中断后,游戏将有效地重新启动,并且您可以基于此执行任何操作。