pixijs-scene-text
PixiJS v8 でテキストを描画する際に使用するスキル。キャンバス品質のスタイル付きラベルを実現する `Text`、グリフアトラスによるフレーム毎の軽量更新に適した `BitmapText`、SVG 経由で HTML/CSS マークアップを扱う `HTMLText`、文字単位のアニメーションに対応する `SplitText` / `SplitBitmapText`、および `TextStyle`・`tagStyles`・各種コンストラクタオプションを網羅する。`TextStyle`・`BitmapFont.install`・`wordWrap`・`fontFamily` などのキーワードが登場する場面でトリガーされる。
description の原文を見る
Use this skill when rendering text in PixiJS v8. Covers Text for canvas-quality styled labels, BitmapText for cheap per-frame updates via glyph atlas, HTMLText for HTML/CSS markup via SVG, SplitText and SplitBitmapText for per-character animation, TextStyle, tagStyles, constructor options, TextOptions, HTMLTextOptions, BitmapText, SplitTextOptions, SplitBitmapTextOptions. Triggers on: Text, BitmapText, HTMLText, SplitText, SplitBitmapText, TextStyle, HTMLTextStyle, BitmapFont.install, tagStyles, fontFamily, wordWrap.
SKILL.md 本文
PixiJSには5つのテキスト レンダリング クラスがあり、スタイリング、パフォーマンス、アニメーション間のさまざまなトレードオフをカバーしています。TextはフルCSSスタイル互換性のためにキャンバスにレンダリングします。BitmapTextは事前生成されたアトラスから読み込んで低コストの更新を実現します。HTMLTextはリッチマークアップのためSVGの<foreignObject>経由でHTMLフラグメントをレンダリングします。SplitTextとSplitBitmapTextは最初の2つのクラスをラップし、アニメーション用の文字ごと、単語ごと、行ごとのコンテナを公開します。
pixijs-scene-core-conceptsに精通していることを前提としています。すべてのテキスト クラスはリーフ ノードです。子を持つことはできません。複数のテキスト インスタンスをContainerでラップして、グループ化できます。
クイックスタート
const text = new Text({
text: "Hello PixiJS",
style: {
fontFamily: "Arial",
fontSize: 36,
fill: 0xffffff,
stroke: { color: 0x4a1850, width: 5 },
dropShadow: { color: 0x000000, blur: 4, distance: 6 },
},
});
text.anchor.set(0.5);
text.x = app.screen.width / 2;
text.y = 40;
app.stage.addChild(text);
すべてのテキスト クラスはオプション オブジェクト コンストラクタを使用します。v7の位置指定形式(string, style)はサポートされていません。
関連スキル: pixijs-scene-core-concepts(リーフ、トランスフォーム), pixijs-assets(フォント読み込み), pixijs-performance(BitmapTextのトレードオフ), pixijs-color(FillInput塗りつぶし/ストロック用), pixijs-scene-graphics(グラデーションとパターンをFillInput経由で再利用)。
バリエーション
| バリエーション | 使用場面 | トレードオフ | リファレンス |
|---|---|---|---|
Text | 高品質な静的またはめったに更新しないラベル | 更新が高コスト(キャンバス再描画 + GPUアップロード) | references/text.md |
BitmapText | スコア、タイマー、ゲームプレイラベル、毎フレーム変わる要素 | スタイリング制限、固定グリフアトラス、クリスプなスケーリングにはMSDFが必須 | references/bitmap-text.md |
HTMLText | リッチなフォーマットテキスト、混合スタイル、実HTMLタグ | 非同期レンダリング(1フレームの遅延)、Textと同等の更新コスト | references/html-text.md |
SplitText | リッチなスタイリングを含む文字ごとのアニメーション | 各文字が完全なText、長い文字列には高コスト | references/split-text.md |
SplitBitmapText | 長い文字列または動的コンテンツの文字ごとのアニメーション | BitmapTextの制限を継承(グリフアトラス、MSDF非依存のクリスプさなし) | references/split-bitmap-text.md |
使い分けガイド
- 「スタイル付きの静的ラベルが必要」 →
Text。タイトル、メニュー、ダイアログ、エラーメッセージ用です。references/text.mdを参照してください。 - 「毎フレーム更新されるスコアまたはタイマーが必要」 →
BitmapText。更新はクワッドの位置変更のみで、キャンバス再描画なし。references/bitmap-text.mdを参照してください。 - 「
<b>、<i>、<br>を含む混合フォーマットが必要」 →HTMLText。SVG経由の実HTMLおよびCSSレンダリング。references/html-text.mdを参照してください。 - 「
<red>Warning:</red>のようなインライン色付きタグが必要」 →tagStylesを使ったTextまたはHTMLText。どちらもサポートしています。 - 「個々の文字をアニメーションさせたい」 → 短い文字列には
SplitText、長い文字列または多くのインスタンスにはSplitBitmapText。references/split-text.md/references/split-bitmap-text.mdを参照してください。 - 「CJK / アラビア語 / 絵文字の多いテキストが必要」 →
TextまたはHTMLText。BitmapTextはグリフセットが単一アトラスには大きすぎるため失敗します。 - 「カスタムフォントが必要」 → まず
Assets.load({ src: 'font.woff2', data: { family: 'MyFont' } })で読み込んでから、style.fontFamily: 'MyFont'を設定します。TextとHTMLTextで機能します。
更新コスト比較
| 更新トリガー | Text | BitmapText | HTMLText | SplitText | SplitBitmapText |
|---|---|---|---|---|---|
.textの変更 | 高 | 非常に低 | 高 | 非常に高(N個のテキスト再レンダリング) | 低(N個のクワッド位置変更) |
.styleの変更 | 高 | 中 | 高 | 非常に高 | 中 |
移動(.x, .y) | 無料 | 無料 | 無料 | 無料 | 無料 |
| 回転 / スケーリング | 無料 | 無料 | 無料 | 無料 | 無料 |
「無料」= 通常のContainerトランスフォームコスト。「高」= 新しいキャンバス描画 + GPUアップロード。「非常に低」= クワッド位置変更のみ。毎フレーム変わるテキストの更新は、BitmapTextまたはSplitBitmapTextでのみ行います。
クイックコンセプト
- オプション オブジェクト コンストラクタ。 v8のすべてのテキスト クラスは
new Text({ text, style, ... })を使用します。v7の(string, style)形式は削除されました。 tagStyles。TextとHTMLTextはstyle.tagStyles経由のタグごとのスタイリングをサポートします。タグはtagStylesがエントリを持つ場合にのみ解析されます。そうでない場合、<は文字通りに扱われます。BitmapFont.install。BitmapTextを作成する前にアトラスを事前生成します。installなしでは、新しいfontFamilyで初めてBitmapTextを作成するとアトラスが遅延生成されます。- MSDFフォント。 マルチチャネル符号付き距離フィールド フォントは任意のサイズで鮮明に保たれます。外部ツール(例:msdf-bmfont)で生成し、
Assets.load('font.fnt')で読み込みます。カスタムビルドではimport 'pixi.js/text-bitmap'が必須です。
よくある間違い
[高] 毎フレームText.textを更新する
間違い:
app.ticker.add(() => {
scoreText.text = `Score: ${score}`;
});
正解:
const scoreText = new BitmapText({ text: "Score: 0", style });
app.ticker.add(() => {
scoreText.text = `Score: ${score}`;
});
すべてのText更新は文字列全体を再ラスタライズします。毎フレーム変わる値にはBitmapTextを使用してください。
[高] 位置指定コンストラクタ引数
間違い:
const text = new Text("Hello", { fontSize: 24 });
正解:
const text = new Text({ text: "Hello", style: { fontSize: 24 } });
v8は(string, style)形式を削除しました。すべてのテキスト クラスはオプション オブジェクトを使用します。
[高] カスタムビルドでpixi.js/text-bitmapをインポートしていない
skipExtensionImports: trueまたはアグレッシブなツリーシェーキングの下では、import 'pixi.js/text-bitmap'を追加しない限り、Assets.load('font.fnt')は暗黙的に生データを返します。標準のimport { ... } from 'pixi.js'バンドルは拡張機能を含めています。
[中] テキスト インスタンスに子を追加する
すべてのテキスト クラスはallowChildren = falseを設定します。テキストを他のコンテンツとグループ化するにはContainerでラップしてください。
APIリファレンス
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- pixijs
- リポジトリ
- pixijs/pixijs-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/pixijs/pixijs-skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。