pixijs-scene-gif
PixiJS v8でアニメーションGIFを表示する際に使用するスキル。`pixi.js/gif`のside-effectインポート、`Assets.load`による`GifSource`の取得、`GifSprite`の再生制御(`play`/`stop`/`currentFrame`/`animationSpeed`)、`autoPlay`/`loop`オプション、`onComplete`/`onLoop`/`onFrameChange`コールバック、`GifSource`の共有・`clone`・`destroy`までを網羅する。
description の原文を見る
Use this skill when displaying animated GIFs in PixiJS v8. Covers the pixi.js/gif side-effect import, Assets.load returning a GifSource, GifSprite playback (play/stop/currentFrame/animationSpeed), autoPlay/loop options, onComplete/onLoop/onFrameChange callbacks, GifSource sharing, clone, destroy. Triggers on: GifSprite, GifSource, pixi.js/gif, animationSpeed, currentFrame, autoPlay, onComplete, onFrameChange, constructor options, GifSpriteOptions.
SKILL.md 本文
GifSprite はアニメーション GIF をディスプレイオブジェクトとして再生します。Assets.load('animation.gif') は (Texture ではなく) GifSource を返し、これを GifSprite でラップします。GIF ローダー拡張を登録するには、サイドエフェクト import 'pixi.js/gif' が必須です。
pixijs-scene-core-concepts に精通していることを想定しています。GifSprite は Sprite を拡張するため、リーフです。その内側に子要素をネストしないでください。複数の GifSprite インスタンスをグループ化するには、それらを Container でラップしてください。
クイックスタート
import "pixi.js/gif";
import { GifSprite } from "pixi.js/gif";
const source = await Assets.load("animation.gif");
const gif = new GifSprite({
source,
autoPlay: true,
loop: true,
animationSpeed: 1,
});
gif.anchor.set(0.5);
gif.x = app.screen.width / 2;
gif.y = app.screen.height / 2;
app.stage.addChild(gif);
[!NOTE] GIF はすべてのフレームを個別のキャンバステクスチャにデコードします。フレームが多いパフォーマンスクリティカルなアニメーションでは、
AnimatedSpriteを使用したスプライトシートを優先してください。単一のアトラステクスチャを使用し、GPU でのバッチ処理が優れています。
関連スキル: pixijs-scene-core-concepts (シーングラフの基本)、pixijs-scene-sprite (スプライトシートベースのアニメーション用 AnimatedSprite)、pixijs-assets (Assets.load、キャッシング、アンロード)、pixijs-ticker (フレームタイミング)、pixijs-performance (テクスチャメモリ)。
コンストラクタオプション
GifSpriteOptions は Omit<SpriteOptions, 'texture'> を拡張します。texture は内部的に管理されます (source.textures[0] から設定され、フレームごとに入れ替わります)。その他すべての Sprite オプション (anchor、scale、tint、roundPixels など) および Container オプション (position、scale、tint、label、filters、zIndex など) も有効です。詳細は skills/pixijs-scene-core-concepts/references/constructor-options.md を参照してください。
GifSpriteOptions で追加されるリーフ固有のオプション:
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
source | GifSource | — | 必須。Assets.load('file.gif') で返される解析済み GIF データ。複数の GifSprite インスタンス間で共有可能。 |
autoPlay | boolean | true | 構築時に直ちに再生を開始します。false の場合、gif.play() を呼び出して開始する必要があります。 |
loop | boolean | true | 最後のフレームに達したときにアニメーションを繰り返します。false の場合、スプライトは最終フレームで停止し、onComplete を発火します。 |
animationSpeed | number | 1 | GIF のネイティブフレームタイミングの乗数。2 は 2 倍速、0.5 は半分の速度で実行されます。 |
autoUpdate | boolean | true | Ticker.shared への再生を接続します。false に設定して、gif.update(ticker) 経由で更新を自分で駆動します。 |
fps | number | 30 | フレームごとの遅延を指定しない GIF のフォールバックフレームレート。 |
onComplete | () => void | null | null | 非ループアニメーションが最後のフレームに達したときに呼び出されます。 |
onLoop | () => void | null | null | ループアニメーションがラップアラウンドするたびに呼び出されます。 |
onFrameChange | (frame: number) => void | null | null | 表示されるフレームインデックスが変わるたびに呼び出されます。 |
scaleMode | SCALE_MODE | 'linear' | v8.13.0 以降非推奨。代わりに Assets.load(..., { data: { scaleMode } }) 経由で scaleMode を渡してください。 |
コンストラクタは単独の引数として裸の GifSource も受け入れることができます (new GifSprite(source))。これは上記のデフォルト値を使用した new GifSprite({ source }) の短縮形です。
コアパターン
セットアップとサイドエフェクトインポート
import "pixi.js/gif";
import { Assets } from "pixi.js";
import { GifSprite } from "pixi.js/gif";
const source = await Assets.load("animation.gif");
const gif = new GifSprite({ source });
pixi.js/gif は extensions.add(GifAsset) を呼び出し、.gif をアセットローダーに登録します。これなしでは、Assets.load は GIF ファイルを認識しません。GifSprite と GifSource は pixi.js/gif からエクスポートされており、pixi.js からではありません。
pixi.js/gif から名前付きエクスポートをインポートすると、サイドエフェクトもトリガーされるため、そのパスからインポートしない場合、単なる import 'pixi.js/gif' のみが必要です。
再生制御
const gif = new GifSprite({ source });
gif.play();
gif.stop();
gif.currentFrame = 5;
gif.animationSpeed = 2;
gif.animationSpeed = 0.5;
gif.playing; // 読み取り専用
gif.progress; // 0-1 再生位置
gif.totalFrames; // フレーム数
gif.duration; // ミリ秒単位の総時間
autoPlay: true (デフォルト) は直ちに再生を開始します。loop: true (デフォルト) は繰り返します。animationSpeed は GIF のネイティブフレームタイミングの乗数です。currentFrame はゼロベースです。
ロードオプション
const source = await Assets.load({
src: "animation.gif",
data: {
fps: 12,
scaleMode: "nearest",
resolution: 2,
},
});
const fromDataUri = await Assets.load("data:image/gif;base64,R0lGODlh...");
data 内のオプションは GifSource.from に渡されます。fps は、タイミングを指定しない GIF のフォールバックフレーム遅延を設定します。scaleMode と resolution は、各フレーム用に作成されるキャンバステクスチャを制御します。ローダーは .gif ファイル拡張子と data:image/gif URI の両方に対応しています。
コールバック
const gif = new GifSprite({
source,
loop: false,
onComplete: () => console.log("animation finished"),
onLoop: () => console.log("loop completed"),
onFrameChange: (frame) => console.log("now on frame", frame),
});
onCompleteは非ループアニメーションが最後のフレームに達したときに発火します。onLoopはループアニメーションがラップアラウンドするたびに発火します。onFrameChangeは表示されるフレームが変わるたびに発火します。
手動更新モード
const gif = new GifSprite({ source, autoUpdate: false });
app.ticker.add((ticker) => {
gif.update(ticker);
});
autoUpdate: false は Ticker.shared から切断されます。gif.update(ticker) を自分で呼び出し、任意の Ticker インスタンスを渡します。アニメーションがプライベートティッカー (例:ポーズ対応のゲームティッカー) によって駆動されるべき場合に有用です。
ソースデータの共有とクローン
const source = await Assets.load("animation.gif");
const gif1 = new GifSprite({ source, autoPlay: true });
const gif2 = new GifSprite({ source, autoPlay: false });
const gif3 = gif1.clone();
gif3.animationSpeed = 0.5;
GifSource は複数の GifSprite インスタンス間で共有できます。各スプライトは独立した再生状態を持ちます。clone() はすべての再生設定をコピーして、独立したインスタンスを作成します。
よくある間違い
[HIGH] pixi.js/gif をインポートしない
間違い:
import { Assets } from "pixi.js";
const gif = await Assets.load("animation.gif");
正解:
import "pixi.js/gif";
import { Assets } from "pixi.js";
const source = await Assets.load("animation.gif");
GIF ローダー拡張は、ロード前に登録する必要があります。サイドエフェクトインポートなしでは、ローダーは .gif ファイルを認識せず、ロードが失敗するか、生データが返されます。
[MEDIUM] Assets.load が Texture を返すと期待する
間違い:
const texture = await Assets.load("animation.gif");
const sprite = new Sprite(texture);
正解:
const source = await Assets.load("animation.gif");
const gif = new GifSprite({ source });
GIF での Assets.load はフレームテクスチャとタイミングデータを含む GifSource を返します。ソースを GifSprite に渡します。単一の静止フレームの場合は、source.textures[0] を読み取ります。
[MEDIUM] GIF メモリが破棄時にリリースされない
間違い:
gif.destroy();
// GifSource とフレームテクスチャはメモリに残る
正解:
gif.destroy(true);
// または
await Assets.unload("animation.gif");
GIF フレームはデコード済みピクセルデータを個別のキャンバステクスチャとして保持しています。gif.destroy() (または destroy(false)) はスプライトを破棄しますが、GifSource はそのままです。true を渡してソースも破棄します。共有ソースの場合、最後のコンシューマーが完了したときのみ破棄するか、Assets.unload を呼び出してアセットキャッシュに処理を任せます。
[LOW] GifSprite 内に子要素をネストしない
GifSprite は Sprite を拡張し、allowChildren = false を設定します。これはリーフです。GIF を他のディスプレイオブジェクトとグループ化するには、すべてを plain な Container でラップしてください:
const group = new Container();
group.addChild(gif, label);
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を通じてオンチェーン取引とデータ照会を実現します。