pixijs-application
PixiJS v8 の `Application` クラスの作成と設定を行う際に使用するスキルです。`new Application()` と非同期の `app.init()` に渡す各種オプション(width/height/background/antialias/resolution/autoDensity/preference/resizeTo など)、`app.stage`・`app.renderer`・`app.canvas`・`app.screen`・`app.domContainerRoot` へのアクセス方法、ResizePlugin・TickerPlugin・CullerPlugin の活用、`ExtensionType.Application` を用いたカスタムプラグインの実装、ならびに `app.start()`・`app.stop()`・`app.destroy()` によるライフサイクル管理までを網羅します。
description の原文を見る
Use this skill when creating and configuring a PixiJS v8 Application. Covers new Application() + async app.init() options (width, height, background, antialias, resolution, autoDensity, preference, resizeTo, autoStart, sharedTicker, canvas, useBackBuffer, powerPreference, eventFeatures, accessibilityOptions, gcActive, bezierSmoothness, webgl/webgpu/canvasOptions per-renderer overrides), app.stage/renderer/canvas/screen/domContainerRoot access, ResizePlugin, TickerPlugin, CullerPlugin (cullable, cullArea), custom ApplicationPlugin creation via ExtensionType.Application, start/stop lifecycle, and app.destroy() with releaseGlobalResources. Triggers on: Application, app.init, app.stage, app.renderer, app.canvas, app.screen, app.domContainerRoot, ApplicationOptions, ApplicationPlugin, ExtensionType.Application, resizeTo, preference, autoStart, sharedTicker, useBackBuffer, powerPreference, skipExtensionImports, preferWebGLVersion, preserveDrawingBuffer, cullable, CullerPlugin, app.start, app.stop, app.destroy, releaseGlobalResources.
SKILL.md 本文
Application は、レンダラー、ルート stage Container、キャンバス、および Ticker/Resize プラグインを所有する便利なラッパーです。v8 ではコンストラクタは引数を取りません。すべての設定は非同期の app.init() 呼び出しに渡され、ここで autoDetectRenderer 経由でレンダラーがインスタンス化されます。
クイックスタート
import { Application } from "pixi.js";
const app = new Application();
await app.init({
resizeTo: window,
background: "#1099bb",
antialias: true,
preference: "webgl",
autoDensity: true,
resolution: window.devicePixelRatio,
});
document.body.appendChild(app.canvas);
関連スキル: pixijs-core-concepts (レンダラー、レンダリングパイプライン)、pixijs-ticker (レンダループの詳細)、pixijs-scene-container (app.stage の操作)、pixijs-environments (非ブラウザ環境のセットアップ)。
コアパターン
ライフサイクル: construct、init、render、destroy
import { Application } from "pixi.js";
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);
// ... シーン実行、ticker が自動的に app.render() を駆動 ...
app.destroy(
{ removeView: true, releaseGlobalResources: true },
{ children: true, texture: true, textureSource: true },
);
new Application()はインスタンスを割り当てますが、何も作成しません。ここに渡されたオプションは v8 の非推奨警告とともに無視されます。app.init(options)は非同期です。レンダラーを構築し、プラグインをセットアップし、app.canvas、app.renderer、またはapp.screenを使用できるようになる前に完了する必要があります。- TickerPlugin は init が解決されると、毎フレーム
app.render()を呼び出します (autoStart: falseの場合を除く)。 app.destroy(rendererDestroyOptions, stageDestroyOptions)— 最初の引数はrenderer.destroy()に転送されます。trueまたは{ removeView: true }を渡して、キャンバスを DOM から削除します。同じタブでアプリを破棄して再作成する場合、releaseGlobalResources: trueを追加してグローバルプール (バッチ、テクスチャキャッシュ) をドレインします。これを省略すると、再初期化後のちらつきとステイルなテクスチャの原因になります (pixijs-performanceを参照)。
主要な init オプション
await app.init({
width: 800,
height: 600,
background: 0x1099bb,
backgroundAlpha: 1,
antialias: true,
resolution: window.devicePixelRatio,
autoDensity: true,
preference: "webgpu",
autoStart: true,
sharedTicker: false,
resizeTo: window,
canvas: document.querySelector("#game-canvas") as HTMLCanvasElement,
});
すべてのオプション — ビュー/キャンバス、背景、レンダラープリファレンス (配列形式を含む)、ticker、リサイズ、culler、イベント、アクセシビリティ、WebGL/WebGPU コンテキストフラグ、Graphics ベジェ平滑化、GC、およびレンダラーごとのオーバーライド (webgl / webgpu / canvasOptions) については、references/application-options.md を参照してください。
Application プロパティ
app.stage; // ルート Container; すべてのディスプレイオブジェクトをここに追加
app.renderer; // WebGL/WebGPU/Canvas レンダラーインスタンス
app.canvas; // HTMLCanvasElement (自分で DOM に挿入してください)
app.screen; // CSS ピクセルで表示領域を説明する Rectangle
app.domContainerRoot; // DOMContainer オーバーレイを保持する HTMLDivElement
app.stage はプレーン Container です。シーングラフの詳細 (トランスフォーム、addChild、destroy) については、pixijs-scene-container を参照してください。レンダラーレベルの操作 (抽出、generateTexture、カスタムシステム) については、pixijs-core-concepts と pixijs-custom-rendering を参照してください。app.domContainerRoot は、レンダラーが DOMContainer オーバーレイをホストするために使用する <div> です。シーンノードに固定された DOM 要素が必要な場合は、app.canvas の隣に追加します (pixijs-scene-dom-container を参照)。
ResizePlugin
初期化時に resizeTo を設定するか、後で app.resizeTo を再割り当てすると、プラグインは resize イベントをリッスンし、ターゲット要素のクライアントサイズを使用して renderer.resize() を呼び出します。autoDensity: true と resolution: window.devicePixelRatio を組み合わせて、高 DPI 出力を実現します。
await app.init({ resizeTo: window });
app.resizeTo = document.querySelector("#game-container") as HTMLElement;
app.resize(); // ターゲットの現在のサイズへの即座のリサイズ
app.queueResize(); // 次のアニメーションフレームへのリサイズを遅延
app.cancelResize(); // 保留中の queueResize をドロップ
プラグインはキャンバスをターゲットに合わせて保ちます。app.screen と app.canvas.width/height は応答して更新されます。リサイズ後に読み取って UI を配置します。
app.resize()— 即座の同期リサイズ。app.queueResize()— 次のフレームへの遅延により、急速な呼び出しを統合します。window.resizeリスナーによって内部的に使用され、冗長な作業を回避します。app.cancelResize()— キューに入っているリサイズをキャンセルします。キューに入っているqueueResizeをトリガーした独自のレイアウトコードを破棄する前に呼び出します。
Ticker の基本
TickerPlugin は app.ticker を作成し、UPDATE_PRIORITY.LOW で app.render() をそれに登録します。app.start()/app.stop() でループを制御し、app.ticker.add / app.ticker.addOnce でコールバックを追加します:
app.ticker.add((ticker) => {
sprite.rotation += 0.01 * ticker.deltaTime;
});
app.ticker.addOnce(() => {
console.log("次のフレームで 1 回実行され、その後自動的に削除される");
});
app.stop(); // レンダループを一時停止 (例: タブが非表示)
app.start(); // 再開
コールバックは Ticker インスタンスを受け取ります。ticker.deltaTime でフレームレート非依存乗数 (60fps で ~1.0) を読み取るか、ticker.deltaMS で実際のミリ秒を読み取るか、ticker.FPS で現在のフレームレートを読み取ります。優先度、FPS キャップ、onRender、共有と専用 ticker、および v8 コールバック署名の変更については、pixijs-ticker を参照してください。
手動レンダループ
await app.init({ autoStart: false, width: 800, height: 600 });
document.body.appendChild(app.canvas);
function frame() {
updateScene();
app.render();
requestAnimationFrame(frame);
}
frame();
autoStart: false は TickerPlugin が ticker を自動的に開始するのを防ぎます。app.render() を自分で呼び出すか (または同じ効果のために app.renderer.render({ container: app.stage }) を呼び出す)。登録されている ticker コールバックがまだ発火する場合は、ループ内で app.render() の前に app.ticker.update() を呼び出します。
CullerPlugin (オプトイン)
CullerPlugin は、app.renderer.screen の外に落ちるコンテナのレンダリングをスキップします。デフォルトでは登録されていません。アプリを作成する前に追加します:
import {
Application,
Container,
Sprite,
extensions,
CullerPlugin,
Rectangle,
} from "pixi.js";
extensions.add(CullerPlugin);
const app = new Application();
await app.init({ width: 800, height: 600 });
const world = new Container();
world.cullable = true; // このコンテナは、その境界がスクリーンを離れるときにカルされます
world.cullableChildren = true; // デフォルト; 子へのリカージョンをスキップするには `false` に設定
const tile = Sprite.from("tile.png");
tile.cullable = true;
world.addChild(tile);
app.stage.addChild(world);
cullable が設定されていない限り、コンテナはカルされません。container.cullArea = new Rectangle(x, y, w, h) でデフォルトの境界チェックをオーバーライドします。子の境界の計算が高コストの場合です。プラグインは app.render() をラップして、Culler.shared.cull(app.stage, app.renderer.screen) がすべてのフレームの前に実行されます。カルペイオフの時期については、pixijs-performance を参照してください。
カスタム Application プラグイン
static init、static destroy、および static extension = ExtensionType.Application を持つクラスを登録して Application を拡張します。どちらのメソッドも this が Application インスタンスにバインドされた状態で呼び出されるため、this.renderer と this.stage が利用可能です。
import {
Application,
ExtensionType,
extensions,
type ApplicationOptions,
} from "pixi.js";
class FpsOverlay {
public static extension = ExtensionType.Application;
public static init(this: Application, options: Partial<ApplicationOptions>) {
// レンダラーが作成された後、app.init() 内で実行
// `this` にプロップ/メソッドをアタッチして、アプリで公開
}
public static destroy(this: Application) {
// app.destroy() 内で実行 — アタッチしたものをすべてティアダウン
}
}
extensions.add(FpsOverlay);
プラグインは登録順に初期化され、逆順に破棄されます。プラグインのタイプ付きオプションを追加するには、PixiMixins.ApplicationOptions を拡張します:
declare global {
namespace PixiMixins {
interface ApplicationOptions {
fpsOverlay?: { visible?: boolean };
}
}
}
await app.init({ fpsOverlay: { visible: true } });
組み込みの ResizePlugin、TickerPlugin、およびオプトインの CullerPlugin はすべて同じコントラクトを使用しています。skipExtensionImports: true を設定した場合は、必要な組み込みを自分で登録します (extensions.add(ResizePlugin, TickerPlugin))。
一般的なミス
[CRITICAL] オプションをコンストラクタに渡す
間違い:
const app = new Application({ width: 800, height: 600 });
document.body.appendChild(app.canvas);
正解:
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);
v8 では Application コンストラクタは引数を取りません。そこに渡されたオプションは無視され、非推奨警告をログします。レンダラーは非同期の init() 呼び出し内でのみ作成されます。
[HIGH] app.view の代わりに app.canvas を使用しない
間違い:
document.body.appendChild(app.view);
正解:
document.body.appendChild(app.canvas);
app.view は v8 で app.canvas に名前が変更されました。古いゲッターは仍利用可能ですが、非推奨警告を発出します。
[MEDIUM] init が解決される前に app.canvas または app.renderer に触れる
間違い:
const app = new Application();
document.body.appendChild(app.canvas);
app.init({ width: 800, height: 600 });
正解:
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);
app.renderer、app.canvas、および app.screen は init() プロミスが解決されると入力されます。それより前にアクセスすると undefined が返されます。
API リファレンス
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- pixijs
- リポジトリ
- pixijs/pixijs-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/pixijs/pixijs-skills / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。