redraw()のバグ

今回のコードはメタコードなので実行しても意味はない。

int x, y
PImage img1, img2; //  なんかのイメージ

void mousePressed() {     // ①
  x = 100; y = 100;
  redraw();
}

void mouseReleased() {    // ②
  x = 200; y = 200;
  redraw();
}

// 画像をブレンドしてるような描画
void draw() {
  image(img, x, y);       // ③
  // 何か重い処理         // ④
  image(img2, x, y);      // ⑤
}

① - マウスを押したとき座標を設定して再描画。
② - マウスを離したとき①とは別の座標を設定して再描画。
③ - img1の画像を描画
④ - 何か思い時間のかかる処理を想定
⑤ - img2の画像を描画


マウスを押したとき①が行われる。そしてそのフレームにdraw()が実行される。
このとき③を描画したあと④の時間の間にマウスを離して②が行われたとする。


入力処理はイベント形式で呼ばれるので、
④の間にマウスを離せばdrawの途中だけど②がよばれてx,yの値は変わってしまう。


そして⑤が呼ばれると同じ位置にimg1,img2を描画したいはずなのに位置がおかしくなって描画されてしまう。
redraw()は2度呼ばれてるのだから、1度draw()が終了した後もう一度draw()してくれることを期待する。


でも、すでにdraw()が実行されている時にredraw()を呼んでも再描画の予約がされない。
つまり中途半端な状態で描画終わってしまうことになる。


解決策はredrawをframeRateミリ秒遅延して実行させればよさそうだけど、かなりめんどくさそうなので
noLoop()はやめてぐるぐる無限ループさせるのが手っ取り早いと思います!(おい)