# new Scene(dfn)
dfnが渡された場合, 共通の処理を済ませた後にその内容を自身に代入する. これにより, 派生クラスを作らなくても, dfnの中に追加の定義を書いておけば それを自身に適用できる.
例)
let scene = new stdgam.Scene({
onLoad(GE, args){ ...初期化処理... },
draw(GE, ctx){ ...描画処理... } }
});
上の例は次と等価である:
let scene = new stdgam.Scene();
scene.onLoad = function(GE, args){ ...初期化処理... };
scene.draw(GE, ctx) = function{ ...描画処理... };
Parameters:
| Name | Type | Description |
|---|---|---|
dfn |
Object.<string, *>
|
このオブジェクトに追加で定義する 要素を集めた連想配列. |
Properties:
| Name | Type | Attributes | Description |
|---|---|---|---|
onLoad |
function
|
<optional> |
シーンがロードされた時に実行される初期化処理 (任意) |
draw |
function
|
<optional> |
シーン独自の描画処理 (任意) |
execute |
function
|
<optional> |
シーン独自のタスク処理 (任意) |
Methods
# add(obj, firstopt)
スプライトとタスクを同時に登録するショートカット. まず, objがスプライトの条件を満たすならスプライトリストに登録する. 次に, objがタスクの条件を満たすならタスクリストに登録する. 両方の条件を満たす場合は, 両方のリストに追加される.
Parameters:
# addSequence(list, firstopt)
複数のオブジェクトを登録するためのショートカット. listの要素のうち, スプライトであるものはスプライトリストに, タスクであるものはタスクリストに追加する. 第2引数がtrueの場合, 順序を維持したままリストの先頭に追加する. 第2引数がfalseの場合, 順序を維持したままリストの末尾に追加する. 省略時は末尾に追加する.
Parameters:
# addSprite(spr, firstopt)
スプライトをスプライトリストに追加する. 追加位置は, 第2引数がtrueのとき先頭, falseのとき末尾である. 省略したときは「末尾に」追加する.
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
spr |
Sprite
|
登録するスプライト |
||
first |
boolean
|
<optional> |
false | trueなら先頭に追加, falseなら末尾に追加 |
# addSpriteAfter(target, …objs)
スプライトリストの中に登録されているtargetの位置を探し, 第2引数以降に指定されたスプライトをその直後に追加する (順序を保つ). もしtargetが登録されていない場合, リストの末尾に追加する.
Parameters:
# addSpriteBefore(target, …objs)
スプライトリストの中に登録されているtargetの位置を探し, 第2引数以降に指定されたスプライトをその直前に追加する (順序を保つ). もしtargetが登録されていない場合, リストの先頭に追加する.
Parameters:
# addTask(task, firstopt)
タスクをタスクリストに追加する. 追加位置は, 第2引数がtrueのとき先頭, falseのとき末尾である. 省略したときは「末尾に」追加する.
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
task |
Task
|
登録するタスク |
||
first |
boolean
|
<optional> |
false | trueなら先頭に追加, falseなら末尾に追加 |
# addTaskAfter(target, …objs)
タスクリストの中に登録されているtargetの位置を探し, 第2引数以降に指定されたタスクをその直後に追加する (順序を保つ). もしtargetが登録されていない場合, リストの末尾に追加する.
Parameters:
# addTaskBefore(target, …objs)
タスクリストの中に登録されているtargetの位置を探し, 第2引数以降に指定されたタスクをその直前に追加する (順序を保つ). もしtargetが登録されていない場合, リストの先頭に追加する.
Parameters:
# init()
スプライトとタスクのリストを初期化する. このメソッドを明示的に呼ばない限り, superOnLoadを実行しても スプライトリストやタスクリストは初期化されない.
# superOnLoad(GE, args)
このシーンがGEのカレントシーンになったとき呼び出される. まず, GEをプライベートフィールドに保存する. 次に, もしthis.onLoad(GE, args)が定義されていればこれを実行する.
Parameters:
| Name | Type | Description |
|---|---|---|
GE |
stdgam.GameEngine
|
このシーンを実行するGameEngine |
args |
Object.<string, *>
|
ロード処理のために引き渡す設定リスト |
# superdraw(ctx)
登録されているスプライトのdraw(GE, ctx)を順番に実行する. ここでGEはこのゲームのGameEngine, ctxは描画に使うコンテクストである. その後, 「activeが真」または「activeがundefined」のスプライトだけを リストに残して, 他のスプライトはリストから削除する.
もしthis.draw(GE, ctx)が定義されている場合, 最後にこれを実行する.
Parameters:
| Name | Type | Description |
|---|---|---|
ctx |
CanvasRenderingContext2D
|
描画に使うコンテクスト |
# superexecute()
登録されているタスクのexecute(GE)を順番に実行する. ここでGEはこのゲームのGameEngineである. ただし, あるタスクがfalseを返した場合, それより後のタスクは実行しない.
その後, 「activeが真」または「activeがundefined」のタスクだけを リストに残して, 他のタスクはリストから削除する. 最後に, もしthis.execute(GE)が定義されている場合, これを実行する.
実際には, stdgam.Templatesの機能を実現するために, execute(GE)の実行後, タスクが_traits要素を持つかどうかチェックする. もし存在すれば, その中身の関数も順番に実行する (引数はexecuteと同じ).
【注意】execute()の中でタスクの追加・削除を行うと, for文の実行中に 配列を変更したのと同じ現象が発生します! 特に, 自身よりも前に新しい要素を 追加する場合は, falseを返して後続の処理を止めてください.
# useCoroutine(GE, gen, optopt)
指定されたジェネレータ関数を使ってジェネレータを作り, このオブジェクトの 更新処理をこのジェネレータに委任する. 具体的には, このジェネレータを実行するだけの関数をthis.executeに代入する. ジェネレータが完了したときは, このメソッドを実行する直前のexecuteの値に戻す.
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
GE |
stdgam.GameEngine
|
ジェネレータ関数の初期化時に渡すGameEngine |
||
gen |
GeneratorFunction
|
処理を委任するジェネレータ関数 |
||
opt |
Object.<*, *>
|
<optional> |
{} | ジェネレータ関数の初期化時に渡すオプション |