使计时器在代码中的特定点开始
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 秒的初始延迟是唯一有问题的延迟,但我想你可能还是想知道。
玩得开心!
我最近一直在开发一款游戏。目前我正在尝试创建一个主菜单,它将与我的游戏共存并一起工作。不幸的是,我 运行 遇到了一个问题。 我制作了一个 "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 秒的初始延迟是唯一有问题的延迟,但我想你可能还是想知道。
玩得开心!