p5.jsでクレーの大冒険を作ろうとしたときに気になったのが、コルーチン。ゲームプログラミングでは必須となる、待ち時間処理を実装するための仕組み。Pythonで初めて取り組んだときに苦戦したので、先に下調べをしてみた。
参考サイト
- JavaScriptでゲームシナリオを快適に実装する(デモ有)
- プログラミング言語の並行処理機能を活用するアルゴリズムの視覚化支援
- JavaScriptのジェネレータ関数とイテレータの仕組みをGIFアニメで解説
やってみた
let g;
function setup() {
createCanvas(400, 400);
textSize(30);
g = new game();
}
function draw() {
background(220);
let e = "🛑";
if(g.waitFrames < 0){
g.nextEmoji();
g.waitFrames = 200;
}
g.waitFrames--;
text(g.nowEmoji, width/2, height/2);
}
class game {
constructor() {
this.nowEmoji = "❌";
this.genEmoji = this.generatorEmoji();
this.waitFrames = 200;
}
nextEmoji() {
let r = this.genEmoji.next();
if (!r.done) this.nowEmoji = r.value;
}
*generatorEmoji() {
yield "🔥";
yield "🚀";
yield "✨";
}
}