processingにおいて、for文やwhile文を使って図形を連続描画すると、frameRateに関係なく一瞬で描画されてしまいます。下記の例では10本の直線が一瞬で描かれてしまいます。
def setup():
size(500,500)
def draw():
for i in range(10):
line(0, 0, i*50, 500)frameRateを入れても無駄です。
def setup():
size(500,500)
frameRate(5)
def draw():
for i in range(10):
line(0, 0, i*50, 500)下記に紹介する仕組みを使うと、for文やwhile文の内容を好みの間隔で順次描画できるようにできます。下記のソースコードをコピーして自分なりに作り変えてみましょう。
- draw() を draw_gen() にする
- 待ちたい箇所に「yield “wait”」入れる
- draw_gen()の最後に「yield “end”」入れる(入れないとエラーになる)
- 順次描画のための仕組みをコピペしておく
def setup():
size(500,500)
frameRate(5)
def draw_gen(): # ①
for i in range(10):
line(0, 0, i*50, 500)
yield "wait" # ②
yield "end" # ③
# ④ --------コピペ--------
g = draw_gen()
gen_state = "start"
def draw():
global gen_state
if gen_state != "end":
gen_state = next(g)別の実装方法として、例外処理を使う方法も考えられるが、どれがいいのかわからん。
def setup():
size(300,300)
frameRate(10)
def draw_gen():
for i in range(100):
line(i, 0, i, 300)
yield
g = draw_gen()
def draw():
try:
next(g)
except StopIteration:
print(u"もうないよ")