Сделать запуск таймера в точке spesifi c в коде - PullRequest
0 голосов
/ 08 января 2020

я работаю над игрой в последнее время. Сейчас я пытаюсь создать главное меню, которое будет сосуществовать и работать вместе с моей игрой. Я столкнулся с проблемой, к сожалению. Я сделал таймер «задержки», который удаляет здоровье у игрока, и таймер для босса, с которым вы сражаетесь, чтобы босс мог прыгать по полю битвы после определенной задержки / таймера. это работало нормально, пока я не попытался реализовать главное меню. Когда я ввел меню, я сделал это так, что если вы нажмете «p», вы попадете в игру и запустите функцию «draw», в которой есть игра, и только тогда она должна запустить задержку / таймер, состоящий из 5000 мс. Проблема возникает, когда я пытаюсь поместить «задержку» внутрь части, в которой есть игра, задержка не сработает, но если я верну ее туда, где она была у меня впервые, что было в части «Настройка», она работает только то, что вместо этого запускается таймер, как только запускается программа, а не сама игра. вот мой код:

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);
    }
   }

некоторые из кодовых названий приведены на шведском sh, так что плохо переведу важное. startmeny = "меню", если есть больше, вы не понимаете плохо перевести их. :)

1 Ответ

1 голос
/ 08 января 2020

Не изменяя большую часть вашего кода, вы можете исправить первоначальную проблему следующим образом:

  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, вы «забываете» старую задержку и просто запускаете новую. Звучит так, как первоначальная задержка в 5 секунд была единственной проблемой c, но я думаю, вы все равно захотите узнать.

Веселитесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...