Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在处理过程中中断while语句?_Javascript_While Loop_Processing - Fatal编程技术网

Javascript 如何在处理过程中中断while语句?

Javascript 如何在处理过程中中断while语句?,javascript,while-loop,processing,Javascript,While Loop,Processing,我有两个按钮,当单击一个按钮时,它会启动一个while语句。这个while语句播放音符,这是一个很长的旋律。现在我希望当按钮不再点击时,while语句立即停止,不再播放旋律 现在我有一个简单的while语句——我尝试了break但它并没有解决问题。您还没有发布任何关于while语句的代码。从你的描述来看,这听起来很简单: 如果按下鼠标,将播放并更新声音(根据旋律/等更改音符) 否则没有声音(没有更新,没有输出) 从我的观点来看,这是一个简单的if/else,因此需要注册鼠标事件,如mouse

我有两个按钮,当单击一个按钮时,它会启动一个
while
语句。这个
while
语句播放音符,这是一个很长的旋律。现在我希望当按钮不再点击时,while语句立即停止,不再播放旋律


现在我有一个简单的while语句——我尝试了
break但它并没有解决问题。

您还没有发布任何关于while语句的代码。从你的描述来看,这听起来很简单:

  • 如果按下鼠标,将播放并更新声音(根据旋律/等更改音符)
  • 否则没有声音(没有更新,没有输出)
从我的观点来看,这是一个简单的
if/else
,因此需要注册鼠标事件,如
mousePressed
mousererelease
(因为点击基本上是一对由按下和释放组成的按键)来切换声音更新。我不是声音/音符/旋律方面的专家,但这里有一个改进版的Minim Sinewave信号处理示例:

import ddf.minim.*;
import ddf.minim.signals.*;

Minim minim;
AudioOutput out;
SineWave sine;

float freq = 60;

void setup()
{
  size(512, 200, P2D);

  minim = new Minim(this);
  out = minim.getLineOut(Minim.STEREO);
  sine = new SineWave(440, 0.5, out.sampleRate());
  sine.portamento(200);
  sine.setAmp(0);
  out.addSignal(sine);
}

void draw()
{
  background(0);
  stroke(255);
  //update sound only if mouse is pressed
  if(mousePressed){
    freq += 10;//in this case I'm updating the frequency
    if(freq > 1500) freq = 60;//change melody according to time delays/etc. here
    sine.setFreq(freq);
  }
  // draw the waveforms
  for(int i = 0; i < out.bufferSize() - 1; i++)
  {
    float x1 = map(i, 0, out.bufferSize(), 0, width);
    float x2 = map(i+1, 0, out.bufferSize(), 0, width);
    line(x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50);
    line(x1, 150 + out.right.get(i)*50, x2, 150 + out.right.get(i+1)*50);
  }
}
//updated sound "while" mouse is clicked (press+release)
void mousePressed(){
  sine.setAmp(.75);
}
void mouseReleased(){//reset, kill volume/amp and reset freq, in your case return to 1st note of melody for example
  freq = 60;
  sine.setAmp(0);
}

void stop()
{
  out.close();
  minim.stop();
  super.stop();
}
导入ddf.minim.*;
输入ddf最小信号。*;
极小极小;
音频输出;
正弦波;
浮动频率=60;
无效设置()
{
大小(512,200,P2D);
最小值=新的最小值(本);
out=最小getLineOut(最小立体声);
正弦=新正弦波(440,0.5,out.sampleRate());
正弦传输(200);
正弦设置放大器(0);
输出信号(正弦);
}
作废提款()
{
背景(0);
中风(255);
//仅当按下鼠标时更新声音
如果(鼠标按下){
freq+=10;//在本例中,我正在更新频率
如果(freq>1500)freq=60;//根据此处的时间延迟等更改旋律
正弦设定频率(freq);
}
//绘制波形
对于(int i=0;i
哦,如果您使用的是C,
((void(*)0)()将完成此工作…:当一个按钮被点击时,点击一个按钮是一个瞬间的操作而不是一个连续的动作…显示实际的代码。不要描述它。我认为这是解决问题的好办法。也就是说,您可以使用'break;'然而,要打破while循环,只能从逻辑的角度出发。也就是说,它可以通过你的循环以一个线性级数完成。然而,处理在运行时使用游戏样式的循环,所有交互性、鼠标、单击的按钮等都必须进行计算,并且仍然允许循环运行。如果您想允许更复杂的交互,那么在mousePressed()或mouseerelease()方法中,只需设置一个全局标志(布尔值),并在下一次循环中检查它。