Processing 如何使用同一按钮在处理过程中暂停/播放草图?
我正在尝试使用相同的键实现草图的暂停/播放,例如,如果我按p,草图应该停止,如果我再次按p,草图应该重新开始。到目前为止,我使用noLoop()/loop()来实现这一点,但使用了两个不同的键(p表示暂停,r表示开始)。如果我使用keyPressed()和keyReleased(),它确实有效,但这意味着按住键,但这并不能回答我的问题。同样在暂停模式下,我使用redraw()执行一个步骤,而noLoop()执行得很好。 以下是我迄今为止使用两个不同键尝试的一些代码:Processing 如何使用同一按钮在处理过程中暂停/播放草图?,processing,Processing,我正在尝试使用相同的键实现草图的暂停/播放,例如,如果我按p,草图应该停止,如果我再次按p,草图应该重新开始。到目前为止,我使用noLoop()/loop()来实现这一点,但使用了两个不同的键(p表示暂停,r表示开始)。如果我使用keyPressed()和keyReleased(),它确实有效,但这意味着按住键,但这并不能回答我的问题。同样在暂停模式下,我使用redraw()执行一个步骤,而noLoop()执行得很好。 以下是我迄今为止使用两个不同键尝试的一些代码: public void dr
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。我编辑了这篇文章,我想这就是你的建议。关于代码,现在它正按照我所需要的方式工作,我会记住你的建议,养成逐步阅读代码的习惯。