Class

Coroutine

stdtask.Coroutine()

execute()を普通に実装する代わりにジェネレータを利用できるオブジェクト. コンストラクタの中などでuseCoroutine()メソッドを呼び出すと, 指定されたジェネレータ関数によって作られるジェネレータに このオブジェクトの更新処理を委任することができる.

たとえば, ある決まった処理を1フレームに1回ずつ, 番号を増やしながら 順番に実行するタスクを作る場合は次のようなコードになる.

// 使用例1
class MyTask extends stdtask.Coroutine{
    constructor(){
        super();
        this.active = true;
        this.useCoroutine(this.chart);
    }

    *chart(opt){
        // execute()を1回呼び出すごとにループが1周ずつ進む
        for(let i = 0; i < 10; i++){
            my_periodic_task(i);
            yield true;
        }

        this.active = false;  // 最後にタスクリストから除外してもらう
    }
}

また, 自分でオーバーライドしたexecute()の中から必要に応じて useCoroutine()を呼び出すこともできる. この場合, ジェネレータが完了した後は 元のexecute()の内容に戻る.

// 使用例2
class MyTask extends stdtask.Coroutine{
    constructor(){
        super();
        this.active = true;
    }

    execute(GE){
        if(GE.input.isJustPressed("Enter")){
            this.useCoroutine(this.chart, { GE: GE });
        }
    }

    *chart(opt){
        // execute()を1回呼び出すごとにループが1周ずつ進む
        for(let i = 0; i < 10; i++){
            my_periodic_task(opt.GE, i);
            yield true;
        }

        this.active = false;  // 最後にタスクリストから除外してもらう
    }
}
Constructor

# new Coroutine()

View Source stdtask.js, line 87

Methods

# execute(GE) → {boolean}

useCoroutine()を実行する前, および指定したジェネレータが完了した後に 使われるダミーのexecute()メソッド. 何もせずにtrueを返す.

Parameters:
Name Type Description
GE stdgam.GameEngine

タスク処理に用いるGameEngine

View Source stdtask.js, line 113

常にtrueを返す

boolean

# useCoroutine(gen, optopt)

指定されたジェネレータ関数を使ってジェネレータを作り, このオブジェクトの 更新処理をこのジェネレータに委任する. 具体的には, このジェネレータを実行するだけの関数をthis.executeに代入する. ジェネレータの返り値がthis.executeの返り値として使われる. ジェネレータが完了したときは, このメソッドを実行する直前のexecuteの値に戻す.

Parameters:
Name Type Attributes Default Description
gen GeneratorFunction

処理を委任するジェネレータ関数

opt Object.<*, *> <optional>
{}

ジェネレータ関数の初期化時に渡すオプション

View Source stdtask.js, line 97