使计时器在代码中的特定点开始

Making a timer start at a spesific point in the code

我最近一直在开发一款游戏。目前我正在尝试创建一个主菜单,它将与我的游戏共存并一起工作。不幸的是,我 运行 遇到了一个问题。 我制作了一个 "delay" 计时器,它可以移除用户玩家的生命值,还有一个计时器用于你正在战斗的 Boss,以便 Boss 在一定的 delay/timer 之后能够在战场上跳来跳去。 在我尝试实现主菜单之前,这一切都很好。当我放入菜单时,我是这样做的,如果你按 "p" 它会带你进入游戏并启动里面有游戏的 "draw" 功能的部分,然后它应该启动由 5000 毫秒组成的 delay/timer。当我尝试将 "delay" 放入其中包含游戏的部分时,问题就出现了,延迟将不起作用,但如果我将它放回我最初拥有它的位置,即 "Setup" 部分,它确实起作用,只是它会在程序启动后立即启动计时器,而不是实际游戏。这是我的代码:

void Startmeny() {
 textSize(70);
 text("Jackan Heroes!", 300, 300);
 fill(255, 255, 0);
 textSize(40);
 text("Start", 350, 400);
 fill(255, 255, 0);
 textSize(40);
 text("Creatorer", 350, 500);
 fill(255, 255, 0);
 if (keyPressed) {
  if (key == 'p' || key == 'P') {
   start = true;
  }
 }
}


void draw() {

  textSize(70);
  text("Jackan Heroes!", 200, 300);
  fill(255, 255, 0);
  textSize(40);
  text("Start - press 'P' ", 250, 400);
  fill(255, 255, 0);
  textSize(40);
  text("Creatorer - press 'O' ", 250, 500);
  fill(255, 255, 0);
  if (keyPressed) {
   if (key == 'p' || key == 'P') {
    start = true;
   }
  }
  if (start == true) {

   background(100);

   int rT = 255;

   _delay = new Delay(5000);

   g.display();
   g.checkEdges();
   g.BarsDisplay();
   g.HealthDisplay();
   g.XpDisplay();


   f.detect();
   f.Enemy();
   f.HealthDisplay();
   f.dead();



   if (g.intersects(D)) {
    D.transport();
   }

   if (f.HP > 0) {
    if (g.intersects(f) /*|| g.Intersects(f)*/ ) {

     if (_delay.expired()) {

      g.RemoveHealth();
      _delay = new Delay(1200);
     }

     //g.knockback();
     //f.chase();
    }
   }

   if (g.intersect(f)) {

    if (!g.alreadypressed) {
     f.damage();
     textSize(32);
     text("-8 ", f.x2 + 50, f.y2 - 40);
     fill(0, 102, 153);
    }
    g.alreadypressed = true;
   }




   if (_delay.expired()) {
    if (f.yes == true) {

     float R = random(100, 700);
     f.x2 = R;
     f.xd = f.x2 + 50;
     float R2 = random(100, 700);
     f.y2 = R2;
     f.yd = f.y2 + 50;
     _delay = new Delay(3000);
    }
   }

一些代号是瑞典语,所以我翻译了重要的代号。 startmeny = "the menu" 如果还有更多你不明白的翻译它们。 :)

无需更改大部分代码,您可以像这样解决最初的问题:

  if (keyPressed) {
   if (!start && (key == 'p' || key == 'P')) {
    start = true;
    _delay = new Delay(5000); //of course, remove this line from where I took it
   }
  }

就是说,您在代码中的多个位置初始化了 _delay。这些延迟都是不同的计时器吗?如果是这样,则需要将它们初始化为不同的变量。每次重新初始化 _delay 时,都会 "forget" 旧的延迟并开始新的延迟。在我看来,5 秒的初始延迟是唯一有问题的延迟,但我想你可能还是想知道。

玩得开心!