Processing 如何使用同一按钮在处理过程中暂停/播放草图?

Processing 如何使用同一按钮在处理过程中暂停/播放草图?,processing,Processing,我正在尝试使用相同的键实现草图的暂停/播放,例如,如果我按p,草图应该停止,如果我再次按p,草图应该重新开始。到目前为止,我使用noLoop()/loop()来实现这一点,但使用了两个不同的键(p表示暂停,r表示开始)。如果我使用keyPressed()和keyReleased(),它确实有效,但这意味着按住键,但这并不能回答我的问题。同样在暂停模式下,我使用redraw()执行一个步骤,而noLoop()执行得很好。 以下是我迄今为止使用两个不同键尝试的一些代码: public void dr

我正在尝试使用相同的键实现草图的暂停/播放,例如,如果我按p,草图应该停止,如果我再次按p,草图应该重新开始。到目前为止,我使用noLoop()/loop()来实现这一点,但使用了两个不同的键(p表示暂停,r表示开始)。如果我使用keyPressed()和keyReleased(),它确实有效,但这意味着按住键,但这并不能回答我的问题。同样在暂停模式下,我使用redraw()执行一个步骤,而noLoop()执行得很好。 以下是我迄今为止使用两个不同键尝试的一些代码:

public void draw(){
背景(随机(255));
}
按public void键(){
如果(键=='p')
noLoop();
如果(键=='r')
loop();
如果(键=='s')
重画();
}
这是具有相同密钥的代码:

public void draw(){
背景(随机(255));
}
按public void键(){
如果(键=='p')
noLoop();
如果(键=='p')
loop();
如果(键=='s')
重画();
}
在这种情况下,当我按下键时,它没有任何效果。 我最后试过的是:

public void draw(){
背景(随机(255));
}
按public void键(){
如果(键=='p')
noLoop();
其他的
loop();
如果(键=='s')
重画();
}
在这种情况下,当我按下“p”键时,它会停止绘制,但不会再次播放。由于“else”的原因,当我按下任何键(包括“s”)时,它会再次播放,而“s”本应仅用于一步。 任何帮助都是非常受欢迎的。 谢谢

请尝试发布一个我们可以复制和粘贴以自行运行的日志。您发布的代码几乎是一个MCVE,但请包含一个
draw()
函数,以便我们可以看到与您完全相同的内容

下面是一个简单的MCVE,它演示了您遇到的问题:

void draw(){
背景(随机(255));
}
按public void键(){
如果(键=='p'){
noLoop();
}
如果(键=='p'){
loop();
}
}
此代码将显示随机闪烁的背景。如果按
P
键,您希望它暂停,但它只是一直闪烁

您需要养成单步执行代码的习惯,以便准确地理解它在做什么。逐行阅读
按键()

第一个
if
语句检查键是否为
p
,既然是,它就调用
noLoop()
函数。然后第二个
if
语句检查它们的键是否为
P
,既然是,它就调用
loop()
函数。这与我们刚才对
noLoop()
的调用相反,这使它看起来好像什么都没有发生

您需要跟踪草图的状态。在您的情况下,需要跟踪草图当前是否已暂停。您可以使用一个
boolean
变量进行此操作。然后使用该变量确保在按下
P
键时执行正确的操作。大概是这样的:

boolean=false;
作废提款(){
背景(随机(255));
}
按public void键(){
如果(键=='p'){
暂停=!暂停;
如果(暂停){
noLoop();
}否则{
loop();
}
}
}

非常感谢。这是我在这里的第一个问题,我不知道MCVE。我编辑了这篇文章,我想这就是你的建议。关于代码,现在它正按照我所需要的方式工作,我会记住你的建议,养成逐步阅读代码的习惯。