基本コンセプト
Game
Game はキャンバス、ループ、そして共有サービス(camera、random、params、stats、hooks、inspect)を持っています。
ts
import { Game } from "@debuffjp/core";
const game = new Game({ canvas, width: 320, height: 180, scale: "integer", pixelArt: true });ゲームのコードは常に 論理単位(この例では 320×180)で書きます。キャンバスはコンテナに合わせて拡大縮小され、高 DPI の画面でもバッキングストアをくっきり保ちます。
scale | 挙動 |
|---|---|
fit(デフォルト) | アスペクト比を保ったままコンテナいっぱいに表示 |
integer | 整数倍のスケールのみ。ドット絵をくっきり見せたいときに |
none | 論理サイズをそのまま CSS ピクセルで表示 |
シーン
シーンはただのオブジェクトです。メソッドはすべて省略できます。
ts
game
.add({
id: "play",
enter() {},
update(dt) {}, // fixed step, seconds
render(draw, alpha) {}, // draw in logical units; alpha interpolates between steps
exit() {},
inspect: () => ({ score }), // JSON for tools and tests
})
.go("play");
game.start();固定ステップのループ
シミュレーションは、ディスプレイのリフレッシュレートに関係なく、決まった刻み(デフォルトは 1/60 秒)で進みます。描画には alpha が渡されるので、動きをなめらかに補間できます。シード付きの game.random と組み合わせれば、同じ入力からは必ず同じゲームが生まれます。これがシナリオテストを再現可能にしている仕組みです。
game.freeze(0.08):ヒットストップ。シミュレーションは止まり、描画は続きます。game.timeScale = 0.5:スローモーション。- タブが非表示になると、ループは自動で一時停止します。
フックとプラグイン
game.hooks は beforeUpdate、afterUpdate、beforeRender、afterRender、sceneChange を公開しています。game.use(plugin) で、これらの上に作られた再利用可能な振る舞いを組み込めます。プラグインを見てください。