[1,2,3].do { /* how to wait 1s here? */ }
我正在学习超级对撞机。我找到了 SimpleNumber.wait 函数,但我很快了解到它在“普通”函数中不起作用,只能在称为例程的一些“不同”类型的函数中起作用。
我特意停下来问这个问题:在someArray.do
构造的每次迭代中,是否有一种简单的方法可以暂停给定的时间?我所说的“简单方式”是指不需要学习十几个新概念并经历范式转变的东西。
注意:我知道我最终需要学习关于 supercollider 中的例程、任务和其他排序机制的整本巨著,但现在我只想玩“Mary Had A Little Lamb”并称其为 noob's day,没有在我可以做任何事情之前必须学习所有这些。
这可能吗?
使用 .wait / .yield 功能需要一个例程。当您调用 eg 时3.wait
,您是在告诉某个地方的时钟等待 3 秒钟,然后从上次中断的地方继续操作。为了做到这一点,您需要与时钟进行通信,并且您需要可以停止和启动的东西(执行某个功能的例程)。
您尝试执行的操作的完整语法是: Routine({ [1, 2, 3].do { |n| n.postln; n.wait; } }).play(AppClock);
上面创建了一个带有函数的 Routine(您的 1、2、3 循环),然后在时钟(AppClock,标准时钟)上播放。
但是,.fork
函数上的方法是执行上述操作的简写(即创建一个 Routine 并播放它):
{ [1, 2, 3].do { |n| n.postln; n.wait; } }.fork();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句