next2d-development-mcp 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3539 +0,0 @@
1
- # Next2D Player - APIリファレンス
2
-
3
- ## 目次
4
-
5
- 1. [概要](#next2d-player)
6
- 2. [DisplayObject](#displayobject)
7
- 3. [イベントシステム](#イベントシステム)
8
- 4. [MovieClip](#movieclip)
9
- 5. [Shape](#shape)
10
- 6. [サウンド](#サウンド)
11
- 7. [Sprite](#sprite)
12
- 8. [TextField](#textfield)
13
- 9. [Tweenアニメーション](#tweenアニメーション)
14
- 10. [Video](#video)
15
- 11. [フィルター](#フィルター)
16
-
17
- ---
18
- # Next2D Player
19
-
20
- Next2D Playerは、WebGL/WebGPUを用いた高速2Dレンダリングエンジンです。Flash Playerのような機能をWeb上で実現し、ベクター描画、Tweenアニメーション、テキスト、音声、動画など、さまざまな要素をサポートしています。
21
-
22
- ## 主な特徴
23
-
24
- - **高速レンダリング**: WebGL/WebGPUを活用した高速2D描画
25
- - **マルチプラットフォーム**: デスクトップからモバイルまで対応
26
- - **豊富なフィルター**: Blur、DropShadow、Glow、Bevelなど多数のフィルターをサポート
27
-
28
- ## レンダリングパイプライン
29
-
30
- Next2D Playerの高速レンダリングを実現するパイプラインの全体像です。
31
-
32
- ```mermaid
33
- flowchart TB
34
- %% Main Drawing Flow Chart
35
- subgraph MainFlow["描画フローチャート - メインレンダリングパイプライン"]
36
- direction TB
37
-
38
- subgraph Inputs["表示オブジェクト"]
39
- Shape["Shape<br/>(Bitmap/Vector)"]
40
- TextField["TextField<br/>(canvas2d)"]
41
- Video["Video Element"]
42
- end
43
-
44
- Shape --> MaskCheck
45
- TextField --> MaskCheck
46
- Video --> MaskCheck
47
-
48
- MaskCheck{"マスク<br/>レンダリング?"}
49
-
50
- MaskCheck -->|YES| DirectRender["直接レンダリング"]
51
- DirectRender -->|drawArrays| FinalRender
52
-
53
- MaskCheck -->|NO| CacheCheck1{"キャッシュ<br/>あり?"}
54
-
55
- CacheCheck1 -->|NO| TextureAtlas["テクスチャアトラス<br/>(二分木パッキング)"]
56
- TextureAtlas --> Coordinates
57
-
58
- CacheCheck1 -->|YES| Coordinates["座標データベース<br/>(x, y, w, h)"]
59
-
60
- Coordinates --> FilterBlendCheck{"フィルター or<br/>ブレンド?"}
61
-
62
- FilterBlendCheck -->|NO| MainArrays
63
- FilterBlendCheck -->|YES| NeedCache{"キャッシュ<br/>あり?"}
64
-
65
- NeedCache -->|NO| CacheRender["キャッシュにレンダリング"]
66
- CacheRender --> TextureCache
67
- NeedCache -->|YES| TextureCache["テクスチャキャッシュ"]
68
-
69
- TextureCache -->|drawArrays| FinalRender
70
-
71
- MainArrays["インスタンス配列<br/>━━━━━━━━━━━━━━━<br/>matrix<br/>colorTransform<br/>Coordinates<br/>━━━━━━━━━━━━━━━<br/><b>バッチレンダリング</b>"]
72
-
73
- MainArrays -->|drawArraysInstanced<br/><b>複数オブジェクトを1回で描画</b>| FinalRender["最終レンダリング"]
74
-
75
- FinalRender -->|60fps| MainFramebuffer["メインフレームバッファ<br/>(ディスプレイ)"]
76
- end
77
-
78
- %% Branch Flow for Filter/Blend/Mask
79
- subgraph BranchFlow["フィルター/ブレンド/マスク - 分岐処理"]
80
- direction TB
81
-
82
- subgraph FilterInputs["表示オブジェクト"]
83
- Shape2["Shape<br/>(Bitmap/Vector)"]
84
- TextField2["TextField<br/>(canvas2d)"]
85
- Video2["Video Element"]
86
- end
87
-
88
- Shape2 --> CacheCheck2
89
- TextField2 --> CacheCheck2
90
- Video2 --> CacheCheck2
91
-
92
- CacheCheck2{"キャッシュ<br/>あり?"}
93
-
94
- CacheCheck2 -->|NO| EffectRender["エフェクトレンダリング"]
95
- CacheCheck2 -->|YES| BranchArrays
96
- EffectRender --> BranchArrays
97
-
98
- BranchArrays["インスタンス配列<br/>━━━━━━━━━━━━━━━<br/>matrix<br/>colorTransform<br/>Coordinates<br/>━━━━━━━━━━━━━━━<br/><b>バッチレンダリング</b>"]
99
-
100
- BranchArrays -->|drawArraysInstanced<br/><b>複数オブジェクトを1回で描画</b>| BranchRender["エフェクト結果"]
101
-
102
- BranchRender -->|filter/blend| TextureCache
103
- end
104
-
105
- %% Connections between flows
106
- FilterBlendCheck -.->|"分岐フローを<br/>トリガー"| BranchFlow
107
- BranchArrays -.->|"レンダリング情報<br/>(座標)"| MainArrays
108
- ```
109
-
110
- ### パイプラインの特徴
111
-
112
- - **バッチレンダリング**: 複数のオブジェクトを1回のGPUコールで描画
113
- - **テクスチャキャッシュ**: フィルターやブレンド効果を効率的に処理
114
- - **二分木パッキング**: テクスチャアトラスで最適なメモリ使用
115
- - **60fps描画**: 高フレームレートでのスムーズなアニメーション
116
-
117
- ## DisplayListアーキテクチャ
118
-
119
- Next2D Playerは、Flash Playerと同様のDisplayListアーキテクチャを採用しています。
120
-
121
- ### 主要クラス階層
122
-
123
- ```
124
- DisplayObject (基底クラス)
125
- ├── InteractiveObject
126
- │ ├── DisplayObjectContainer
127
- │ │ ├── Sprite
128
- │ │ ├── MovieClip
129
- │ │ └── Stage
130
- │ └── TextField
131
- ├── Shape
132
- ├── Video
133
- └── Bitmap
134
- ```
135
-
136
- ### DisplayObjectContainer
137
-
138
- 子オブジェクトを持つことができるコンテナクラス:
139
-
140
- - `addChild(child)`: 子要素を最前面に追加
141
- - `addChildAt(child, index)`: 指定インデックスに子要素を追加
142
- - `removeChild(child)`: 子要素を削除
143
- - `getChildAt(index)`: インデックスから子要素を取得
144
- - `getChildByName(name)`: 名前から子要素を取得
145
-
146
- ### MovieClip
147
-
148
- タイムラインアニメーションを持つDisplayObject:
149
-
150
- - `play()`: タイムラインを再生
151
- - `stop()`: タイムラインを停止
152
- - `gotoAndPlay(frame)`: 指定フレームに移動して再生
153
- - `gotoAndStop(frame)`: 指定フレームに移動して停止
154
- - `currentFrame`: 現在のフレーム番号
155
- - `totalFrames`: 総フレーム数
156
-
157
- ## 基本的な使い方
158
-
159
- ```typescript
160
- const { MovieClip } = next2d.display;
161
- const { DropShadowFilter } = next2d.filters;
162
-
163
- // ルートMovieClipを作成
164
- const root = await next2d.createRootMovieClip(800, 600, 60, {
165
- tagId: "container",
166
- bgColor: "#ffffff"
167
- });
168
-
169
- // MovieClipの作成
170
- const mc = new MovieClip();
171
- root.addChild(mc);
172
-
173
- // 位置とサイズの設定
174
- mc.x = 100;
175
- mc.y = 100;
176
- mc.scaleX = 2;
177
- mc.scaleY = 2;
178
- mc.rotation = 45;
179
-
180
- // フィルターの適用
181
- mc.filters = [
182
- new DropShadowFilter(4, 45, 0x000000, 0.5)
183
- ];
184
- ```
185
-
186
- ## JSONデータの読み込み
187
-
188
- Open Animation Toolで作成したJSONファイルを読み込んで描画:
189
-
190
- ```typescript
191
- const { Loader } = next2d.display;
192
- const { URLRequest } = next2d.net;
193
-
194
- const loader = new Loader();
195
- await loader.load(new URLRequest("animation.json"));
196
-
197
- // 読み込み完了後、直接contentにアクセス
198
- const mc = loader.content;
199
- stage.addChild(mc);
200
- ```
201
-
202
- ## 関連ドキュメント
203
-
204
- ### 表示オブジェクト
205
- - [DisplayObject](/ja/reference/player/display-object) - 全ての表示オブジェクトの基底クラス
206
- - [MovieClip](/ja/reference/player/movie-clip) - タイムラインアニメーション
207
- - [Sprite](/ja/reference/player/sprite) - グラフィックス描画とインタラクション
208
- - [Shape](/ja/reference/player/shape) - 軽量なベクター描画
209
- - [TextField](/ja/reference/player/text-field) - テキスト表示と入力
210
- - [Video](/ja/reference/player/video) - 動画再生
211
-
212
- ### システム
213
- - [イベントシステム](/ja/reference/player/events) - マウス、キーボード、タッチイベント
214
- - [フィルター](/ja/reference/player/filters) - Blur、DropShadow、Glowなど
215
- - [サウンド](/ja/reference/player/sound) - 音声再生とサウンドエフェクト
216
- - [Tweenアニメーション](/ja/reference/player/tween) - プログラムによるアニメーション
217
-
218
- ---
219
-
220
- # DisplayObject
221
-
222
- DisplayObjectは、Next2D Playerにおける全ての表示オブジェクトの基底クラスです。
223
-
224
- ## プロパティ (Properties)
225
-
226
- ### 読み取り専用プロパティ
227
-
228
- | プロパティ | 型 | 説明 |
229
- |-----------|------|------|
230
- | `instanceId` | number | DisplayObjectのユニークなインスタンスID |
231
- | `isSprite` | boolean | Spriteの機能を所持しているかを返却 |
232
- | `isInteractive` | boolean | InteractiveObjectの機能を所持しているかを返却 |
233
- | `isContainerEnabled` | boolean | コンテナの機能を所持しているかを返却 |
234
- | `isTimelineEnabled` | boolean | MovieClipの機能を所持しているかを返却 |
235
- | `isShape` | boolean | Shapeの機能を所持しているかを返却 |
236
- | `isVideo` | boolean | Videoの機能を所持しているかを返却 |
237
- | `isText` | boolean | Textの機能を所持しているかを返却 |
238
- | `concatenatedMatrix` | Matrix | ルートレベルまでの結合された変換行列 |
239
- | `dropTarget` | DisplayObject \| null | スプライトのドラッグ先またはドロップされた先の表示オブジェクト |
240
- | `loaderInfo` | LoaderInfo \| null | この表示オブジェクトが属するファイルの読み込み情報 |
241
- | `mouseX` | number | 対象のDisplayObjectの基準点からのマウスのX座標(ピクセル) |
242
- | `mouseY` | number | 対象のDisplayObjectの基準点からのマウスのY座標(ピクセル) |
243
- | `root` | MovieClip \| Sprite \| null | DisplayObjectのルートであるDisplayObjectContainer |
244
- | `namespace` | string | クラスの空間名(例: `"next2d.display.Sprite"`)を返却。クラス判定に使用する(詳細は[クラス判定](#クラス判定namespace)を参照) |
245
-
246
- ### 読み書きプロパティ
247
-
248
- | プロパティ | 型 | 説明 |
249
- |-----------|------|------|
250
- | `name` | string | 名前。getChildByName()で使用される(デフォルト: "") |
251
- | `startFrame` | number | 開始フレーム(デフォルト: 1) |
252
- | `endFrame` | number | 終了フレーム(デフォルト: 0) |
253
- | `isMask` | boolean | マスクとしてDisplayObjectにセットされているかを示す(デフォルト: false) |
254
- | `parent` | Sprite \| MovieClip \| null | このDisplayObjectの親のDisplayObjectContainer |
255
- | `alpha` | number | アルファ透明度値(0.0~1.0、デフォルト: 1.0) |
256
- | `blendMode` | string | 使用するブレンドモード(デフォルト: BlendMode.NORMAL) |
257
- | `filters` | Array \| null | 表示オブジェクトに関連付けられている各フィルターオブジェクトの配列 |
258
- | `height` | number | 表示オブジェクトの高さ(ピクセル単位) |
259
- | `width` | number | 表示オブジェクトの幅(ピクセル単位) |
260
- | `colorTransform` | ColorTransform | 表示オブジェクトのColorTransform |
261
- | `matrix` | Matrix | 表示オブジェクトのMatrix |
262
- | `rotation` | number | DisplayObjectインスタンスの回転角度(度単位) |
263
- | `scale9Grid` | Rectangle \| null | 現在有効な拡大/縮小グリッド |
264
- | `scaleX` | number | 基準点から適用されるオブジェクトの水平スケール値 |
265
- | `scaleY` | number | 基準点から適用されるオブジェクトの垂直スケール値 |
266
- | `visible` | boolean | 表示オブジェクトが可視かどうか(デフォルト: true) |
267
- | `x` | number | 親DisplayObjectContainerのローカル座標を基準にしたX座標 |
268
- | `y` | number | 親DisplayObjectContainerのローカル座標を基準にしたY座標 |
269
- | `cacheAsBitmap` | Matrix \| null | ベクター描画やコンテナをビットマップとしてキャッシュするMatrix(nullで解除、Videoには適用不可) |
270
-
271
- ## メソッド (Methods)
272
-
273
- | メソッド | 戻り値 | 説明 |
274
- |---------|--------|------|
275
- | `getBounds(targetDisplayObject)` | Rectangle | 指定したDisplayObjectの座標系を基準にして、表示オブジェクトの領域を定義する矩形を返す |
276
- | `globalToLocal(point)` | Point | pointオブジェクトをステージ(グローバル)座標から表示オブジェクトの(ローカル)座標に変換 |
277
- | `localToGlobal(point)` | Point | pointオブジェクトを表示オブジェクトの(ローカル)座標からステージ(グローバル)座標に変換 |
278
- | `hitTestObject(targetDisplayObject)` | boolean | DisplayObjectの描画範囲を評価して、重複または交差するかどうかを調べる |
279
- | `hitTestPoint(x, y, shapeFlag)` | boolean | 表示オブジェクトを評価して、x および y パラメーターで指定されたポイントと重複または交差するかどうかを調べる |
280
- | `getLocalVariable(key)` | any | クラスのローカル変数空間から値を取得 |
281
- | `setLocalVariable(key, value)` | void | クラスのローカル変数空間へ値を保存 |
282
- | `hasLocalVariable(key)` | boolean | クラスのローカル変数空間に値があるかどうかを判断 |
283
- | `deleteLocalVariable(key)` | void | クラスのローカル変数空間の値を削除 |
284
- | `getGlobalVariable(key)` | any | グローバル変数空間から値を取得 |
285
- | `setGlobalVariable(key, value)` | void | グローバル変数空間へ値を保存 |
286
- | `hasGlobalVariable(key)` | boolean | グローバル変数空間に値があるかどうかを判断 |
287
- | `deleteGlobalVariable(key)` | void | グローバル変数空間の値を削除 |
288
- | `clearGlobalVariable()` | void | グローバル変数空間の値を全てクリア |
289
- | `remove()` | void | 親子関係を解除 |
290
-
291
- ## ブレンドモード
292
-
293
- | 定数 | 説明 |
294
- |------|------|
295
- | `BlendMode.NORMAL` | 通常表示 |
296
- | `BlendMode.ADD` | 加算 |
297
- | `BlendMode.MULTIPLY` | 乗算 |
298
- | `BlendMode.SCREEN` | スクリーン |
299
- | `BlendMode.DARKEN` | 暗くする |
300
- | `BlendMode.LIGHTEN` | 明るくする |
301
- | `BlendMode.DIFFERENCE` | 差分 |
302
- | `BlendMode.OVERLAY` | オーバーレイ |
303
- | `BlendMode.HARDLIGHT` | ハードライト |
304
- | `BlendMode.INVERT` | 反転 |
305
- | `BlendMode.ALPHA` | アルファ |
306
- | `BlendMode.ERASE` | 消去 |
307
-
308
- ## 使用例
309
-
310
- ```typescript
311
- const { Sprite } = next2d.display;
312
- const { BlurFilter } = next2d.filters;
313
-
314
- const sprite = new Sprite();
315
-
316
- // 位置とサイズ
317
- sprite.x = 100;
318
- sprite.y = 200;
319
- sprite.scaleX = 1.5;
320
- sprite.scaleY = 1.5;
321
- sprite.rotation = 30;
322
-
323
- // 表示制御
324
- sprite.alpha = 0.8;
325
- sprite.visible = true;
326
- sprite.blendMode = "add";
327
-
328
- // フィルター
329
- sprite.filters = [
330
- new BlurFilter(4, 4)
331
- ];
332
-
333
- // ステージに追加
334
- stage.addChild(sprite);
335
- ```
336
-
337
- ### 座標変換の例
338
-
339
- ```typescript
340
- const { Point } = next2d.geom;
341
-
342
- // グローバル座標をローカル座標に変換
343
- const globalPoint = new Point(100, 100);
344
- const localPoint = displayObject.globalToLocal(globalPoint);
345
-
346
- // ローカル座標をグローバル座標に変換
347
- const localPos = new Point(0, 0);
348
- const globalPos = displayObject.localToGlobal(localPos);
349
- ```
350
-
351
- ### 衝突判定の例
352
-
353
- ```typescript
354
- // バウンディングボックスで判定
355
- const hit1 = displayObject.hitTestPoint(100, 100, false);
356
-
357
- // 実際の形状で判定
358
- const hit2 = displayObject.hitTestPoint(100, 100, true);
359
-
360
- // 他のDisplayObjectとの衝突判定
361
- if (obj1.hitTestObject(obj2)) {
362
- console.log("衝突しました");
363
- }
364
- ```
365
-
366
- ### 変数操作の例
367
-
368
- ```typescript
369
- // ローカル変数の操作
370
- displayObject.setLocalVariable("score", 100);
371
- const score = displayObject.getLocalVariable("score");
372
- if (displayObject.hasLocalVariable("score")) {
373
- displayObject.deleteLocalVariable("score");
374
- }
375
-
376
- // グローバル変数の操作
377
- displayObject.setGlobalVariable("gameState", "playing");
378
- const state = displayObject.getGlobalVariable("gameState");
379
- displayObject.clearGlobalVariable(); // 全てクリア
380
- ```
381
-
382
- ### cacheAsBitmapの例
383
-
384
- `cacheAsBitmap`はベクター描画やコンテナをビットマップとしてキャッシュし、2回目以降の描画でキャッシュを再利用することでパフォーマンスを向上させるプロパティです。
385
-
386
- **適用対象クラス:**
387
- - `Shape` — ベクター描画のキャッシュ
388
- - `TextField` — テキスト描画のキャッシュ
389
- - `Sprite` — コンテナとその子要素をまとめてキャッシュ
390
- - `MovieClip` — コンテナとその子要素をまとめてキャッシュ
391
-
392
- > ⚠️ `Video`には適用できません。Videoは画像サイズが固定されているため、キャッシュの効果がありません。
393
-
394
- **Matrixの制限:**
395
- Matrixにはスケール値(a, d)のみ設定できます。回転(b, c)や移動(tx, ty)は無視されます。
396
-
397
- ```typescript
398
- // ✅ 正しい使い方(スケールのみ設定)
399
- shape.cacheAsBitmap = new Matrix(1, 0, 0, 1, 0, 0); // 等倍
400
- shape.cacheAsBitmap = new Matrix(2, 0, 0, 2, 0, 0); // 2倍品質
401
-
402
- // ❌ 回転・移動の値は無視される
403
- shape.cacheAsBitmap = new Matrix(1, 0.5, 0.5, 1, 100, 200); // b, c, tx, tyは無視
404
- ```
405
-
406
- **利用用途の例:**
407
-
408
- 1. **速度の速いアニメーション** — 高速で動くオブジェクトは視認性が低いため、キャッシュによる画質低下が目立たず、パフォーマンス向上が期待できます
409
- 2. **静的な背景やUI部品** — 変化しないUI要素(パネル、装飾、アイコンなど)をキャッシュすることで毎フレームの再描画コストを削減できます
410
- 3. **複雑なベクター描画** — パスが多い複雑なShapeをキャッシュすることで描画負荷を大幅に軽減できます
411
-
412
- ```typescript
413
- const { Shape, Sprite } = next2d.display;
414
- const { Matrix } = next2d.geom;
415
-
416
- // 等倍でキャッシュ(1.0基準 = displayObjectのscaleX/scaleYに対する等倍)
417
- const shape = new Shape();
418
- shape.graphics.beginFill(0xFF0000).drawCircle(50, 50, 40).endFill();
419
- shape.cacheAsBitmap = new Matrix(1, 0, 0, 1, 0, 0);
420
-
421
- // 2倍の解像度でキャッシュ(自身のスケールの2倍品質)
422
- const hqShape = new Shape();
423
- hqShape.graphics.beginFill(0x00FF00).drawRect(0, 0, 100, 80).endFill();
424
- hqShape.cacheAsBitmap = new Matrix(2, 0, 0, 2, 0, 0);
425
-
426
- // scaleX/scaleYが反映される(キャッシュ品質 = Matrix × 自身のスケール × stageスケール)
427
- shape.scaleX = 2; // キャッシュ品質: 1 × 2 × stageScale
428
- shape.scaleY = 2;
429
-
430
- // 親のスケールはキャッシュ品質に影響しない(描画位置には反映される)
431
- const container = new Sprite();
432
- container.scaleX = 3;
433
- container.scaleY = 3;
434
- container.addChild(shape);
435
-
436
- // ヒットテスト・幅・高さはベクター基準
437
- const bounds = shape.getBounds(shape); // ベクターの境界を返す
438
-
439
- // キャッシュを解除
440
- shape.cacheAsBitmap = null;
441
- ```
442
-
443
- ### DisplayObjectContainerでのcacheAsBitmap
444
-
445
- `Sprite`や`MovieClip`などの`DisplayObjectContainer`に対しても`cacheAsBitmap`を設定できます。
446
- コンテナの全子要素をまとめてテクスチャにキャッシュし、以降のフレームではキャッシュされたテクスチャを再利用します。
447
-
448
- ```typescript
449
- const { Shape, Sprite, MovieClip } = next2d.display;
450
- const { Matrix } = next2d.geom;
451
-
452
- // 複数の子要素を持つSprite
453
- const sprite = new Sprite();
454
- const rect = new Shape();
455
- rect.graphics.beginFill(0xFF0000).drawRect(0, 0, 100, 80).endFill();
456
- sprite.addChild(rect);
457
- const circle = new Shape();
458
- circle.graphics.beginFill(0x00FF00).drawCircle(50, 40, 30).endFill();
459
- sprite.addChild(circle);
460
-
461
- // コンテナ全体をビットマップキャッシュ
462
- sprite.cacheAsBitmap = new Matrix(1, 0, 0, 1, 0, 0);
463
-
464
- // MovieClipにも同様に適用可能
465
- const mc = new MovieClip();
466
- mc.cacheAsBitmap = new Matrix(1, 0, 0, 1, 0, 0);
467
-
468
- // キャッシュを解除(次フレームから通常描画に戻る)
469
- sprite.cacheAsBitmap = null;
470
- ```
471
-
472
- **キャッシュの動作:**
473
- - 先祖や自身のスケールが変更されるとキャッシュが無効化され、次フレームで再生成されます
474
- - 位置(x, y)の変更ではキャッシュは維持され、描画位置のみ更新されます
475
- - スケールが頻繁に変化するアニメーション中はキャッシュが毎フレーム再生成されるため、アニメーション完了後の静的な状態で最も効果を発揮します
476
-
477
- **注意事項:**
478
- - **Matrixにはスケール値のみ設定可能**です(回転・移動は無視されます)
479
- - **Videoには適用できません**(固定サイズの画像データのため)
480
- - キャッシュ中は子要素の変更(追加・削除・プロパティ変更)が画面に反映されません
481
- - `stage.rendererScale`が変更されるとキャッシュが自動的に無効化されます
482
- - `filter`と`cacheAsBitmap`を同時に設定した場合、`cacheAsBitmap`が優先されます
483
-
484
- ## クラス判定(namespace)
485
-
486
- クラスの種類を判定する際に `constructor.name` を使用してはいけません。プロダクションビルドでは minify によってクラス名が短縮・変更されるため、開発環境では動作してもビルド後に判定が壊れます。
487
-
488
- 代わりに `namespace` プロパティを使用します。`namespace` はハードコードされた文字列(例: `"next2d.display.Stage"`)を返すため、minify の影響を受けません。インスタンスの getter と static getter の両方が用意されています。
489
-
490
- ```typescript
491
- const { Stage, Sprite } = next2d.display;
492
-
493
- // ❌ NG: minify でクラス名が変わるため、ビルド後に判定が壊れる
494
- if (displayObject.constructor.name === "Stage") { /* ... */ }
495
-
496
- // ✅ OK: インスタンスの namespace で判定
497
- if (displayObject.namespace === "next2d.display.Stage") { /* ... */ }
498
-
499
- // ✅ OK: static の namespace と比較するとタイポも防げる
500
- if (displayObject.namespace === Stage.namespace) { /* ... */ }
501
-
502
- // ✅ OK: Sprite かどうかの判定
503
- if (displayObject.namespace === Sprite.namespace) { /* ... */ }
504
-
505
- // ✅ OK: Stage 判定は isStage フラグも使用可能(Stage のみが持つ readonly プロパティ)
506
- if (displayObject.isStage) { /* ... */ }
507
- ```
508
-
509
- **namespace を持つ主なクラス:**
510
-
511
- | クラス | namespace の値 |
512
- |--------|----------------|
513
- | `Stage` | `"next2d.display.Stage"` |
514
- | `Sprite` | `"next2d.display.Sprite"` |
515
- | `MovieClip` | `"next2d.display.MovieClip"` |
516
- | `Shape` | `"next2d.display.Shape"` |
517
- | `Loader` | `"next2d.display.Loader"` |
518
- | `TextField` | `"next2d.display.TextField"` |
519
- | `Video` | `"next2d.media.Video"` |
520
-
521
- **補足:** 継承を含めた機能判定(「Sprite の機能を持っているか」など)には `isStage` / `isSprite` / `isShape` / `isText` / `isVideo` / `isContainerEnabled` / `isTimelineEnabled` の各フラグを使用します。`namespace` は完全一致のクラス判定に使用します。
522
-
523
- ## 関連項目
524
-
525
- - [MovieClip](/ja/reference/player/movie-clip)
526
- - [Sprite](/ja/reference/player/sprite)
527
-
528
- ---
529
-
530
- # イベントシステム
531
-
532
- Next2D Playerは、W3C DOMイベントモデルと同様の3フェーズイベントフロー機構を採用しています。
533
-
534
- ## EventDispatcher
535
-
536
- すべてのイベント発行可能なオブジェクトの基底クラスです。
537
-
538
- ### addEventListener(type, listener, useCapture, priority)
539
-
540
- イベントリスナーを登録します。
541
-
542
- ```typescript
543
- const { PointerEvent } = next2d.events;
544
-
545
- displayObject.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
546
- console.log("ポインターが押されました");
547
- });
548
-
549
- // キャプチャフェーズで受け取る
550
- displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
551
-
552
- // 優先度を指定
553
- displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, false, 10);
554
- ```
555
-
556
- ### removeEventListener(type, listener, useCapture)
557
-
558
- イベントリスナーを削除します。
559
-
560
- ```typescript
561
- displayObject.removeEventListener(PointerEvent.POINTER_DOWN, handler);
562
- ```
563
-
564
- ### removeAllEventListener(type, useCapture)
565
-
566
- 特定タイプのすべてのイベントリスナーを削除します。
567
-
568
- ```typescript
569
- displayObject.removeAllEventListener(PointerEvent.POINTER_DOWN);
570
- ```
571
-
572
- ### hasEventListener(type)
573
-
574
- 指定タイプのリスナーが登録されているか確認します。
575
-
576
- ```typescript
577
- if (displayObject.hasEventListener(PointerEvent.POINTER_DOWN)) {
578
- console.log("ポインターダウンリスナーが登録されています");
579
- }
580
- ```
581
-
582
- ### willTrigger(type)
583
-
584
- このオブジェクトまたは祖先がイベントタイプのリスナーを持つか確認します。
585
-
586
- ```typescript
587
- if (displayObject.willTrigger(PointerEvent.POINTER_DOWN)) {
588
- console.log("このオブジェクトまたは祖先にリスナーがあります");
589
- }
590
- ```
591
-
592
- ### dispatchEvent(event)
593
-
594
- イベントを発行します。
595
-
596
- ```typescript
597
- const { Event } = next2d.events;
598
-
599
- const event = new Event("customEvent");
600
- displayObject.dispatchEvent(event);
601
- ```
602
-
603
- ## Event クラス
604
-
605
- ### プロパティ
606
-
607
- | プロパティ | 型 | 説明 |
608
- |-----------|------|------|
609
- | `type` | String | イベントタイプ |
610
- | `target` | Object | イベント発行元 |
611
- | `currentTarget` | Object | 現在のリスナー登録先 |
612
- | `eventPhase` | Number | イベントフェーズ |
613
- | `bubbles` | Boolean | バブリングするか |
614
-
615
- ### メソッド
616
-
617
- | メソッド | 説明 |
618
- |----------|------|
619
- | `stopPropagation()` | 伝播を停止 |
620
- | `stopImmediatePropagation()` | 伝播を即座に停止 |
621
-
622
- ## イベント定数の使用
623
-
624
- イベントを `addEventListener` で登録する際は、文字列リテラルではなく必ず定数を使用する。
625
-
626
- ```typescript
627
- // NG: 文字列リテラル
628
- sprite.addEventListener("pointerup", handler);
629
-
630
- // OK: 定数を使用
631
- sprite.addEventListener(PointerEvent.POINTER_UP, handler);
632
- ```
633
-
634
- **理由:** 定数を使用することで、タイプミスの防止、IDEによる補完・型チェック、リファクタリング時の安全性が得られる。
635
-
636
- ### 全イベント定数一覧
637
-
638
- | クラス | 定数 | 文字列値 | 説明 |
639
- |--------|------|----------|------|
640
- | `PointerEvent` | `POINTER_DOWN` | `"pointerdown"` | ポインター押下 |
641
- | `PointerEvent` | `POINTER_UP` | `"pointerup"` | ポインター解放 |
642
- | `PointerEvent` | `POINTER_MOVE` | `"pointermove"` | ポインター移動 |
643
- | `PointerEvent` | `POINTER_OVER` | `"pointerover"` | ポインター進入 |
644
- | `PointerEvent` | `POINTER_OUT` | `"pointerout"` | ポインター退出 |
645
- | `PointerEvent` | `POINTER_LEAVE` | `"pointerleave"` | ポインター離脱 |
646
- | `PointerEvent` | `POINTER_CANCEL` | `"pointercancel"` | ポインターキャンセル |
647
- | `PointerEvent` | `DOUBLE_CLICK` | `"dblclick"` | ダブルクリック |
648
- | `KeyboardEvent` | `KEY_DOWN` | `"keydown"` | キー押下 |
649
- | `KeyboardEvent` | `KEY_UP` | `"keyup"` | キー解放 |
650
- | `FocusEvent` | `FOCUS_IN` | `"focusin"` | フォーカス取得 |
651
- | `FocusEvent` | `FOCUS_OUT` | `"focusout"` | フォーカス喪失 |
652
- | `WheelEvent` | `WHEEL` | `"wheel"` | ホイール操作 |
653
- | `VideoEvent` | `PLAY` | `"play"` | 再生リクエスト |
654
- | `VideoEvent` | `PLAYING` | `"playing"` | 再生開始 |
655
- | `VideoEvent` | `PAUSE` | `"pause"` | 一時停止 |
656
- | `VideoEvent` | `SEEK` | `"seek"` | シーク操作 |
657
- | `JobEvent` | `UPDATE` | `"update"` | プロパティ更新 |
658
- | `JobEvent` | `STOP` | `"stop"` | ジョブ停止 |
659
- | `Event` | `COMPLETE` | `"complete"` | 処理完了(Tween/Loader) |
660
- | `Event` | `ENTER_FRAME` | `"enterframe"` | 毎フレーム |
661
- | `Event` | `ADDED` | `"added"` | コンテナに追加 |
662
- | `Event` | `ADDED_TO_STAGE` | `"addedtostage"` | Stageに追加 |
663
- | `Event` | `REMOVED` | `"removed"` | コンテナから削除 |
664
- | `Event` | `REMOVED_FROM_STAGE` | `"removedfromstage"` | Stageから削除 |
665
- | `Event` | `IO_ERROR` | `"ioerror"` | IOエラー |
666
- | `Event` | `HTTP_STATUS` | `"httpstatus"` | HTTPステータス受信 |
667
-
668
- ### 使用例
669
-
670
- ```typescript
671
- import { PointerEvent, KeyboardEvent, Event } from "@next2d/events";
672
-
673
- // ポインターイベント
674
- button.addEventListener(PointerEvent.POINTER_DOWN, onPointerDown);
675
- button.addEventListener(PointerEvent.POINTER_UP, onPointerUp);
676
-
677
- // キーボードイベント
678
- stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
679
-
680
- // タイムラインイベント
681
- movieClip.addEventListener(Event.ENTER_FRAME, onEnterFrame);
682
- ```
683
-
684
- ### 定数がないイベント
685
-
686
- 一部のイベント(表示リスト、タイムライン、ロード関連など)は `Event` クラスの文字列リテラルを使用する。これらは定数として提供されていない。
687
-
688
- ```typescript
689
- import { Event } from "@next2d/events";
690
-
691
- // 文字列リテラルを使用(定数なし)
692
- sprite.addEventListener(Event.ADDED_TO_STAGE, onAdded);
693
- movieClip.addEventListener(Event.ENTER_FRAME, onFrame);
694
- ```
695
-
696
- ## 標準イベントタイプ
697
-
698
- ### 表示リスト関連
699
-
700
- | イベント | 説明 |
701
- |----------|------|
702
- | `added` | DisplayObjectContainerに追加された |
703
- | `addedToStage` | Stageに追加された |
704
- | `removed` | DisplayObjectContainerから削除された |
705
- | `removedFromStage` | Stageから削除された |
706
-
707
- ```typescript
708
- sprite.addEventListener("addedToStage", (event) => {
709
- console.log("ステージに追加されました");
710
- });
711
- ```
712
-
713
- ### タイムライン関連
714
-
715
- | イベント | 説明 |
716
- |----------|------|
717
- | `enterFrame` | 各フレームで発生 |
718
- | `frameConstructed` | フレーム構築完了 |
719
- | `exitFrame` | フレーム離脱時 |
720
-
721
- ```typescript
722
- movieClip.addEventListener("enterFrame", (event) => {
723
- // 毎フレーム実行される処理
724
- updatePosition();
725
- });
726
- ```
727
-
728
- ### ロード関連
729
-
730
- | イベント | 説明 |
731
- |----------|------|
732
- | `complete` | ロード完了 |
733
- | `progress` | ロード進捗 |
734
- | `ioError` | IOエラー |
735
- | `httpStatus` | HTTPステータス受信 |
736
-
737
- ```typescript
738
- const { Loader } = next2d.display;
739
- const { URLRequest } = next2d.net;
740
-
741
- const loader = new Loader();
742
-
743
- // async/awaitを使用した読み込み
744
- await loader.load(new URLRequest("animation.json"));
745
- const content = loader.content;
746
- stage.addChild(content);
747
-
748
- // プログレスイベントを使用する場合
749
- loader.contentLoaderInfo.addEventListener("progress", (event) => {
750
- const percent = (event.bytesLoaded / event.bytesTotal) * 100;
751
- console.log(`${percent}% ロード完了`);
752
- });
753
- ```
754
-
755
- ## ポインターイベント
756
-
757
- PointerEventはマウス、ペン、タッチなどのポインターデバイスの操作を統一的に処理します。
758
-
759
- | イベント | 定数 | 説明 |
760
- |----------|------|------|
761
- | `pointerDown` | `PointerEvent.POINTER_DOWN` | ボタンの押下開始 |
762
- | `pointerUp` | `PointerEvent.POINTER_UP` | ボタンの解放 |
763
- | `pointerMove` | `PointerEvent.POINTER_MOVE` | ポインター座標の変化 |
764
- | `pointerOver` | `PointerEvent.POINTER_OVER` | ポインターがヒットテスト境界に入った |
765
- | `pointerOut` | `PointerEvent.POINTER_OUT` | ポインターがヒットテスト境界を出た |
766
- | `pointerLeave` | `PointerEvent.POINTER_LEAVE` | ポインターが要素領域を離れた |
767
- | `pointerCancel` | `PointerEvent.POINTER_CANCEL` | ポインター操作がキャンセルされた |
768
- | `doubleClick` | `PointerEvent.DOUBLE_CLICK` | ダブルクリック/タップが発生 |
769
-
770
- ```typescript
771
- const { PointerEvent } = next2d.events;
772
-
773
- sprite.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
774
- console.log("ポインターダウン:", event.localX, event.localY);
775
- });
776
-
777
- sprite.addEventListener(PointerEvent.POINTER_MOVE, (event) => {
778
- console.log("ポインター移動:", event.stageX, event.stageY);
779
- });
780
-
781
- sprite.addEventListener(PointerEvent.DOUBLE_CLICK, (event) => {
782
- console.log("ダブルクリック");
783
- });
784
- ```
785
-
786
- ## キーボードイベント
787
-
788
- | イベント | 定数 | 説明 |
789
- |----------|------|------|
790
- | `keyDown` | `KeyboardEvent.KEY_DOWN` | キー押下 |
791
- | `keyUp` | `KeyboardEvent.KEY_UP` | キー解放 |
792
-
793
- ```typescript
794
- const { KeyboardEvent } = next2d.events;
795
-
796
- stage.addEventListener(KeyboardEvent.KEY_DOWN, (event) => {
797
- console.log("キーコード:", event.keyCode);
798
-
799
- switch (event.keyCode) {
800
- case 37: // 左矢印
801
- player.x -= 10;
802
- break;
803
- case 39: // 右矢印
804
- player.x += 10;
805
- break;
806
- }
807
- });
808
- ```
809
-
810
- ## フォーカスイベント
811
-
812
- | イベント | 定数 | 説明 |
813
- |----------|------|------|
814
- | `focusIn` | `FocusEvent.FOCUS_IN` | フォーカスを受け取った |
815
- | `focusOut` | `FocusEvent.FOCUS_OUT` | フォーカスを失った |
816
-
817
- ```typescript
818
- const { FocusEvent } = next2d.events;
819
-
820
- textField.addEventListener(FocusEvent.FOCUS_IN, (event) => {
821
- console.log("フォーカスを受け取りました");
822
- });
823
- ```
824
-
825
- ## ホイールイベント
826
-
827
- | イベント | 定数 | 説明 |
828
- |----------|------|------|
829
- | `wheel` | `WheelEvent.WHEEL` | マウスホイールが回転した |
830
-
831
- ```typescript
832
- const { WheelEvent } = next2d.events;
833
-
834
- stage.addEventListener(WheelEvent.WHEEL, (event) => {
835
- console.log("ホイール回転");
836
- });
837
- ```
838
-
839
- ## ビデオイベント
840
-
841
- | イベント | 定数 | 説明 |
842
- |----------|------|------|
843
- | `play` | `VideoEvent.PLAY` | 再生がリクエストされた |
844
- | `playing` | `VideoEvent.PLAYING` | 再生が開始された |
845
- | `pause` | `VideoEvent.PAUSE` | 一時停止された |
846
- | `seek` | `VideoEvent.SEEK` | シーク操作 |
847
-
848
- ## ジョブイベント
849
-
850
- Tweenアニメーション用のイベントです。
851
-
852
- | イベント | 定数 | 説明 |
853
- |----------|------|------|
854
- | `update` | `JobEvent.UPDATE` | プロパティが更新された |
855
- | `stop` | `JobEvent.STOP` | ジョブが停止した |
856
-
857
- ## カスタムイベント
858
-
859
- ```typescript
860
- const { Event } = next2d.events;
861
-
862
- // カスタムイベントの定義
863
- const customEvent = new Event("gameOver", true, true);
864
-
865
- // イベントの発行
866
- gameManager.dispatchEvent(customEvent);
867
-
868
- // イベントのリッスン
869
- gameManager.addEventListener("gameOver", (event) => {
870
- showGameOverScreen();
871
- });
872
- ```
873
-
874
- ## イベントの伝播
875
-
876
- イベントは3つのフェーズで伝播します:
877
-
878
- 1. **キャプチャフェーズ**: rootからtargetへ(eventPhase = 1)
879
- 2. **ターゲットフェーズ**: targetで処理(eventPhase = 2)
880
- 3. **バブリングフェーズ**: targetからrootへ(eventPhase = 3)
881
-
882
- ```typescript
883
- const { PointerEvent } = next2d.events;
884
-
885
- // キャプチャフェーズで処理
886
- parent.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
887
-
888
- // バブリングフェーズで処理(デフォルト)
889
- child.addEventListener(PointerEvent.POINTER_DOWN, handler, false);
890
- ```
891
-
892
- ## 関連項目
893
-
894
- - [DisplayObject](/ja/reference/player/display-object)
895
- - [MovieClip](/ja/reference/player/movie-clip)
896
-
897
- ---
898
-
899
- # MovieClip
900
-
901
- MovieClipは、タイムラインアニメーションを持つDisplayObjectContainerです。Open Animation Toolで作成したアニメーションはMovieClipとして再生されます。
902
-
903
- ## 継承関係
904
-
905
- ```mermaid
906
- classDiagram
907
- DisplayObject <|-- InteractiveObject
908
- InteractiveObject <|-- DisplayObjectContainer
909
- DisplayObjectContainer <|-- Sprite
910
- Sprite <|-- MovieClip
911
-
912
- class DisplayObject {
913
- +x: Number
914
- +y: Number
915
- +visible: Boolean
916
- }
917
- class MovieClip {
918
- +currentFrame: Number
919
- +totalFrames: Number
920
- +play()
921
- +stop()
922
- +gotoAndPlay()
923
- }
924
- ```
925
-
926
- ## プロパティ
927
-
928
- ### MovieClip固有のプロパティ
929
-
930
- | プロパティ | 型 | 説明 |
931
- |-----------|------|------|
932
- | `currentFrame` | `number` | MovieClipのタイムライン内の再生ヘッドが置かれているフレームの番号(1から開始、読み取り専用) |
933
- | `totalFrames` | `number` | MovieClipインスタンス内のフレーム総数(読み取り専用) |
934
- | `currentFrameLabel` | `FrameLabel \| null` | MovieClipインスタンスのタイムライン内の現在のフレームにあるラベル(読み取り専用) |
935
- | `currentLabels` | `FrameLabel[] \| null` | 現在のシーンのFrameLabelオブジェクトの配列を返す(読み取り専用) |
936
- | `isPlaying` | `boolean` | ムービークリップが現在再生されているかどうかを示すブール値(読み取り専用) |
937
- | `isTimelineEnabled` | `boolean` | MovieClipの機能を所持しているかを返却(読み取り専用) |
938
-
939
- ### DisplayObjectContainerから継承したプロパティ
940
-
941
- | プロパティ | 型 | 説明 |
942
- |-----------|------|------|
943
- | `numChildren` | `number` | このオブジェクトの子の数を返す(読み取り専用) |
944
- | `mouseChildren` | `boolean` | オブジェクトの子がマウスまたはユーザー入力デバイスに対応しているかどうかを判断する |
945
- | `mask` | `DisplayObject \| null` | 呼び出し元の表示オブジェクトをマスクする指定されたマスクオブジェクト |
946
- | `isContainerEnabled` | `boolean` | コンテナの機能を所持しているかを返却(読み取り専用) |
947
- | `cacheAsBitmap` | `Matrix \| null` | ベクター描画やコンテナをビットマップとしてキャッシュするMatrix(nullで解除) |
948
-
949
- ## メソッド
950
-
951
- ### MovieClip固有のメソッド
952
-
953
- | メソッド | 戻り値 | 説明 |
954
- |---------|--------|------|
955
- | `play()` | `void` | ムービークリップのタイムライン内で再生ヘッドを移動する |
956
- | `stop()` | `void` | ムービークリップ内の再生ヘッドを停止する |
957
- | `gotoAndPlay(frame: string \| number)` | `void` | 指定されたフレームで再生を開始する |
958
- | `gotoAndStop(frame: string \| number)` | `void` | 指定されたフレームに再生ヘッドを送り、そこで停止させる |
959
- | `nextFrame()` | `void` | 次のフレームに再生ヘッドを送り、停止する |
960
- | `prevFrame()` | `void` | 直前のフレームに再生ヘッドを戻し、停止する |
961
- | `addFrameLabel(frame_label: FrameLabel)` | `void` | タイムラインに対して動的にLabelを追加する |
962
-
963
- ### DisplayObjectContainerから継承したメソッド
964
-
965
- | メソッド | 戻り値 | 説明 |
966
- |---------|--------|------|
967
- | `addChild(display_object: DisplayObject)` | `DisplayObject` | このDisplayObjectContainerインスタンスに子DisplayObjectインスタンスを追加する |
968
- | `addChildAt(display_object: DisplayObject, index: number)` | `DisplayObject` | 指定したインデックス位置に子DisplayObjectインスタンスを追加する |
969
- | `removeChild(display_object: DisplayObject)` | `void` | 子リストから指定のDisplayObjectインスタンスを削除する |
970
- | `removeChildAt(index: number)` | `void` | 子リストの指定されたインデックス位置から子DisplayObjectを削除する |
971
- | `removeChildren(...indexes: number[])` | `void` | 配列で指定されたインデックスの子をコンテナから削除する |
972
- | `getChildAt(index: number)` | `DisplayObject \| null` | 指定のインデックス位置にある子表示オブジェクトインスタンスを返す |
973
- | `getChildByName(name: string)` | `DisplayObject \| null` | 指定された名前に一致する子表示オブジェクトを返す |
974
- | `getChildIndex(display_object: DisplayObject)` | `number` | 子DisplayObjectインスタンスのインデックス位置を返す |
975
- | `contains(display_object: DisplayObject)` | `boolean` | 指定されたDisplayObjectがインスタンスの子孫か、インスタンス自体かを指定する |
976
- | `setChildIndex(display_object: DisplayObject, index: number)` | `void` | 表示オブジェクトコンテナの既存の子の位置を変更する |
977
- | `swapChildren(display_object1: DisplayObject, display_object2: DisplayObject)` | `void` | 指定された2つの子オブジェクトのz順序(重ね順)を入れ替える |
978
- | `swapChildrenAt(index1: number, index2: number)` | `void` | 指定されたインデックス位置に該当する2つの子オブジェクトのz順序を入れ替える |
979
-
980
- ## イベント
981
-
982
- ### enterFrame
983
-
984
- 各フレームで発生するイベント:
985
-
986
- ```typescript
987
- movieClip.addEventListener("enterFrame", (event) => {
988
- console.log("フレーム:", movieClip.currentFrame);
989
- });
990
- ```
991
-
992
- ### frameConstructed
993
-
994
- フレームの構築が完了したときに発生:
995
-
996
- ```typescript
997
- movieClip.addEventListener("frameConstructed", (event) => {
998
- // フレームスクリプトの実行前
999
- });
1000
- ```
1001
-
1002
- ### exitFrame
1003
-
1004
- フレームを離れるときに発生:
1005
-
1006
- ```typescript
1007
- movieClip.addEventListener("exitFrame", (event) => {
1008
- // 次のフレームへ移動する前
1009
- });
1010
- ```
1011
-
1012
- ## 使用例
1013
-
1014
- ### 基本的なアニメーション制御
1015
-
1016
- ```typescript
1017
- const { Loader, Sprite } = next2d.display;
1018
- const { PointerEvent } = next2d.events;
1019
- const { URLRequest } = next2d.net;
1020
-
1021
- // JSONからMovieClipを読み込み
1022
- const loader = new Loader();
1023
- await loader.load(new URLRequest("animation.json"));
1024
-
1025
- const mc = loader.content;
1026
- stage.addChild(mc);
1027
-
1028
- // 最初は停止
1029
- mc.stop();
1030
-
1031
- // ボタンクリックで再生
1032
- button.addEventListener(PointerEvent.POINTER_DOWN, () => {
1033
- if (mc.isPlaying) {
1034
- mc.stop();
1035
- } else {
1036
- mc.play();
1037
- }
1038
- });
1039
- ```
1040
-
1041
- ### フレームラベルを使った制御
1042
-
1043
- ```typescript
1044
- // ラベル位置に移動
1045
- mc.gotoAndStop("idle");
1046
-
1047
- // 状態変更
1048
- function changeState(state) {
1049
- switch (state) {
1050
- case "idle":
1051
- mc.gotoAndPlay("idle");
1052
- break;
1053
- case "walk":
1054
- mc.gotoAndPlay("walk_start");
1055
- break;
1056
- case "attack":
1057
- mc.gotoAndPlay("attack");
1058
- break;
1059
- }
1060
- }
1061
- ```
1062
-
1063
- ### ネストしたMovieClipの制御
1064
-
1065
- ```typescript
1066
- // 子MovieClipへのアクセス
1067
- const childMc = mc.getChildByName("character");
1068
- childMc.gotoAndPlay("run");
1069
-
1070
- // 孫MovieClipへのアクセス
1071
- const grandChild = mc.character.arm;
1072
- grandChild.play();
1073
- ```
1074
-
1075
- ### 子オブジェクトの操作
1076
-
1077
- ```typescript
1078
- // 子オブジェクトを追加
1079
- const sprite = new Sprite();
1080
- mc.addChild(sprite);
1081
-
1082
- // 特定のインデックスに追加
1083
- mc.addChildAt(sprite, 0);
1084
-
1085
- // 子オブジェクトを削除
1086
- mc.removeChild(sprite);
1087
-
1088
- // インデックスで削除
1089
- mc.removeChildAt(0);
1090
-
1091
- // 複数の子を削除
1092
- mc.removeChildren(0, 1, 2);
1093
-
1094
- // 子オブジェクトの取得
1095
- const child = mc.getChildAt(0);
1096
- const namedChild = mc.getChildByName("myChild");
1097
-
1098
- // 子のインデックスを取得
1099
- const index = mc.getChildIndex(sprite);
1100
-
1101
- // 子のインデックスを変更
1102
- mc.setChildIndex(sprite, 2);
1103
-
1104
- // 子の順序を入れ替え
1105
- mc.swapChildren(sprite1, sprite2);
1106
- mc.swapChildrenAt(0, 1);
1107
- ```
1108
-
1109
- ### フレームラベルの動的追加
1110
-
1111
- ```typescript
1112
- const { FrameLabel } = next2d.display;
1113
-
1114
- // 新しいラベルを作成して追加
1115
- const label = new FrameLabel("myLabel", 10);
1116
- mc.addFrameLabel(label);
1117
-
1118
- // ラベルを使って移動
1119
- mc.gotoAndPlay("myLabel");
1120
- ```
1121
-
1122
- ### フレームレートの変更
1123
-
1124
- ```typescript
1125
- // ステージ全体のフレームレートを変更
1126
- stage.frameRate = 30;
1127
- ```
1128
-
1129
- ## FrameLabel
1130
-
1131
- フレームラベルの情報を持つクラス:
1132
-
1133
- ```typescript
1134
- // 現在のシーンのすべてのラベルを取得
1135
- const labels = mc.currentLabels;
1136
- labels.forEach((label) => {
1137
- console.log(`${label.name}: フレーム ${label.frame}`);
1138
- });
1139
- ```
1140
-
1141
- ## 関連項目
1142
-
1143
- - [Sprite](/ja/reference/player/sprite)
1144
- - [イベントシステム](/ja/reference/player/events)
1145
-
1146
- ---
1147
-
1148
- # Shape
1149
-
1150
- Shapeは、ベクターグラフィックスの描画専用クラスです。Spriteと異なり子オブジェクトを持てませんが、軽量でパフォーマンスに優れています。
1151
-
1152
- ## 継承関係
1153
-
1154
- ```mermaid
1155
- classDiagram
1156
- DisplayObject <|-- Shape
1157
-
1158
- class Shape {
1159
- +graphics: Graphics
1160
- }
1161
- ```
1162
-
1163
- ## プロパティ
1164
-
1165
- | プロパティ | 型 | 説明 |
1166
- |-----------|------|------|
1167
- | `graphics` | Graphics | この Shape オブジェクトに描画されるベクターの描画コマンドを保持する Graphics オブジェクト(読み取り専用) |
1168
- | `isShape` | boolean | Shapeの機能を所持しているかを返却(読み取り専用) |
1169
- | `cacheKey` | number | ビルドされたキャッシュキー |
1170
- | `cacheParams` | number[] | キャッシュのビルドに利用されるパラメータ(読み取り専用) |
1171
- | `isBitmap` | boolean | ビットマップ描画の判定フラグ |
1172
- | `src` | string | 指定されたパスから画像を読み込み、Graphicsを生成する |
1173
- | `bitmapData` | BitmapData | ビットマップデータを返却(読み取り専用) |
1174
- | `namespace` | string | 指定されたオブジェクトの空間名を返却(読み取り専用) |
1175
-
1176
- ## メソッド
1177
-
1178
- | メソッド | 戻り値 | 説明 |
1179
- |---------|--------|------|
1180
- | `load(url: string)` | Promise\<void\> | 指定されたURLから画像を非同期で読み込み、Graphicsを生成する |
1181
- | `clearBitmapBuffer()` | void | ビットマップデータを解放する |
1182
- | `setBitmapBuffer(width: number, height: number, buffer: Uint8Array)` | void | RGBAの画像データを設定する |
1183
-
1184
- ## SpriteとShapeの違い
1185
-
1186
- | 特徴 | Shape | Sprite |
1187
- |------|-------|--------|
1188
- | 子オブジェクト | 持てない | 持てる |
1189
- | インタラクション | なし | クリック等可能 |
1190
- | パフォーマンス | 軽量 | やや重い |
1191
- | 用途 | 静的な背景、装飾 | ボタン、コンテナ |
1192
-
1193
- ## 使用例
1194
-
1195
- ### 基本的な描画
1196
-
1197
- ```typescript
1198
- const { Shape } = next2d.display;
1199
-
1200
- const shape = new Shape();
1201
-
1202
- // 塗りつぶし矩形
1203
- shape.graphics.beginFill(0x3498db);
1204
- shape.graphics.drawRect(0, 0, 150, 100);
1205
- shape.graphics.endFill();
1206
-
1207
- stage.addChild(shape);
1208
- ```
1209
-
1210
- ### 複合図形の描画
1211
-
1212
- ```typescript
1213
- const { Shape } = next2d.display;
1214
-
1215
- const shape = new Shape();
1216
- const g = shape.graphics;
1217
-
1218
- // 背景
1219
- g.beginFill(0xecf0f1);
1220
- g.drawRoundRect(0, 0, 200, 150, 10, 10);
1221
- g.endFill();
1222
-
1223
- // 枠線
1224
- g.lineStyle(2, 0x2c3e50);
1225
- g.drawRoundRect(0, 0, 200, 150, 10, 10);
1226
-
1227
- // 内側の装飾
1228
- g.beginFill(0xe74c3c);
1229
- g.drawCircle(100, 75, 30);
1230
- g.endFill();
1231
-
1232
- stage.addChild(shape);
1233
- ```
1234
-
1235
- ### パスの描画
1236
-
1237
- ```typescript
1238
- const { Shape } = next2d.display;
1239
-
1240
- const shape = new Shape();
1241
- const g = shape.graphics;
1242
-
1243
- g.beginFill(0x9b59b6);
1244
-
1245
- // 星形を描画
1246
- g.moveTo(50, 0);
1247
- g.lineTo(61, 35);
1248
- g.lineTo(98, 35);
1249
- g.lineTo(68, 57);
1250
- g.lineTo(79, 91);
1251
- g.lineTo(50, 70);
1252
- g.lineTo(21, 91);
1253
- g.lineTo(32, 57);
1254
- g.lineTo(2, 35);
1255
- g.lineTo(39, 35);
1256
- g.lineTo(50, 0);
1257
-
1258
- g.endFill();
1259
-
1260
- stage.addChild(shape);
1261
- ```
1262
-
1263
- ### ベジェ曲線
1264
-
1265
- ```typescript
1266
- const { Shape } = next2d.display;
1267
-
1268
- const shape = new Shape();
1269
- const g = shape.graphics;
1270
-
1271
- g.lineStyle(3, 0x1abc9c);
1272
-
1273
- // 二次ベジェ曲線
1274
- g.moveTo(0, 100);
1275
- g.curveTo(50, 0, 100, 100); // 制御点, 終点
1276
-
1277
- g.curveTo(150, 200, 200, 100);
1278
-
1279
- stage.addChild(shape);
1280
- ```
1281
-
1282
- ### グラデーション背景
1283
-
1284
- ```typescript
1285
- const { Shape } = next2d.display;
1286
- const { Matrix } = next2d.geom;
1287
-
1288
- const shape = new Shape();
1289
- const g = shape.graphics;
1290
-
1291
- // グラデーション用マトリックス
1292
- const matrix = new Matrix();
1293
- matrix.createGradientBox(
1294
- stage.stageWidth,
1295
- stage.stageHeight,
1296
- Math.PI / 2, // 90度(縦方向)
1297
- 0, 0
1298
- );
1299
-
1300
- // 放射状グラデーション
1301
- g.beginGradientFill(
1302
- "radial",
1303
- [0x667eea, 0x764ba2],
1304
- [1, 1],
1305
- [0, 255],
1306
- matrix
1307
- );
1308
- g.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
1309
- g.endFill();
1310
-
1311
- // 最背面に配置
1312
- stage.addChildAt(shape, 0);
1313
- ```
1314
-
1315
- ### 動的な再描画
1316
-
1317
- ```typescript
1318
- const { Shape } = next2d.display;
1319
-
1320
- const shape = new Shape();
1321
- stage.addChild(shape);
1322
-
1323
- let angle = 0;
1324
-
1325
- // フレームごとに再描画
1326
- stage.addEventListener("enterFrame", () => {
1327
- const g = shape.graphics;
1328
-
1329
- // 前の描画をクリア
1330
- g.clear();
1331
-
1332
- // 新しい位置に描画
1333
- const x = 200 + Math.cos(angle) * 100;
1334
- const y = 150 + Math.sin(angle) * 100;
1335
-
1336
- g.beginFill(0xe74c3c);
1337
- g.drawCircle(x, y, 20);
1338
- g.endFill();
1339
-
1340
- angle += 0.05;
1341
- });
1342
- ```
1343
-
1344
- ### 複数のShapeで構成
1345
-
1346
- ```typescript
1347
- const { Shape } = next2d.display;
1348
-
1349
- // 背景レイヤー
1350
- const bgShape = new Shape();
1351
- bgShape.graphics.beginFill(0x2c3e50);
1352
- bgShape.graphics.drawRect(0, 0, 400, 300);
1353
- bgShape.graphics.endFill();
1354
-
1355
- // 装飾レイヤー
1356
- const decorShape = new Shape();
1357
- decorShape.graphics.beginFill(0x3498db, 0.5);
1358
- decorShape.graphics.drawCircle(100, 100, 80);
1359
- decorShape.graphics.drawCircle(300, 200, 60);
1360
- decorShape.graphics.endFill();
1361
-
1362
- // 前面レイヤー
1363
- const frontShape = new Shape();
1364
- frontShape.graphics.lineStyle(2, 0xecf0f1);
1365
- frontShape.graphics.drawRect(50, 50, 300, 200);
1366
-
1367
- stage.addChild(bgShape);
1368
- stage.addChild(decorShape);
1369
- stage.addChild(frontShape);
1370
- ```
1371
-
1372
- ## パフォーマンスのヒント
1373
-
1374
- 1. **静的な描画にはShapeを使用**: インタラクションが不要な背景や装飾にはShapeが最適
1375
- 2. **描画の最小化**: 頻繁に変更されない場合は一度だけ描画
1376
- 3. **clear()の使用**: 動的な再描画時は必ずclear()を呼ぶ
1377
- 4. **複雑な図形はキャッシュ**: cacheAsBitmapプロパティで描画をキャッシュ
1378
-
1379
- ```typescript
1380
- // 複雑な図形をビットマップとしてキャッシュ
1381
- const { Matrix } = next2d.geom;
1382
- shape.cacheAsBitmap = new Matrix(1, 0, 0, 1, 0, 0);
1383
- ```
1384
-
1385
- ## Graphics クラス
1386
-
1387
- Graphicsクラスは、ベクターグラフィックスを描画するための描画APIを提供します。Shape.graphicsプロパティを通じてアクセスします。
1388
-
1389
- ### 塗りつぶしメソッド
1390
-
1391
- | メソッド | 説明 |
1392
- |---------|------|
1393
- | `beginFill(color: number, alpha?: number)` | 単色の塗りつぶしを開始。alphaのデフォルトは1 |
1394
- | `beginGradientFill(type, colors, alphas, ratios, matrix?, spreadMethod?, interpolationMethod?, focalPointRatio?)` | グラデーション塗りつぶしを開始 |
1395
- | `beginBitmapFill(bitmapData, matrix?, repeat?, smooth?)` | ビットマップ塗りつぶしを開始 |
1396
- | `endFill()` | 塗りつぶしを終了 |
1397
-
1398
- #### beginGradientFill パラメータ
1399
-
1400
- | パラメータ | 型 | 説明 |
1401
- |-----------|------|------|
1402
- | `type` | string | "linear" または "radial" |
1403
- | `colors` | number[] | 色の配列(16進数) |
1404
- | `alphas` | number[] | 各色の透明度(0-1) |
1405
- | `ratios` | number[] | 各色の位置(0-255) |
1406
- | `matrix` | Matrix | グラデーションの変形マトリックス |
1407
- | `spreadMethod` | string | "pad", "reflect", "repeat"(デフォルト: "pad") |
1408
- | `interpolationMethod` | string | "rgb" または "linearRGB"(デフォルト: "rgb") |
1409
- | `focalPointRatio` | number | 放射状グラデーションの焦点位置(-1 to 1) |
1410
-
1411
- ### 線スタイルメソッド
1412
-
1413
- | メソッド | 説明 |
1414
- |---------|------|
1415
- | `lineStyle(thickness?, color?, alpha?, pixelHinting?, scaleMode?, caps?, joints?, miterLimit?)` | 線のスタイルを設定 |
1416
- | `lineGradientStyle(type, colors, alphas, ratios, matrix?, spreadMethod?, interpolationMethod?, focalPointRatio?)` | グラデーション線スタイルを設定 |
1417
- | `lineBitmapStyle(bitmapData, matrix?, repeat?, smooth?)` | ビットマップ線スタイルを設定 |
1418
- | `endLine()` | 線スタイルを終了 |
1419
-
1420
- #### lineStyle パラメータ
1421
-
1422
- | パラメータ | 型 | デフォルト | 説明 |
1423
- |-----------|------|---------|------|
1424
- | `thickness` | number | 0 | 線の太さ(ピクセル) |
1425
- | `color` | number | 0 | 線の色(16進数) |
1426
- | `alpha` | number | 1 | 透明度(0-1) |
1427
- | `pixelHinting` | boolean | false | ピクセルスナップ |
1428
- | `scaleMode` | string | "normal" | "normal", "none", "vertical", "horizontal" |
1429
- | `caps` | string | null | "none", "round", "square" |
1430
- | `joints` | string | null | "bevel", "miter", "round" |
1431
- | `miterLimit` | number | 3 | マイター結合の限界値 |
1432
-
1433
- ### パスメソッド
1434
-
1435
- | メソッド | 説明 |
1436
- |---------|------|
1437
- | `moveTo(x: number, y: number)` | 描画位置を移動 |
1438
- | `lineTo(x: number, y: number)` | 現在位置から指定座標まで直線を描画 |
1439
- | `curveTo(controlX, controlY, anchorX, anchorY)` | 二次ベジェ曲線を描画 |
1440
- | `cubicCurveTo(controlX1, controlY1, controlX2, controlY2, anchorX, anchorY)` | 三次ベジェ曲線を描画 |
1441
-
1442
- ### 図形メソッド
1443
-
1444
- | メソッド | 説明 |
1445
- |---------|------|
1446
- | `drawRect(x, y, width, height)` | 矩形を描画 |
1447
- | `drawRoundRect(x, y, width, height, ellipseWidth, ellipseHeight?)` | 角丸矩形を描画 |
1448
- | `drawCircle(x, y, radius)` | 円を描画 |
1449
- | `drawEllipse(x, y, width, height)` | 楕円を描画 |
1450
-
1451
- ### ユーティリティメソッド
1452
-
1453
- | メソッド | 説明 |
1454
- |---------|------|
1455
- | `clear()` | すべての描画コマンドをクリア |
1456
- | `clone()` | Graphicsオブジェクトを複製 |
1457
- | `copyFrom(source: Graphics)` | 別のGraphicsから描画コマンドをコピー |
1458
-
1459
- ### 詳細な使用例
1460
-
1461
- #### 線形グラデーション
1462
-
1463
- ```typescript
1464
- const { Shape } = next2d.display;
1465
- const { Matrix } = next2d.geom;
1466
-
1467
- const shape = new Shape();
1468
- const g = shape.graphics;
1469
-
1470
- const matrix = new Matrix();
1471
- matrix.createGradientBox(200, 100, 0, 0, 0); // 幅, 高さ, 回転, x, y
1472
-
1473
- g.beginGradientFill(
1474
- "linear", // タイプ
1475
- [0xff0000, 0x00ff00, 0x0000ff], // 色
1476
- [1, 1, 1], // 透明度
1477
- [0, 127, 255], // 比率
1478
- matrix
1479
- );
1480
- g.drawRect(0, 0, 200, 100);
1481
- g.endFill();
1482
-
1483
- stage.addChild(shape);
1484
- ```
1485
-
1486
- #### 三次ベジェ曲線
1487
-
1488
- ```typescript
1489
- const { Shape } = next2d.display;
1490
-
1491
- const shape = new Shape();
1492
- const g = shape.graphics;
1493
-
1494
- g.lineStyle(2, 0x3498db);
1495
-
1496
- // 滑らかなS字曲線
1497
- g.moveTo(0, 100);
1498
- g.cubicCurveTo(
1499
- 50, 0, // 制御点1
1500
- 150, 200, // 制御点2
1501
- 200, 100 // 終点
1502
- );
1503
-
1504
- stage.addChild(shape);
1505
- ```
1506
-
1507
- #### ビットマップ塗りつぶし
1508
-
1509
- ```typescript
1510
- const { Shape } = next2d.display;
1511
-
1512
- // Shapeのload()メソッドで画像を読み込み
1513
- const textureShape = new Shape();
1514
- await textureShape.load("texture.png");
1515
-
1516
- // 読み込んだbitmapDataを使ってビットマップ塗りつぶし
1517
- const shape = new Shape();
1518
- const g = shape.graphics;
1519
-
1520
- g.beginBitmapFill(textureShape.bitmapData, null, true, true);
1521
- g.drawRect(0, 0, 400, 300);
1522
- g.endFill();
1523
-
1524
- stage.addChild(shape);
1525
- ```
1526
-
1527
- #### グラデーション線
1528
-
1529
- ```typescript
1530
- const { Shape } = next2d.display;
1531
- const { Matrix } = next2d.geom;
1532
-
1533
- const shape = new Shape();
1534
- const g = shape.graphics;
1535
-
1536
- const matrix = new Matrix();
1537
- matrix.createGradientBox(200, 200, 0, 0, 0);
1538
-
1539
- g.lineGradientStyle(
1540
- "linear",
1541
- [0xff0000, 0x0000ff],
1542
- [1, 1],
1543
- [0, 255],
1544
- matrix
1545
- );
1546
- g.lineStyle(5);
1547
-
1548
- g.moveTo(10, 10);
1549
- g.lineTo(190, 10);
1550
- g.lineTo(190, 190);
1551
- g.lineTo(10, 190);
1552
- g.lineTo(10, 10);
1553
-
1554
- stage.addChild(shape);
1555
- ```
1556
-
1557
- #### 複雑な図形の組み合わせ
1558
-
1559
- ```typescript
1560
- const { Shape } = next2d.display;
1561
-
1562
- const shape = new Shape();
1563
- const g = shape.graphics;
1564
-
1565
- // 外側の矩形(塗りつぶし)
1566
- g.beginFill(0x2c3e50);
1567
- g.drawRoundRect(0, 0, 200, 150, 15, 15);
1568
- g.endFill();
1569
-
1570
- // 内側の円(別の色で塗りつぶし)
1571
- g.beginFill(0xe74c3c);
1572
- g.drawCircle(100, 75, 40);
1573
- g.endFill();
1574
-
1575
- // 装飾線
1576
- g.lineStyle(2, 0xecf0f1);
1577
- g.moveTo(20, 20);
1578
- g.lineTo(180, 20);
1579
- g.moveTo(20, 130);
1580
- g.lineTo(180, 130);
1581
-
1582
- stage.addChild(shape);
1583
- ```
1584
-
1585
- ## 関連項目
1586
-
1587
- - [DisplayObject](/ja/reference/player/display-object)
1588
- - [Sprite](/ja/reference/player/sprite)
1589
- - [フィルター](/ja/reference/player/filters)
1590
-
1591
- ---
1592
-
1593
- # サウンド
1594
-
1595
- Next2D Playerは、ゲームやアプリケーションで必要な音声機能を提供します。BGM、効果音、ボイスなど様々な用途に対応しています。
1596
-
1597
- ## クラス構成
1598
-
1599
- ```mermaid
1600
- classDiagram
1601
- EventDispatcher <|-- Sound
1602
- class Sound {
1603
- +audioBuffer: AudioBuffer
1604
- +volume: Number
1605
- +loopCount: Number
1606
- +load(request): Promise
1607
- +play(startTime): void
1608
- +stop(): void
1609
- +clone(): Sound
1610
- }
1611
- class SoundMixer {
1612
- +volume: Number
1613
- +stopAll(): void
1614
- }
1615
- ```
1616
-
1617
- ## Sound
1618
-
1619
- 音声ファイルを読み込み再生するクラスです。EventDispatcherを継承しています。
1620
-
1621
- ### プロパティ
1622
-
1623
- | プロパティ | 型 | デフォルト | 読み取り専用 | 説明 |
1624
- |-----------|------|----------|:------------:|------|
1625
- | `audioBuffer` | AudioBuffer \| null | null | - | オーディオバッファ。load()で読み込んだ音声データが格納されます |
1626
- | `loopCount` | number | 0 | - | ループ回数の設定。0でループなし、9999で実質無限ループ |
1627
- | `volume` | number | 1 | - | ボリューム。範囲は0(無音)〜1(フルボリューム)。SoundMixer.volumeの値を超えることはできません |
1628
- | `canLoop` | boolean | - | ○ | サウンドがループするかどうかを示します |
1629
-
1630
- ### メソッド
1631
-
1632
- | メソッド | 戻り値 | 説明 |
1633
- |---------|--------|------|
1634
- | `clone()` | Sound | Soundクラスを複製します。volume、loopCount、audioBufferがコピーされます |
1635
- | `load(request: URLRequest)` | Promise\<void\> | 指定したURLから外部MP3ファイルのロードを開始します |
1636
- | `play(startTime: number = 0)` | void | サウンドを再生します。startTimeは再生開始時間(秒単位)です。既に再生中の場合は何もしません |
1637
- | `stop()` | void | チャンネルで再生しているサウンドを停止します |
1638
-
1639
- ## 使用例
1640
-
1641
- ### 基本的な音声再生
1642
-
1643
- ```typescript
1644
- const { Sound } = next2d.media;
1645
- const { URLRequest } = next2d.net;
1646
-
1647
- // Soundオブジェクトを作成
1648
- const sound = new Sound();
1649
-
1650
- // 音声ファイルを非同期で読み込み
1651
- const request = new URLRequest("bgm.mp3");
1652
- await sound.load(request);
1653
-
1654
- // 再生開始
1655
- sound.play();
1656
- ```
1657
-
1658
- ### 効果音の再生
1659
-
1660
- ```typescript
1661
- const { Sound } = next2d.media;
1662
- const { URLRequest } = next2d.net;
1663
-
1664
- // 効果音をプリロード
1665
- const seJump = new Sound();
1666
- const seHit = new Sound();
1667
- const seCoin = new Sound();
1668
-
1669
- // 読み込み
1670
- await seJump.load(new URLRequest("se/jump.mp3"));
1671
- await seHit.load(new URLRequest("se/hit.mp3"));
1672
- await seCoin.load(new URLRequest("se/coin.mp3"));
1673
-
1674
- // 再生関数
1675
- function playSE(sound) {
1676
- // 複製して再生(同時に複数回鳴らす場合)
1677
- const clone = sound.clone();
1678
- clone.play();
1679
- }
1680
-
1681
- // ゲーム中で使用
1682
- player.addEventListener("jump", () => {
1683
- playSE(seJump);
1684
- });
1685
- ```
1686
-
1687
- ### BGMのループ再生
1688
-
1689
- ```typescript
1690
- const { Sound } = next2d.media;
1691
- const { URLRequest } = next2d.net;
1692
-
1693
- const bgm = new Sound();
1694
-
1695
- // 読み込み
1696
- await bgm.load(new URLRequest("bgm/stage1.mp3"));
1697
-
1698
- // 音量を設定
1699
- bgm.volume = 0.7; // 70%
1700
-
1701
- // ループ回数を設定(9999で実質無限ループ)
1702
- bgm.loopCount = 9999;
1703
-
1704
- // 再生
1705
- bgm.play();
1706
-
1707
- // BGM停止
1708
- function stopBGM() {
1709
- bgm.stop();
1710
- }
1711
- ```
1712
-
1713
- ### 音量コントロール
1714
-
1715
- ```typescript
1716
- const { Sound } = next2d.media;
1717
- const { URLRequest } = next2d.net;
1718
-
1719
- const bgm = new Sound();
1720
- await bgm.load(new URLRequest("bgm.mp3"));
1721
-
1722
- // 音量を設定
1723
- bgm.volume = 1.0;
1724
- bgm.play();
1725
-
1726
- // 音量を変更
1727
- function setVolume(volume) {
1728
- bgm.volume = Math.max(0, Math.min(1, volume));
1729
- }
1730
-
1731
- // フェードアウト
1732
- async function fadeOut(duration = 1000) {
1733
- const startVolume = bgm.volume;
1734
- const startTime = Date.now();
1735
-
1736
- return new Promise((resolve) => {
1737
- const fade = () => {
1738
- const elapsed = Date.now() - startTime;
1739
- const progress = Math.min(1, elapsed / duration);
1740
-
1741
- bgm.volume = startVolume * (1 - progress);
1742
-
1743
- if (progress >= 1) {
1744
- bgm.stop();
1745
- resolve();
1746
- } else {
1747
- requestAnimationFrame(fade);
1748
- }
1749
- };
1750
- fade();
1751
- });
1752
- }
1753
- ```
1754
-
1755
- ### サウンドマネージャー
1756
-
1757
- ```typescript
1758
- const { Sound, SoundMixer } = next2d.media;
1759
- const { URLRequest } = next2d.net;
1760
-
1761
- class SoundManager {
1762
- constructor() {
1763
- this._sounds = new Map();
1764
- this._bgm = null;
1765
- this._bgmVolume = 0.7;
1766
- this._seVolume = 1.0;
1767
- this._isMuted = false;
1768
- }
1769
-
1770
- // サウンドをプリロード
1771
- async preload(id, url) {
1772
- const sound = new Sound();
1773
- await sound.load(new URLRequest(url));
1774
- this._sounds.set(id, sound);
1775
- }
1776
-
1777
- // BGM再生
1778
- playBGM(id, loops = 9999) {
1779
- this.stopBGM();
1780
-
1781
- const sound = this._sounds.get(id);
1782
- if (sound) {
1783
- this._bgm = sound.clone();
1784
- this._bgm.volume = this._isMuted ? 0 : this._bgmVolume;
1785
- this._bgm.loopCount = loops;
1786
- this._bgm.play();
1787
- }
1788
- }
1789
-
1790
- // BGM停止
1791
- stopBGM() {
1792
- if (this._bgm) {
1793
- this._bgm.stop();
1794
- this._bgm = null;
1795
- }
1796
- }
1797
-
1798
- // SE再生
1799
- playSE(id) {
1800
- const sound = this._sounds.get(id);
1801
- if (sound) {
1802
- const clone = sound.clone();
1803
- clone.volume = this._isMuted ? 0 : this._seVolume;
1804
- clone.play();
1805
- }
1806
- }
1807
-
1808
- // ミュート切り替え
1809
- toggleMute() {
1810
- this._isMuted = !this._isMuted;
1811
- if (this._bgm) {
1812
- this._bgm.volume = this._isMuted ? 0 : this._bgmVolume;
1813
- }
1814
- return this._isMuted;
1815
- }
1816
-
1817
- // BGM音量設定
1818
- setBGMVolume(volume) {
1819
- this._bgmVolume = Math.max(0, Math.min(1, volume));
1820
- if (this._bgm && !this._isMuted) {
1821
- this._bgm.volume = this._bgmVolume;
1822
- }
1823
- }
1824
-
1825
- // SE音量設定
1826
- setSEVolume(volume) {
1827
- this._seVolume = Math.max(0, Math.min(1, volume));
1828
- }
1829
- }
1830
-
1831
- // 使用例
1832
- const soundManager = new SoundManager();
1833
-
1834
- // 起動時にプリロード
1835
- async function initSounds() {
1836
- await soundManager.preload("bgm_title", "bgm/title.mp3");
1837
- await soundManager.preload("bgm_stage1", "bgm/stage1.mp3");
1838
- await soundManager.preload("se_jump", "se/jump.mp3");
1839
- await soundManager.preload("se_coin", "se/coin.mp3");
1840
- await soundManager.preload("se_damage", "se/damage.mp3");
1841
- }
1842
-
1843
- // ゲーム中
1844
- soundManager.playBGM("bgm_stage1");
1845
- soundManager.playSE("se_jump");
1846
- ```
1847
-
1848
- ## SoundMixer
1849
-
1850
- 全体のサウンドを制御するクラスです。
1851
-
1852
- ```typescript
1853
- const { SoundMixer } = next2d.media;
1854
-
1855
- // 全ての音声を停止
1856
- SoundMixer.stopAll();
1857
-
1858
- // 全体の音量を変更
1859
- SoundMixer.volume = 0.5; // 50%
1860
- ```
1861
-
1862
- ## サポートフォーマット
1863
-
1864
- | フォーマット | 拡張子 | 対応状況 |
1865
- |--------------|--------|----------|
1866
- | MP3 | .mp3 | 推奨 |
1867
- | AAC | .m4a, .aac | 対応 |
1868
- | Ogg Vorbis | .ogg | ブラウザ依存 |
1869
- | WAV | .wav | 対応(ファイルサイズ大) |
1870
-
1871
- ## ベストプラクティス
1872
-
1873
- 1. **プリロード**: ゲーム開始前に全ての音声をプリロード
1874
- 2. **フォーマット**: MP3を推奨(互換性と圧縮率のバランス)
1875
- 3. **効果音**: 短い音声はWAVでも可(レイテンシが低い)
1876
- 4. **音量管理**: BGMとSEの音量を別々に管理
1877
- 5. **モバイル対応**: ユーザーインタラクション後に再生開始
1878
- 6. **clone使用**: 同じ音を同時に複数回再生する場合はclone()を使用
1879
-
1880
- ## 関連項目
1881
-
1882
- - [イベントシステム](/ja/reference/player/events)
1883
-
1884
- ---
1885
-
1886
- # Sprite
1887
-
1888
- SpriteはDisplayObjectContainerです。MovieClipの基底クラスであり、タイムラインを持たない動的なオブジェクト管理に使用します。
1889
-
1890
- ## 継承関係
1891
-
1892
- ```mermaid
1893
- classDiagram
1894
- DisplayObject <|-- InteractiveObject
1895
- InteractiveObject <|-- DisplayObjectContainer
1896
- DisplayObjectContainer <|-- Sprite
1897
- Sprite <|-- MovieClip
1898
-
1899
- class Sprite {
1900
- +buttonMode: Boolean
1901
- +useHandCursor: Boolean
1902
- }
1903
- ```
1904
-
1905
- ## プロパティ
1906
-
1907
- ### Sprite固有のプロパティ
1908
-
1909
- | プロパティ | 型 | 読取専用 | デフォルト | 説明 |
1910
- |-----------|------|:--------:|------------|------|
1911
- | `isSprite` | boolean | Yes | true | Spriteの機能を所持しているかを返却 |
1912
- | `buttonMode` | boolean | No | false | このスプライトのボタンモードを指定します |
1913
- | `useHandCursor` | boolean | No | true | buttonModeがtrueの場合にハンドカーソルを表示するかどうか |
1914
- | `hitArea` | Sprite \| null | No | null | スプライトのヒット領域となる別のスプライトを指定します |
1915
- | `soundTransform` | SoundTransform \| null | No | null | このスプライト内のサウンドを制御します |
1916
-
1917
- ### DisplayObjectContainerから継承されるプロパティ
1918
-
1919
- | プロパティ | 型 | 読取専用 | デフォルト | 説明 |
1920
- |-----------|------|:--------:|------------|------|
1921
- | `isContainerEnabled` | boolean | Yes | true | コンテナの機能を所持しているかを返却 |
1922
- | `mouseChildren` | boolean | No | true | オブジェクトの子がマウスまたはユーザー入力デバイスに対応しているかどうか |
1923
- | `numChildren` | number | Yes | - | このオブジェクトの子の数を返します |
1924
- | `mask` | DisplayObject \| null | No | null | 表示オブジェクトをマスクします |
1925
-
1926
- ### InteractiveObjectから継承されるプロパティ
1927
-
1928
- | プロパティ | 型 | 読取専用 | デフォルト | 説明 |
1929
- |-----------|------|:--------:|------------|------|
1930
- | `isInteractive` | boolean | Yes | true | InteractiveObjectの機能を所持しているかを返却 |
1931
- | `mouseEnabled` | boolean | No | true | このオブジェクトでマウスまたはその他のユーザー入力メッセージを受け取るかどうか |
1932
-
1933
- ### DisplayObjectから継承されるプロパティ
1934
-
1935
- | プロパティ | 型 | 読取専用 | デフォルト | 説明 |
1936
- |-----------|------|:--------:|------------|------|
1937
- | `instanceId` | number | Yes | - | DisplayObjectのユニークなインスタンスID |
1938
- | `name` | string | No | "" | 名前を返却します。getChildByName()で使用されます |
1939
- | `parent` | Sprite \| MovieClip \| null | No | null | このDisplayObjectの親のDisplayObjectContainerを返却 |
1940
- | `x` | number | No | 0 | 親DisplayObjectContainerのローカル座標を基準にしたx座標 |
1941
- | `y` | number | No | 0 | 親DisplayObjectContainerのローカル座標を基準にしたy座標 |
1942
- | `width` | number | No | - | 表示オブジェクトの幅(ピクセル単位) |
1943
- | `height` | number | No | - | 表示オブジェクトの高さ(ピクセル単位) |
1944
- | `scaleX` | number | No | 1 | 基準点から適用されるオブジェクトの水平スケール値 |
1945
- | `scaleY` | number | No | 1 | 基準点から適用されるオブジェクトの垂直スケール値 |
1946
- | `rotation` | number | No | 0 | DisplayObjectインスタンスの元の位置からの回転角(度単位) |
1947
- | `alpha` | number | No | 1 | 指定されたオブジェクトのアルファ透明度値(0.0〜1.0) |
1948
- | `visible` | boolean | No | true | 表示オブジェクトが可視かどうか |
1949
- | `blendMode` | string | No | "normal" | 使用するブレンドモードを指定するBlendModeクラスの値 |
1950
- | `filters` | array \| null | No | null | 表示オブジェクトに関連付けられた各フィルターオブジェクトの配列 |
1951
- | `matrix` | Matrix | No | - | 表示オブジェクトのMatrixを返します |
1952
- | `colorTransform` | ColorTransform | No | - | 表示オブジェクトのColorTransformを返します |
1953
- | `concatenatedMatrix` | Matrix | Yes | - | この表示オブジェクトとすべての親オブジェクトの結合されたMatrix |
1954
- | `scale9Grid` | Rectangle \| null | No | null | 現在有効な拡大/縮小グリッド |
1955
- | `loaderInfo` | LoaderInfo \| null | Yes | null | この表示オブジェクトが属するファイルの読み込み情報 |
1956
- | `root` | MovieClip \| Sprite \| null | Yes | null | DisplayObjectのルートであるDisplayObjectContainer |
1957
- | `mouseX` | number | Yes | - | 対象のDisplayObjectの基準点からのx軸の位置(ピクセル) |
1958
- | `mouseY` | number | Yes | - | 対象のDisplayObjectの基準点からのy軸の位置(ピクセル) |
1959
- | `dropTarget` | Sprite \| null | Yes | null | スプライトのドラッグ先またはドロップされた先の表示オブジェクト |
1960
- | `isMask` | boolean | No | false | マスクとしてDisplayObjectにセットされているかを示します |
1961
- | `cacheAsBitmap` | Matrix \| null | No | null | ベクター描画やコンテナをビットマップとしてキャッシュするMatrix(nullで解除) |
1962
-
1963
- ## メソッド
1964
-
1965
- ### Sprite固有のメソッド
1966
-
1967
- | メソッド | 戻り値 | 説明 |
1968
- |---------|--------|------|
1969
- | `startDrag(lockCenter?: boolean, bounds?: Rectangle)` | void | 指定されたスプライトをユーザーがドラッグできるようにします |
1970
- | `stopDrag()` | void | startDrag()メソッドを終了します |
1971
-
1972
- ### DisplayObjectContainerから継承されるメソッド
1973
-
1974
- | メソッド | 戻り値 | 説明 |
1975
- |---------|--------|------|
1976
- | `addChild(child: DisplayObject)` | DisplayObject | 子DisplayObjectインスタンスを追加します |
1977
- | `addChildAt(child: DisplayObject, index: number)` | DisplayObject | 指定のインデックス位置に子DisplayObjectインスタンスを追加します |
1978
- | `removeChild(child: DisplayObject)` | void | 指定のchild DisplayObjectインスタンスを削除します |
1979
- | `removeChildAt(index: number)` | void | 指定のインデックス位置から子DisplayObjectを削除します |
1980
- | `removeChildren(...indexes: number[])` | void | 配列で指定されたインデックスの子をコンテナから削除します |
1981
- | `getChildAt(index: number)` | DisplayObject \| null | 指定のインデックス位置にある子表示オブジェクトインスタンスを返します |
1982
- | `getChildByName(name: string)` | DisplayObject \| null | 指定された名前に一致する子表示オブジェクトを返します |
1983
- | `getChildIndex(child: DisplayObject)` | number | 子DisplayObjectインスタンスのインデックス位置を返します |
1984
- | `setChildIndex(child: DisplayObject, index: number)` | void | 表示オブジェクトコンテナの既存の子の位置を変更します |
1985
- | `contains(child: DisplayObject)` | boolean | 指定されたDisplayObjectがインスタンスの子孫であるかどうか |
1986
- | `swapChildren(child1: DisplayObject, child2: DisplayObject)` | void | 指定された2つの子オブジェクトのz順序を入れ替えます |
1987
- | `swapChildrenAt(index1: number, index2: number)` | void | 指定されたインデックス位置の2つの子オブジェクトのz順序を入れ替えます |
1988
-
1989
- ### DisplayObjectから継承されるメソッド
1990
-
1991
- | メソッド | 戻り値 | 説明 |
1992
- |---------|--------|------|
1993
- | `getBounds(targetDisplayObject?: DisplayObject)` | Rectangle | 指定したDisplayObjectの座標系を基準にして、表示オブジェクトの領域を定義する矩形を返します |
1994
- | `globalToLocal(point: Point)` | Point | pointオブジェクトをステージ(グローバル)座標から表示オブジェクトの(ローカル)座標に変換します |
1995
- | `localToGlobal(point: Point)` | Point | pointオブジェクトを表示オブジェクトの(ローカル)座標からステージ(グローバル)座標に変換します |
1996
- | `hitTestObject(target: DisplayObject)` | boolean | DisplayObjectの描画範囲を評価して、重複または交差するかどうかを調べます |
1997
- | `hitTestPoint(x: number, y: number, shapeFlag?: boolean)` | boolean | 表示オブジェクトを評価して、x、yパラメーターで指定されたポイントと重複または交差するかどうかを調べます |
1998
- | `remove()` | void | 親子関係を解除します |
1999
- | `getLocalVariable(key: any)` | any | クラスのローカル変数空間から値を取得 |
2000
- | `setLocalVariable(key: any, value: any)` | void | クラスのローカル変数空間へ値を保存 |
2001
- | `hasLocalVariable(key: any)` | boolean | クラスのローカル変数空間に値があるかどうかを判断します |
2002
- | `deleteLocalVariable(key: any)` | void | クラスのローカル変数空間の値を削除 |
2003
- | `getGlobalVariable(key: any)` | any | グローバル変数空間から値を取得 |
2004
- | `setGlobalVariable(key: any, value: any)` | void | グローバル変数空間へ値を保存 |
2005
- | `hasGlobalVariable(key: any)` | boolean | グローバル変数空間に値があるかどうかを判断します |
2006
- | `deleteGlobalVariable(key: any)` | void | グローバル変数空間の値を削除 |
2007
- | `clearGlobalVariable()` | void | グローバル変数空間に値を全てクリアします |
2008
-
2009
- ## 使用例
2010
-
2011
- ### ボタンとして使用
2012
-
2013
- ```typescript
2014
- const { Sprite, Shape } = next2d.display;
2015
- const { PointerEvent } = next2d.events;
2016
-
2017
- const button = new Sprite();
2018
-
2019
- // ボタンモードを有効化
2020
- button.buttonMode = true;
2021
- button.useHandCursor = true;
2022
-
2023
- // 背景用のShapeを作成
2024
- const bg = new Shape();
2025
- bg.graphics.beginFill(0x3498db);
2026
- bg.graphics.drawRoundRect(0, 0, 120, 40, 8, 8);
2027
- bg.graphics.endFill();
2028
- button.addChild(bg);
2029
-
2030
- // クリックイベント
2031
- button.addEventListener(PointerEvent.POINTER_DOWN, () => {
2032
- console.log("ボタンがクリックされました");
2033
- });
2034
-
2035
- stage.addChild(button);
2036
- ```
2037
-
2038
- ### マスクとして使用
2039
-
2040
- ```typescript
2041
- const { Sprite, Shape } = next2d.display;
2042
-
2043
- const container = new Sprite();
2044
-
2045
- // コンテンツ用のShape
2046
- const content = new Shape();
2047
- content.graphics.beginFill(0xFF0000);
2048
- content.graphics.drawRect(0, 0, 200, 200);
2049
- content.graphics.endFill();
2050
- container.addChild(content);
2051
-
2052
- // マスク用のShape
2053
- const maskShape = new Shape();
2054
- maskShape.graphics.beginFill(0xFFFFFF);
2055
- maskShape.graphics.drawCircle(100, 100, 50);
2056
- maskShape.graphics.endFill();
2057
-
2058
- // マスクを適用
2059
- container.mask = maskShape;
2060
-
2061
- stage.addChild(container);
2062
- stage.addChild(maskShape);
2063
- ```
2064
-
2065
- ### ドラッグ&ドロップ
2066
-
2067
- ```typescript
2068
- const { Sprite, Shape } = next2d.display;
2069
- const { PointerEvent } = next2d.events;
2070
- const { Rectangle } = next2d.geom;
2071
-
2072
- const draggable = new Sprite();
2073
-
2074
- // 背景用のShapeを作成
2075
- const bg = new Shape();
2076
- bg.graphics.beginFill(0x3498db);
2077
- bg.graphics.drawRect(0, 0, 100, 100);
2078
- bg.graphics.endFill();
2079
- draggable.addChild(bg);
2080
-
2081
- // ドラッグ開始
2082
- draggable.addEventListener(PointerEvent.POINTER_DOWN, () => {
2083
- // ドラッグを開始(中心をロック、境界を指定)
2084
- draggable.startDrag(true, new Rectangle(0, 0, 400, 300));
2085
- });
2086
-
2087
- // ドラッグ終了
2088
- draggable.addEventListener(PointerEvent.POINTER_UP, () => {
2089
- draggable.stopDrag();
2090
- });
2091
-
2092
- stage.addChild(draggable);
2093
- ```
2094
-
2095
- ### 子オブジェクトの管理
2096
-
2097
- ```typescript
2098
- const { Sprite, Shape } = next2d.display;
2099
-
2100
- const container = new Sprite();
2101
-
2102
- // 複数のShapeを子として追加
2103
- for (let i = 0; i < 5; i++) {
2104
- const shape = new Shape();
2105
- shape.graphics.beginFill(0xFF0000 + i * 0x003300);
2106
- shape.graphics.drawCircle(0, 0, 20);
2107
- shape.graphics.endFill();
2108
- shape.x = i * 50;
2109
- shape.name = "circle" + i;
2110
- container.addChild(shape);
2111
- }
2112
-
2113
- // 名前で子オブジェクトを取得
2114
- const circle2 = container.getChildByName("circle2");
2115
-
2116
- // 子の数を取得
2117
- console.log(container.numChildren); // 5
2118
-
2119
- stage.addChild(container);
2120
- ```
2121
-
2122
- ## 関連項目
2123
-
2124
- - [DisplayObject](/ja/reference/player/display-object)
2125
- - [MovieClip](/ja/reference/player/movie-clip)
2126
- - [Shape](/ja/reference/player/shape)
2127
-
2128
- ---
2129
-
2130
- # TextField
2131
-
2132
- TextFieldは、テキストの表示と編集を行うDisplayObjectです。ラベル表示から入力フォームまで、テキスト関連の機能を提供します。
2133
-
2134
- ## 継承関係
2135
-
2136
- ```mermaid
2137
- classDiagram
2138
- DisplayObject <|-- InteractiveObject
2139
- InteractiveObject <|-- TextField
2140
-
2141
- class TextField {
2142
- +text: String
2143
- +textColor: Number
2144
- +type: String
2145
- +setTextFormat()
2146
- }
2147
- ```
2148
-
2149
- ## プロパティ
2150
-
2151
- ### テキスト関連
2152
-
2153
- | プロパティ | 型 | 説明 |
2154
- |-----------|------|------|
2155
- | `text` | string | テキストフィールド内の現在のテキストであるストリング |
2156
- | `htmlText` | string | テキストフィールドの内容をHTMLで表した文字列 |
2157
- | `length` | number | テキストフィールド内の文字数(読み取り専用) |
2158
- | `maxChars` | number | ユーザーが入力できる最大文字数(0で無制限) |
2159
- | `restrict` | string | ユーザーがテキストフィールドに入力できる文字のセットを指定 |
2160
- | `defaultTextFormat` | TextFormat | テキストに適用するデフォルトのフォーマット |
2161
- | `stopIndex` | number | テキストの任意の表示終了位置の設定(デフォルト: -1) |
2162
-
2163
- ### 表示関連
2164
-
2165
- | プロパティ | 型 | 説明 |
2166
- |-----------|------|------|
2167
- | `width` | number | 表示オブジェクトの幅(ピクセル単位) |
2168
- | `height` | number | 表示オブジェクトの高さ(ピクセル単位) |
2169
- | `textWidth` | number | テキストの幅(ピクセル単位、読み取り専用) |
2170
- | `textHeight` | number | テキストの高さ(ピクセル単位、読み取り専用) |
2171
- | `autoSize` | string | テキストフィールドの自動的な拡大/縮小および整列を制御("none", "left", "center", "right") |
2172
- | `autoFontSize` | boolean | テキストサイズの自動的な拡大/縮小および整列を制御(デフォルト: false) |
2173
- | `wordWrap` | boolean | テキストフィールドのテキストを折り返すかどうか(デフォルト: false) |
2174
- | `multiline` | boolean | 複数行テキストフィールドであるかどうか(デフォルト: false) |
2175
- | `numLines` | number | テキストの行数(読み取り専用) |
2176
-
2177
- ### 境界線・背景関連
2178
-
2179
- | プロパティ | 型 | 説明 |
2180
- |-----------|------|------|
2181
- | `background` | boolean | テキストフィールドに背景の塗りつぶしがあるかどうか(デフォルト: false) |
2182
- | `backgroundColor` | number | テキストフィールドの背景の色(デフォルト: 0xffffff) |
2183
- | `border` | boolean | テキストフィールドに境界線があるかどうか(デフォルト: false) |
2184
- | `borderColor` | number | テキストフィールドの境界線の色(デフォルト: 0x000000) |
2185
-
2186
- ### 輪郭関連
2187
-
2188
- | プロパティ | 型 | 説明 |
2189
- |-----------|------|------|
2190
- | `thickness` | number | 輪郭のテキスト幅。0(デフォルト値)で無効 |
2191
- | `thicknessColor` | number | 輪郭のテキストの色(16進数形式、デフォルト: 0) |
2192
-
2193
- ### 入力関連
2194
-
2195
- | プロパティ | 型 | 説明 |
2196
- |-----------|------|------|
2197
- | `type` | string | テキストフィールドのタイプ("static", "dynamic", "input")(デフォルト: "static") |
2198
- | `focus` | boolean | テキストフィールドがフォーカスを持つかどうか(デフォルト: false) |
2199
- | `focusVisible` | boolean | テキストフィールドの点滅線の表示・非表示を制御(デフォルト: false) |
2200
- | `focusIndex` | number | テキストフィールドのフォーカス位置のインデックス(デフォルト: -1) |
2201
- | `selectIndex` | number | テキストフィールドの選択位置のインデックス(デフォルト: -1) |
2202
- | `compositionStartIndex` | number | テキストフィールドのコンポジション開始インデックス(デフォルト: -1) |
2203
- | `compositionEndIndex` | number | テキストフィールドのコンポジション終了インデックス(デフォルト: -1) |
2204
-
2205
- ### スクロール関連
2206
-
2207
- | プロパティ | 型 | 説明 |
2208
- |-----------|------|------|
2209
- | `scrollX` | number | x軸のスクロール位置(デフォルト: 0) |
2210
- | `scrollY` | number | y軸のスクロール位置(デフォルト: 0) |
2211
- | `scrollEnabled` | boolean | スクロール機能のON/OFFの制御(デフォルト: true) |
2212
- | `xScrollShape` | Shape | xスクロールバーの表示用のShapeオブジェクト(読み取り専用) |
2213
- | `yScrollShape` | Shape | yスクロールバーの表示用のShapeオブジェクト(読み取り専用) |
2214
-
2215
- ### DisplayObjectから継承されるプロパティ
2216
-
2217
- | プロパティ | 型 | 説明 |
2218
- |-----------|------|------|
2219
- | `cacheAsBitmap` | Matrix \| null | テキスト描画をビットマップとしてキャッシュするMatrix(nullで解除) |
2220
-
2221
- ## メソッド
2222
-
2223
- | メソッド | 戻り値 | 説明 |
2224
- |---------|--------|------|
2225
- | `appendText(newText: string)` | void | 指定されたストリングをテキストフィールドのテキストの最後に付加します |
2226
- | `insertText(newText: string)` | void | テキストフィールドのフォーカス位置にテキストを追加します |
2227
- | `deleteText()` | void | テキストフィールドの選択範囲を削除します |
2228
- | `getLineText(lineIndex: number)` | string | 指定された行のテキストを返します |
2229
- | `replaceText(newText: string, beginIndex: number, endIndex: number)` | void | 指定された文字範囲を新しいテキストの内容に置き換えます |
2230
- | `selectAll()` | void | テキストフィールドのすべてのテキストを選択します |
2231
- | `copy()` | void | テキストフィールドの選択範囲をコピーします |
2232
- | `paste()` | void | コピーしたテキストを選択範囲に貼り付けます |
2233
- | `setFocusIndex(stageX: number, stageY: number, selected?: boolean)` | void | テキストフィールドのフォーカス位置を設定します |
2234
- | `keyDown(event: KeyboardEvent)` | void | キーダウンイベントを処理します |
2235
-
2236
- ## TextFormat
2237
-
2238
- テキストのスタイルを設定するクラスです。
2239
-
2240
- ### プロパティ
2241
-
2242
- | プロパティ | 型 | 説明 |
2243
- |-----------|------|------|
2244
- | `font` | String | フォント名 |
2245
- | `size` | Number | フォントサイズ |
2246
- | `color` | Number | テキスト色 |
2247
- | `bold` | Boolean | 太字 |
2248
- | `italic` | Boolean | 斜体 |
2249
- | `align` | String | 配置("left", "center", "right") |
2250
- | `leading` | Number | 行間(ピクセル) |
2251
- | `letterSpacing` | Number | 文字間隔(ピクセル) |
2252
-
2253
- ## 使用例
2254
-
2255
- ### 基本的なテキスト表示
2256
-
2257
- ```typescript
2258
- const { TextField } = next2d.text;
2259
-
2260
- const textField = new TextField();
2261
- textField.text = "Hello, Next2D!";
2262
- textField.x = 100;
2263
- textField.y = 100;
2264
-
2265
- stage.addChild(textField);
2266
- ```
2267
-
2268
- ### TextFormatの適用
2269
-
2270
- ```typescript
2271
- const { TextField, TextFormat } = next2d.text;
2272
-
2273
- const textField = new TextField();
2274
- textField.text = "スタイル付きテキスト";
2275
-
2276
- // TextFormatを作成
2277
- const format = new TextFormat();
2278
- format.font = "Arial";
2279
- format.size = 24;
2280
- format.color = 0x3498db;
2281
- format.bold = true;
2282
-
2283
- // フォーマットを適用
2284
- textField.setTextFormat(format);
2285
-
2286
- // デフォルトフォーマットとして設定
2287
- textField.defaultTextFormat = format;
2288
-
2289
- stage.addChild(textField);
2290
- ```
2291
-
2292
- ### 自動サイズ調整
2293
-
2294
- ```typescript
2295
- const { TextField } = next2d.text;
2296
-
2297
- const textField = new TextField();
2298
- textField.autoSize = "left"; // テキストに合わせて自動拡張
2299
- textField.text = "このテキストに合わせてサイズが調整されます";
2300
-
2301
- stage.addChild(textField);
2302
- ```
2303
-
2304
- ### 複数行テキスト
2305
-
2306
- ```typescript
2307
- const { TextField } = next2d.text;
2308
-
2309
- const textField = new TextField();
2310
- textField.width = 200;
2311
- textField.multiline = true;
2312
- textField.wordWrap = true;
2313
- textField.text = "これは複数行のテキストです。自動的に折り返されます。";
2314
-
2315
- stage.addChild(textField);
2316
- ```
2317
-
2318
- ### 入力フィールド
2319
-
2320
- ```typescript
2321
- const { TextField } = next2d.text;
2322
-
2323
- const inputField = new TextField();
2324
- inputField.type = "input";
2325
- inputField.width = 200;
2326
- inputField.height = 30;
2327
- inputField.border = true;
2328
- inputField.borderColor = 0xcccccc;
2329
- inputField.background = true;
2330
- inputField.backgroundColor = 0xffffff;
2331
-
2332
- // プレースホルダーの代わり
2333
- inputField.text = "";
2334
-
2335
- // 入力制限(数字のみ)
2336
- inputField.restrict = "0-9";
2337
-
2338
- // 入力イベント
2339
- inputField.addEventListener("change", (event) => {
2340
- console.log("入力値:", inputField.text);
2341
- });
2342
-
2343
- stage.addChild(inputField);
2344
- ```
2345
-
2346
- ### パスワードフィールド
2347
-
2348
- ```typescript
2349
- const { TextField } = next2d.text;
2350
-
2351
- const passwordField = new TextField();
2352
- passwordField.type = "input";
2353
- passwordField.displayAsPassword = true;
2354
- passwordField.width = 200;
2355
- passwordField.height = 30;
2356
- passwordField.border = true;
2357
- passwordField.borderColor = 0xcccccc;
2358
-
2359
- stage.addChild(passwordField);
2360
- ```
2361
-
2362
- ### HTMLテキスト
2363
-
2364
- ```typescript
2365
- const { TextField } = next2d.text;
2366
-
2367
- const textField = new TextField();
2368
- textField.width = 300;
2369
- textField.multiline = true;
2370
- textField.htmlText = `
2371
- <font face="Arial" size="20" color="#3498db">
2372
- <b>太字テキスト</b><br/>
2373
- <i>斜体テキスト</i><br/>
2374
- <font color="#e74c3c">赤いテキスト</font>
2375
- </font>
2376
- `;
2377
-
2378
- stage.addChild(textField);
2379
- ```
2380
-
2381
- ### スクロール可能なテキスト
2382
-
2383
- ```typescript
2384
- const { TextField } = next2d.text;
2385
-
2386
- const textField = new TextField();
2387
- textField.width = 200;
2388
- textField.height = 100;
2389
- textField.multiline = true;
2390
- textField.wordWrap = true;
2391
- textField.border = true;
2392
- textField.text = "長いテキスト...\n".repeat(20);
2393
-
2394
- // スクロール操作
2395
- function scrollUp() {
2396
- if (textField.scrollY > 0) {
2397
- textField.scrollY -= 10;
2398
- }
2399
- }
2400
-
2401
- function scrollDown() {
2402
- textField.scrollY += 10;
2403
- }
2404
-
2405
- stage.addChild(textField);
2406
- ```
2407
-
2408
- ### 動的なテキスト更新
2409
-
2410
- ```typescript
2411
- const { TextField, TextFormat } = next2d.text;
2412
-
2413
- const scoreField = new TextField();
2414
- scoreField.autoSize = "left";
2415
-
2416
- const format = new TextFormat();
2417
- format.font = "Arial";
2418
- format.size = 32;
2419
- format.color = 0xffffff;
2420
- scoreField.defaultTextFormat = format;
2421
-
2422
- let score = 0;
2423
-
2424
- function updateScore(points) {
2425
- score += points;
2426
- scoreField.text = `Score: ${score}`;
2427
- }
2428
-
2429
- updateScore(0);
2430
- stage.addChild(scoreField);
2431
- ```
2432
-
2433
- ### テキストの輪郭効果
2434
-
2435
- ```typescript
2436
- const { TextField, TextFormat } = next2d.text;
2437
-
2438
- const textField = new TextField();
2439
- textField.autoSize = "left";
2440
-
2441
- const format = new TextFormat();
2442
- format.font = "Arial";
2443
- format.size = 48;
2444
- format.color = 0xffffff;
2445
- textField.defaultTextFormat = format;
2446
-
2447
- textField.text = "輪郭付きテキスト";
2448
- textField.thickness = 2;
2449
- textField.thicknessColor = 0x000000;
2450
-
2451
- stage.addChild(textField);
2452
- ```
2453
-
2454
- ### テキストの一部置換
2455
-
2456
- ```typescript
2457
- const { TextField } = next2d.text;
2458
-
2459
- const textField = new TextField();
2460
- textField.autoSize = "left";
2461
- textField.text = "Hello World!";
2462
-
2463
- // "World"を"Next2D"に置き換え
2464
- textField.replaceText("Next2D", 6, 11);
2465
- // 結果: "Hello Next2D!"
2466
-
2467
- stage.addChild(textField);
2468
- ```
2469
-
2470
- ### RPGゲーム風台詞アニメーション(stopIndex)
2471
-
2472
- `stopIndex` を使うと、テキストを先頭から順番に表示するタイプライター効果を実現できます。
2473
- RPGゲームの台詞ウィンドウのような演出に適しています。
2474
- `stopIndex` のデフォルト値は `-1`(全文字を表示)で、`0` にすると文字が非表示になります。
2475
-
2476
- ```typescript
2477
- const { TextField } = next2d.text;
2478
- const { Tween, Job } = next2d.ui;
2479
-
2480
- const textField = new TextField();
2481
- textField.width = 300;
2482
- textField.height = 80;
2483
- textField.multiline = true;
2484
- textField.wordWrap = true;
2485
- textField.text = "勇者よ、魔王を倒してくれ!世界の命運はそなたにかかっている。";
2486
-
2487
- stage.addChild(textField);
2488
-
2489
- // stopIndex を 0 → text.length まで 5秒かけてアニメーション(0.5秒の遅延あり)
2490
- const job = Tween.add(
2491
- textField,
2492
- { stopIndex: 0 },
2493
- { stopIndex: textField.text.length },
2494
- 0.5,
2495
- 5
2496
- );
2497
-
2498
- // 表示完了後のコールバック
2499
- job.addEventListener(Job.COMPLETE, () => {
2500
- console.log("台詞表示完了");
2501
- });
2502
-
2503
- job.start();
2504
- ```
2505
-
2506
- ## イベント
2507
-
2508
- | イベント | 説明 |
2509
- |----------|------|
2510
- | `change` | テキストが変更されたとき |
2511
- | `focus` | フォーカスを得たとき |
2512
- | `blur` | フォーカスを失ったとき |
2513
- | `keyDown` | キーが押されたとき |
2514
- | `keyUp` | キーが離されたとき |
2515
-
2516
- ```typescript
2517
- const { TextField } = next2d.text;
2518
-
2519
- const inputField = new TextField();
2520
- inputField.type = "input";
2521
-
2522
- // Enterキーでフォーム送信
2523
- inputField.addEventListener("keyDown", (event) => {
2524
- if (event.keyCode === 13) { // Enter
2525
- submitForm(inputField.text);
2526
- }
2527
- });
2528
-
2529
- stage.addChild(inputField);
2530
- ```
2531
-
2532
- ## 関連項目
2533
-
2534
- - [DisplayObject](/ja/reference/player/display-object)
2535
- - [イベントシステム](/ja/reference/player/events)
2536
-
2537
- ---
2538
-
2539
- # Tweenアニメーション
2540
-
2541
- Next2D Playerでは、`@next2d/ui`パッケージのTweenシステムを使用して、プログラムによるアニメーションを実装できます。位置、サイズ、透明度などのプロパティを滑らかに変化させることができます。
2542
-
2543
- ## Tweenの基本概念
2544
-
2545
- ```mermaid
2546
- flowchart LR
2547
- Start["開始値"] -->|イージング関数| Progress["進行度 0→1"]
2548
- Progress --> End["終了値"]
2549
-
2550
- subgraph Easing["イージング"]
2551
- Linear["linear"]
2552
- InQuad["inQuad"]
2553
- OutQuad["outQuad"]
2554
- InOutQuad["inOutQuad"]
2555
- end
2556
- ```
2557
-
2558
- ## Tween.add()
2559
-
2560
- `Tween.add()`メソッドでアニメーション用の`Job`インスタンスを作成します。
2561
-
2562
- ```typescript
2563
- const { Tween, Easing } = next2d.ui;
2564
-
2565
- const job = Tween.add(
2566
- target, // アニメーション対象オブジェクト
2567
- from, // 開始プロパティ値
2568
- to, // 終了プロパティ値
2569
- delay, // 遅延時間(秒、デフォルト: 0)
2570
- duration, // アニメーション時間(秒、デフォルト: 1)
2571
- ease // イージング関数(デフォルト: linear)
2572
- );
2573
-
2574
- // アニメーションを開始
2575
- job.start();
2576
- ```
2577
-
2578
- ### パラメータ
2579
-
2580
- | パラメータ | 型 | デフォルト | 説明 |
2581
- |-----------|------|----------|------|
2582
- | `target` | any | - | アニメーション対象オブジェクト |
2583
- | `from` | object | - | 開始プロパティ値 |
2584
- | `to` | object | - | 終了プロパティ値 |
2585
- | `delay` | number | 0 | アニメーション開始前の遅延(秒) |
2586
- | `duration` | number | 1 | アニメーション継続時間(秒) |
2587
- | `ease` | Function \| null | null | イージング関数(デフォルトはlinear) |
2588
-
2589
- ### 戻り値
2590
-
2591
- `Job` - アニメーションジョブインスタンス
2592
-
2593
- ## Job クラス
2594
-
2595
- Jobクラスは個別のアニメーションジョブを管理します。EventDispatcherを継承しています。
2596
-
2597
- ### メソッド
2598
-
2599
- | メソッド | 戻り値 | 説明 |
2600
- |---------|--------|------|
2601
- | `start()` | void | アニメーションを開始します |
2602
- | `stop()` | void | アニメーションを停止します |
2603
- | `chain(nextJob: Job \| null)` | Job \| null | このジョブの完了後に別のジョブを連結します |
2604
-
2605
- ### プロパティ
2606
-
2607
- | プロパティ | 型 | 説明 |
2608
- |-----------|------|------|
2609
- | `target` | any | 対象オブジェクト |
2610
- | `from` | object | 開始値 |
2611
- | `to` | object | 終了値 |
2612
- | `delay` | number | 遅延時間 |
2613
- | `duration` | number | 継続時間 |
2614
- | `ease` | Function | イージング関数 |
2615
- | `currentTime` | number | 現在のアニメーション時間 |
2616
- | `nextJob` | Job \| null | 次の連結ジョブ |
2617
-
2618
- ### イベント
2619
-
2620
- | イベント | 説明 |
2621
- |----------|------|
2622
- | `enterFrame` | 各アニメーションフレームで発行 |
2623
- | `complete` | アニメーション完了時に発行 |
2624
-
2625
- ## イージング関数
2626
-
2627
- `Easing`クラスは、11種類のイージングタイプでIn、Out、InOutのバリエーションを含む32種類のイージング関数を提供します。
2628
-
2629
- ### Linear / リニア
2630
- - `Easing.linear` - 一定速度
2631
-
2632
- ### Quadratic (Quad) / 二次関数
2633
- - `Easing.inQuad` - ゼロ速度から加速
2634
- - `Easing.outQuad` - ゼロ速度まで減速
2635
- - `Easing.inOutQuad` - 中間まで加速、その後減速
2636
-
2637
- ### Cubic / 三次関数
2638
- - `Easing.inCubic` / `Easing.outCubic` / `Easing.inOutCubic`
2639
-
2640
- ### Quartic (Quart) / 四次関数
2641
- - `Easing.inQuart` / `Easing.outQuart` / `Easing.inOutQuart`
2642
-
2643
- ### Quintic (Quint) / 五次関数
2644
- - `Easing.inQuint` / `Easing.outQuint` / `Easing.inOutQuint`
2645
-
2646
- ### Sinusoidal (Sine) / 正弦波
2647
- - `Easing.inSine` / `Easing.outSine` / `Easing.inOutSine`
2648
-
2649
- ### Exponential (Expo) / 指数関数
2650
- - `Easing.inExpo` / `Easing.outExpo` / `Easing.inOutExpo`
2651
-
2652
- ### Circular (Circ) / 円形
2653
- - `Easing.inCirc` / `Easing.outCirc` / `Easing.inOutCirc`
2654
-
2655
- ### Elastic / 弾性
2656
- - `Easing.inElastic` / `Easing.outElastic` / `Easing.inOutElastic`
2657
-
2658
- ### Back / バック
2659
- - `Easing.inBack` / `Easing.outBack` / `Easing.inOutBack`
2660
-
2661
- ### Bounce / バウンス
2662
- - `Easing.inBounce` / `Easing.outBounce` / `Easing.inOutBounce`
2663
-
2664
- ### イージング関数のパラメータ
2665
-
2666
- すべてのイージング関数は4つのパラメータを受け取ります:
2667
-
2668
- ```typescript
2669
- ease(t: number, b: number, c: number, d: number): number
2670
- ```
2671
-
2672
- - `t` - 現在の時間 (0 to d)
2673
- - `b` - 開始値
2674
- - `c` - 変化量 (終了値 - 開始値)
2675
- - `d` - 継続時間
2676
-
2677
- ## 使用例
2678
-
2679
- ### 基本的な移動アニメーション
2680
-
2681
- ```typescript
2682
- const { Tween, Easing } = next2d.ui;
2683
-
2684
- const sprite = new Sprite();
2685
- stage.addChild(sprite);
2686
-
2687
- // xを0から400に1秒かけて移動
2688
- const job = Tween.add(
2689
- sprite,
2690
- { x: 0, y: 100 },
2691
- { x: 400, y: 100 },
2692
- 0,
2693
- 1,
2694
- Easing.outQuad
2695
- );
2696
-
2697
- job.start();
2698
- ```
2699
-
2700
- ### 複数プロパティの同時アニメーション
2701
-
2702
- ```typescript
2703
- const { Tween, Easing } = next2d.ui;
2704
-
2705
- // 移動 + 拡大 + フェードイン
2706
- const job = Tween.add(
2707
- sprite,
2708
- { x: 0, y: 0, scaleX: 1, scaleY: 1, alpha: 0 },
2709
- { x: 200, y: 150, scaleX: 2, scaleY: 2, alpha: 1 },
2710
- 0,
2711
- 0.5,
2712
- Easing.outCubic
2713
- );
2714
-
2715
- job.start();
2716
- ```
2717
-
2718
- ### アニメーションの連結 (chain)
2719
-
2720
- ```typescript
2721
- const { Tween, Easing } = next2d.ui;
2722
-
2723
- // 最初のアニメーション
2724
- const job1 = Tween.add(
2725
- sprite,
2726
- { x: 0 },
2727
- { x: 100 },
2728
- 0, 1,
2729
- Easing.outQuad
2730
- );
2731
-
2732
- // 2つ目のアニメーション
2733
- const job2 = Tween.add(
2734
- sprite,
2735
- { x: 100 },
2736
- { x: 200 },
2737
- 0, 1,
2738
- Easing.inQuad
2739
- );
2740
-
2741
- // 連結して実行
2742
- job1.chain(job2);
2743
- job1.start();
2744
- ```
2745
-
2746
- ### 遅延付きアニメーション
2747
-
2748
- ```typescript
2749
- const { Tween, Easing } = next2d.ui;
2750
-
2751
- // 0.5秒遅延後に1秒かけてフェードアウト
2752
- const job = Tween.add(
2753
- sprite,
2754
- { alpha: 1 },
2755
- { alpha: 0 },
2756
- 0.5,
2757
- 1,
2758
- Easing.inQuad
2759
- );
2760
-
2761
- job.start();
2762
- ```
2763
-
2764
- ### イベントの活用
2765
-
2766
- ```typescript
2767
- const { Tween, Easing } = next2d.ui;
2768
-
2769
- const job = Tween.add(
2770
- sprite,
2771
- { x: 0 },
2772
- { x: 300 },
2773
- 0, 2,
2774
- Easing.inOutQuad
2775
- );
2776
-
2777
- // フレームごとの処理
2778
- job.addEventListener("enterFrame", (event) => {
2779
- console.log("進行中:", job.currentTime);
2780
- });
2781
-
2782
- // 完了時の処理
2783
- job.addEventListener("complete", (event) => {
2784
- console.log("アニメーション完了!");
2785
- });
2786
-
2787
- job.start();
2788
- ```
2789
-
2790
- ### ゲームでの活用例
2791
-
2792
- #### キャラクタージャンプ
2793
-
2794
- ```typescript
2795
- const { Tween, Easing } = next2d.ui;
2796
-
2797
- function jump(character) {
2798
- const startY = character.y;
2799
- const jumpHeight = 100;
2800
-
2801
- // 上昇
2802
- const upJob = Tween.add(
2803
- character,
2804
- { y: startY },
2805
- { y: startY - jumpHeight },
2806
- 0, 0.3,
2807
- Easing.outQuad
2808
- );
2809
-
2810
- // 下降
2811
- const downJob = Tween.add(
2812
- character,
2813
- { y: startY - jumpHeight },
2814
- { y: startY },
2815
- 0, 0.3,
2816
- Easing.inQuad
2817
- );
2818
-
2819
- // 上昇 → 下降を連結
2820
- upJob.chain(downJob);
2821
- upJob.start();
2822
- }
2823
- ```
2824
-
2825
- #### UI表示アニメーション
2826
-
2827
- ```typescript
2828
- const { Tween, Easing } = next2d.ui;
2829
-
2830
- function showPopup(popup) {
2831
- popup.scaleX = 0;
2832
- popup.scaleY = 0;
2833
- popup.alpha = 0;
2834
-
2835
- const job = Tween.add(
2836
- popup,
2837
- { scaleX: 0, scaleY: 0, alpha: 0 },
2838
- { scaleX: 1, scaleY: 1, alpha: 1 },
2839
- 0, 0.4,
2840
- Easing.outBack
2841
- );
2842
-
2843
- job.start();
2844
- }
2845
-
2846
- function hidePopup(popup) {
2847
- const job = Tween.add(
2848
- popup,
2849
- { scaleX: 1, scaleY: 1, alpha: 1 },
2850
- { scaleX: 0, scaleY: 0, alpha: 0 },
2851
- 0, 0.2,
2852
- Easing.inQuad
2853
- );
2854
-
2855
- job.addEventListener("complete", () => {
2856
- popup.visible = false;
2857
- });
2858
-
2859
- job.start();
2860
- }
2861
- ```
2862
-
2863
- #### コイン取得エフェクト
2864
-
2865
- ```typescript
2866
- const { Tween, Easing } = next2d.ui;
2867
-
2868
- function coinCollectEffect(coin) {
2869
- const job = Tween.add(
2870
- coin,
2871
- { y: coin.y, alpha: 1, scaleX: 1, scaleY: 1 },
2872
- { y: coin.y - 50, alpha: 0, scaleX: 0.5, scaleY: 0.5 },
2873
- 0, 0.5,
2874
- Easing.outQuad
2875
- );
2876
-
2877
- job.addEventListener("enterFrame", () => {
2878
- coin.rotation += 15;
2879
- });
2880
-
2881
- job.addEventListener("complete", () => {
2882
- coin.parent?.removeChild(coin);
2883
- });
2884
-
2885
- job.start();
2886
- }
2887
- ```
2888
-
2889
- ### 停止と制御
2890
-
2891
- ```typescript
2892
- const { Tween, Easing } = next2d.ui;
2893
-
2894
- const job = Tween.add(
2895
- sprite,
2896
- { x: 0 },
2897
- { x: 400 },
2898
- 0, 2,
2899
- Easing.linear
2900
- );
2901
-
2902
- job.start();
2903
-
2904
- // 途中で停止
2905
- stopButton.addEventListener("pointerDown", () => {
2906
- job.stop();
2907
- });
2908
- ```
2909
-
2910
- ## 関連項目
2911
-
2912
- - [DisplayObject](/ja/reference/player/display-object)
2913
- - [イベントシステム](/ja/reference/player/events)
2914
-
2915
- ---
2916
-
2917
- # Video
2918
-
2919
- Videoは、動画コンテンツを再生するためのDisplayObjectです。WebM、MP4などの動画フォーマットに対応しています。
2920
-
2921
- ## 継承関係
2922
-
2923
- ```mermaid
2924
- classDiagram
2925
- DisplayObject <|-- Video
2926
-
2927
- class Video {
2928
- +src: string
2929
- +videoWidth: number
2930
- +videoHeight: number
2931
- +duration: number
2932
- +currentTime: number
2933
- +volume: number
2934
- +loop: boolean
2935
- +autoPlay: boolean
2936
- +smoothing: boolean
2937
- +paused: boolean
2938
- +muted: boolean
2939
- +loaded: boolean
2940
- +ended: boolean
2941
- +isVideo: boolean
2942
- +play() Promise~void~
2943
- +pause() void
2944
- +seek(offset) void
2945
- }
2946
- ```
2947
-
2948
- ## プロパティ
2949
-
2950
- | プロパティ | 型 | デフォルト | 説明 |
2951
- |-----------|------|----------|------|
2952
- | `src` | string | "" | ビデオコンテンツへのURLを指定します |
2953
- | `videoWidth` | number | 0 | ビデオの幅をピクセル単位で指定する整数です |
2954
- | `videoHeight` | number | 0 | ビデオの高さをピクセル単位で指定する整数です |
2955
- | `duration` | number | 0 | キーフレーム総数(動画の長さ) |
2956
- | `currentTime` | number | 0 | 現在のキーフレーム(再生位置) |
2957
- | `volume` | number | 1 | ボリュームです。範囲は 0(無音)~ 1(フルボリューム)です |
2958
- | `loop` | boolean | false | ビデオをループ再生するかどうかを指定します |
2959
- | `autoPlay` | boolean | true | ビデオの自動再生の設定 |
2960
- | `smoothing` | boolean | true | ビデオを拡大/縮小する際にスムージング(補間)するかどうかを指定します |
2961
- | `paused` | boolean | true | ビデオが一時停止しているかどうかを返します |
2962
- | `muted` | boolean | false | ビデオがミュートされているかどうかを返します |
2963
- | `loaded` | boolean | false | ビデオが読み込まれているかどうかを返します |
2964
- | `ended` | boolean | false | ビデオが終了したかどうかを返します |
2965
- | `isVideo` | boolean | true | Videoの機能を所持しているかを返却(読み取り専用) |
2966
-
2967
- ## メソッド
2968
-
2969
- | メソッド | 戻り値 | 説明 |
2970
- |---------|--------|------|
2971
- | `play()` | Promise\<void\> | ビデオファイルを再生します |
2972
- | `pause()` | void | ビデオの再生を一時停止します |
2973
- | `seek(offset: number)` | void | 指定された位置に最も近いキーフレームをシークします |
2974
-
2975
- ## 使用例
2976
-
2977
- ### 基本的な動画再生
2978
-
2979
- ```typescript
2980
- const { Video } = next2d.media;
2981
-
2982
- // Videoオブジェクトを作成(幅、高さを指定)
2983
- const video = new Video(640, 360);
2984
-
2985
- // 動画のURLを設定(設定すると自動的に読み込み開始)
2986
- video.src = "video.mp4";
2987
-
2988
- // プロパティ設定
2989
- video.autoPlay = true; // 自動再生
2990
- video.loop = false; // ループしない
2991
- video.smoothing = true; // スムージング有効
2992
-
2993
- // ステージに追加
2994
- stage.addChild(video);
2995
- ```
2996
-
2997
- ### 再生コントロール
2998
-
2999
- ```typescript
3000
- const { Video } = next2d.media;
3001
- const { PointerEvent } = next2d.events;
3002
-
3003
- const video = new Video(640, 360);
3004
- video.autoPlay = false; // 自動再生を無効化
3005
- video.src = "video.mp4";
3006
-
3007
- stage.addChild(video);
3008
-
3009
- // 再生ボタン
3010
- playButton.addEventListener(PointerEvent.POINTER_DOWN, async () => {
3011
- await video.play();
3012
- });
3013
-
3014
- // 一時停止ボタン
3015
- pauseButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
3016
- video.pause();
3017
- });
3018
-
3019
- // 停止ボタン(先頭に戻って停止)
3020
- stopButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
3021
- video.pause();
3022
- video.seek(0);
3023
- });
3024
-
3025
- // 10秒進む
3026
- forwardButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
3027
- video.seek(video.currentTime + 10);
3028
- });
3029
-
3030
- // 10秒戻る
3031
- backButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
3032
- video.seek(Math.max(0, video.currentTime - 10));
3033
- });
3034
- ```
3035
-
3036
- ### イベントリスニング
3037
-
3038
- ```typescript
3039
- const { Video } = next2d.media;
3040
- const { VideoEvent } = next2d.events;
3041
-
3042
- const video = new Video(640, 360);
3043
-
3044
- // 再生イベント
3045
- video.addEventListener(VideoEvent.PLAY, () => {
3046
- console.log("再生リクエスト");
3047
- });
3048
-
3049
- // 再生開始イベント
3050
- video.addEventListener(VideoEvent.PLAYING, () => {
3051
- console.log("再生開始");
3052
- });
3053
-
3054
- // 一時停止イベント
3055
- video.addEventListener(VideoEvent.PAUSE, () => {
3056
- console.log("一時停止");
3057
- });
3058
-
3059
- // シークイベント
3060
- video.addEventListener(VideoEvent.SEEK, () => {
3061
- console.log("シーク:", video.currentTime);
3062
- });
3063
-
3064
- video.src = "video.mp4";
3065
- stage.addChild(video);
3066
- ```
3067
-
3068
- ### 再生進捗の表示
3069
-
3070
- ```typescript
3071
- const { Video } = next2d.media;
3072
-
3073
- const video = new Video(640, 360);
3074
- video.src = "video.mp4";
3075
- stage.addChild(video);
3076
-
3077
- // フレームごとに進捗を更新
3078
- stage.addEventListener("enterFrame", () => {
3079
- if (video.duration > 0) {
3080
- const progress = video.currentTime / video.duration;
3081
- progressBar.scaleX = progress;
3082
- timeLabel.text = formatTime(video.currentTime) + " / " + formatTime(video.duration);
3083
- }
3084
- });
3085
-
3086
- function formatTime(seconds) {
3087
- const min = Math.floor(seconds / 60);
3088
- const sec = Math.floor(seconds % 60);
3089
- return `${min}:${sec.toString().padStart(2, '0')}`;
3090
- }
3091
- ```
3092
-
3093
- ### 音量コントロール
3094
-
3095
- ```typescript
3096
- const { Video } = next2d.media;
3097
-
3098
- const video = new Video(640, 360);
3099
- video.src = "video.mp4";
3100
- video.volume = 0.5; // 50%
3101
-
3102
- stage.addChild(video);
3103
-
3104
- // ミュートトグル
3105
- muteButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
3106
- video.muted = !video.muted;
3107
- });
3108
- ```
3109
-
3110
- ### ループ再生
3111
-
3112
- ```typescript
3113
- const { Video } = next2d.media;
3114
-
3115
- const video = new Video(640, 360);
3116
- video.loop = true; // ループ有効
3117
- video.src = "video.mp4";
3118
-
3119
- stage.addChild(video);
3120
- ```
3121
-
3122
- ## VideoEvent
3123
-
3124
- | イベント | 説明 |
3125
- |----------|------|
3126
- | `VideoEvent.PLAY` | 再生がリクエストされた時 |
3127
- | `VideoEvent.PLAYING` | 再生が開始された時 |
3128
- | `VideoEvent.PAUSE` | 一時停止時 |
3129
- | `VideoEvent.SEEK` | シーク時 |
3130
-
3131
- ## サポートフォーマット
3132
-
3133
- | フォーマット | 拡張子 | 対応状況 |
3134
- |--------------|--------|----------|
3135
- | MP4 (H.264) | .mp4 | 推奨 |
3136
- | WebM (VP8/VP9) | .webm | 対応 |
3137
- | Ogg Theora | .ogv | ブラウザ依存 |
3138
-
3139
- ## 関連項目
3140
-
3141
- - [DisplayObject](/ja/reference/player/display-object)
3142
- - [イベントシステム](/ja/reference/player/events)
3143
-
3144
- ---
3145
-
3146
- # フィルター
3147
-
3148
- Next2D Playerは、DisplayObjectに適用できる様々なビジュアルフィルターを提供しています。
3149
-
3150
- ## フィルターの適用方法
3151
-
3152
- ```typescript
3153
- const { Sprite } = next2d.display;
3154
- const { BlurFilter, DropShadowFilter, GlowFilter } = next2d.filters;
3155
-
3156
- const sprite = new Sprite();
3157
-
3158
- // 単一のフィルター
3159
- sprite.filters = [new BlurFilter(4, 4)];
3160
-
3161
- // 複数のフィルター
3162
- sprite.filters = [
3163
- new DropShadowFilter(4, 45, 0x000000, 0.5),
3164
- new GlowFilter(0xff0000, 1, 8, 8)
3165
- ];
3166
-
3167
- // フィルターの削除
3168
- sprite.filters = null;
3169
- ```
3170
-
3171
- ## 利用可能なフィルター
3172
-
3173
- | フィルター | 説明 |
3174
- |-----------|------|
3175
- | BlurFilter | ぼかし効果 |
3176
- | DropShadowFilter | ドロップシャドウ効果 |
3177
- | GlowFilter | グロー効果 |
3178
- | BevelFilter | ベベル効果 |
3179
- | ColorMatrixFilter | カラーマトリックス変換 |
3180
- | ConvolutionFilter | 畳み込み効果 |
3181
- | DisplacementMapFilter | 変位マップ効果 |
3182
- | GradientBevelFilter | グラデーションベベル効果 |
3183
- | GradientGlowFilter | グラデーショングロー効果 |
3184
-
3185
- ---
3186
-
3187
- ## BlurFilter
3188
-
3189
- ぼかし効果を適用します。ソフトフォーカスからガウスぼかしまで作成できます。
3190
-
3191
- ```typescript
3192
- const { BlurFilter } = next2d.filters;
3193
-
3194
- new BlurFilter(blurX, blurY, quality);
3195
- ```
3196
-
3197
- ### プロパティ
3198
-
3199
- | プロパティ | 型 | デフォルト | 説明 |
3200
- |-----------|------|----------|------|
3201
- | blurX | number | 4 | 水平方向のぼかし量(0〜255) |
3202
- | blurY | number | 4 | 垂直方向のぼかし量(0〜255) |
3203
- | quality | number | 1 | ぼかしの実行回数(0〜15) |
3204
-
3205
- ---
3206
-
3207
- ## DropShadowFilter
3208
-
3209
- ドロップシャドウ効果を適用します。内側シャドウ、外側シャドウ、ノックアウトモードなどのスタイルオプションがあります。
3210
-
3211
- ```typescript
3212
- const { DropShadowFilter } = next2d.filters;
3213
-
3214
- new DropShadowFilter(
3215
- distance, angle, color, alpha,
3216
- blurX, blurY, strength, quality,
3217
- inner, knockout, hideObject
3218
- );
3219
- ```
3220
-
3221
- ### プロパティ
3222
-
3223
- | プロパティ | 型 | デフォルト | 説明 |
3224
- |-----------|------|----------|------|
3225
- | alpha | number | 1 | シャドウのアルファ透明度(0〜1) |
3226
- | angle | number | 45 | シャドウの角度(-360〜360度) |
3227
- | blurX | number | 4 | 水平方向のぼかし量(0〜255) |
3228
- | blurY | number | 4 | 垂直方向のぼかし量(0〜255) |
3229
- | color | number | 0 | シャドウの色(0x000000〜0xFFFFFF) |
3230
- | distance | number | 4 | シャドウのオフセット距離(-255〜255ピクセル) |
3231
- | hideObject | boolean | false | オブジェクトを非表示にするかどうか |
3232
- | inner | boolean | false | 内側シャドウにするかどうか |
3233
- | knockout | boolean | false | ノックアウト効果を適用するかどうか |
3234
- | quality | number | 1 | ぼかしの実行回数(0〜15) |
3235
- | strength | number | 1 | インプリントの強さ(0〜255) |
3236
-
3237
- ---
3238
-
3239
- ## GlowFilter
3240
-
3241
- グロー効果を適用します。内側グロー、外側グロー、ノックアウトモードなどのスタイルオプションがあります。
3242
-
3243
- ```typescript
3244
- const { GlowFilter } = next2d.filters;
3245
-
3246
- new GlowFilter(
3247
- color, alpha, blurX, blurY,
3248
- strength, quality, inner, knockout
3249
- );
3250
- ```
3251
-
3252
- ### プロパティ
3253
-
3254
- | プロパティ | 型 | デフォルト | 説明 |
3255
- |-----------|------|----------|------|
3256
- | alpha | number | 1 | グローのアルファ透明度(0〜1) |
3257
- | blurX | number | 4 | 水平方向のぼかし量(0〜255) |
3258
- | blurY | number | 4 | 垂直方向のぼかし量(0〜255) |
3259
- | color | number | 0 | グローの色(0x000000〜0xFFFFFF) |
3260
- | inner | boolean | false | 内側グローにするかどうか |
3261
- | knockout | boolean | false | ノックアウト効果を適用するかどうか |
3262
- | quality | number | 1 | ぼかしの実行回数(0〜15) |
3263
- | strength | number | 1 | インプリントの強さ(0〜255) |
3264
-
3265
- ---
3266
-
3267
- ## BevelFilter
3268
-
3269
- ベベル効果を適用します。オブジェクトを3次元的に表現できます。
3270
-
3271
- ```typescript
3272
- const { BevelFilter } = next2d.filters;
3273
-
3274
- new BevelFilter(
3275
- distance, angle, highlightColor, highlightAlpha,
3276
- shadowColor, shadowAlpha, blurX, blurY,
3277
- strength, quality, type, knockout
3278
- );
3279
- ```
3280
-
3281
- ### プロパティ
3282
-
3283
- | プロパティ | 型 | デフォルト | 説明 |
3284
- |-----------|------|----------|------|
3285
- | angle | number | 45 | ベベルの角度(-360〜360度) |
3286
- | blurX | number | 4 | 水平方向のぼかし量(0〜255) |
3287
- | blurY | number | 4 | 垂直方向のぼかし量(0〜255) |
3288
- | distance | number | 4 | ベベルのオフセット距離(-255〜255ピクセル) |
3289
- | highlightAlpha | number | 1 | ハイライトのアルファ透明度(0〜1) |
3290
- | highlightColor | number | 0xFFFFFF | ハイライトの色(0x000000〜0xFFFFFF) |
3291
- | knockout | boolean | false | ノックアウト効果を適用するかどうか |
3292
- | quality | number | 1 | ぼかしの実行回数(0〜15) |
3293
- | shadowAlpha | number | 1 | シャドウのアルファ透明度(0〜1) |
3294
- | shadowColor | number | 0 | シャドウの色(0x000000〜0xFFFFFF) |
3295
- | strength | number | 1 | インプリントの強さ(0〜255) |
3296
- | type | string | "inner" | ベベルの配置("inner"、"outer"、"full") |
3297
-
3298
- ---
3299
-
3300
- ## ColorMatrixFilter
3301
-
3302
- 4x5カラーマトリックス変換を適用します。明度、コントラスト、彩度、色相などを調整できます。
3303
-
3304
- ```typescript
3305
- const { ColorMatrixFilter } = next2d.filters;
3306
-
3307
- new ColorMatrixFilter(matrix);
3308
- ```
3309
-
3310
- ### プロパティ
3311
-
3312
- | プロパティ | 型 | デフォルト | 説明 |
3313
- |-----------|------|----------|------|
3314
- | matrix | number[] | 単位行列 | 4x5カラー変換用の20個の要素を持つ配列 |
3315
-
3316
- ### マトリックスのデフォルト値(単位行列)
3317
- ```typescript
3318
- [
3319
- 1, 0, 0, 0, 0,
3320
- 0, 1, 0, 0, 0,
3321
- 0, 0, 1, 0, 0,
3322
- 0, 0, 0, 1, 0
3323
- ]
3324
- ```
3325
-
3326
- ---
3327
-
3328
- ## ConvolutionFilter
3329
-
3330
- マトリックス畳み込みフィルター効果を適用します。ぼかし、エッジ検出、シャープ、エンボス、ベベルなどの効果を実現できます。
3331
-
3332
- ```typescript
3333
- const { ConvolutionFilter } = next2d.filters;
3334
-
3335
- new ConvolutionFilter(
3336
- matrixX, matrixY, matrix, divisor, bias,
3337
- preserveAlpha, clamp, color, alpha
3338
- );
3339
- ```
3340
-
3341
- ### プロパティ
3342
-
3343
- | プロパティ | 型 | デフォルト | 説明 |
3344
- |-----------|------|----------|------|
3345
- | alpha | number | 0 | 範囲外ピクセルのアルファ透明度(0〜1) |
3346
- | bias | number | 0 | マトリックス変換結果に加算するバイアス量 |
3347
- | clamp | boolean | true | イメージをクランプするかどうか |
3348
- | color | number | 0 | 範囲外ピクセルの置換色(0x000000〜0xFFFFFF) |
3349
- | divisor | number | 1 | マトリックス変換中の除数 |
3350
- | matrix | number[] \| null | null | マトリックス変換に使用する値の配列 |
3351
- | matrixX | number | 0 | マトリックスのX次元(列数、0〜15) |
3352
- | matrixY | number | 0 | マトリックスのY次元(行数、0〜15) |
3353
- | preserveAlpha | boolean | true | アルファチャンネルを維持するかどうか |
3354
-
3355
- ---
3356
-
3357
- ## DisplacementMapFilter
3358
-
3359
- BitmapDataオブジェクトのピクセル値を使用して、オブジェクトの変位を実行します。
3360
-
3361
- ```typescript
3362
- const { DisplacementMapFilter } = next2d.filters;
3363
-
3364
- new DisplacementMapFilter(
3365
- bitmapBuffer, bitmapWidth, bitmapHeight,
3366
- mapPointX, mapPointY, componentX, componentY,
3367
- scaleX, scaleY, mode, color, alpha
3368
- );
3369
- ```
3370
-
3371
- ### プロパティ
3372
-
3373
- | プロパティ | 型 | デフォルト | 説明 |
3374
- |-----------|------|----------|------|
3375
- | alpha | number | 0 | 範囲外変位のアルファ透明度(0〜1) |
3376
- | bitmapBuffer | Uint8Array \| null | null | 変位マップデータを含むバッファ |
3377
- | bitmapHeight | number | 0 | 変位マップデータの高さ |
3378
- | bitmapWidth | number | 0 | 変位マップデータの幅 |
3379
- | color | number | 0 | 範囲外変位に使用する色(0x000000〜0xFFFFFF) |
3380
- | componentX | number | 0 | X変位に使用するカラーチャンネル |
3381
- | componentY | number | 0 | Y変位に使用するカラーチャンネル |
3382
- | mapPointX | number | 0 | マップポイントのXオフセット |
3383
- | mapPointY | number | 0 | マップポイントのYオフセット |
3384
- | mode | string | "wrap" | フィルターモード("wrap"、"clamp"、"ignore"、"color") |
3385
- | scaleX | number | 0 | X変位結果の乗数(-65535〜65535) |
3386
- | scaleY | number | 0 | Y変位結果の乗数(-65535〜65535) |
3387
-
3388
- ---
3389
-
3390
- ## GradientBevelFilter
3391
-
3392
- グラデーションベベル効果を適用します。グラデーションカラーで強調された斜めのエッジでオブジェクトを3次元的に見せます。
3393
-
3394
- ```typescript
3395
- const { GradientBevelFilter } = next2d.filters;
3396
-
3397
- new GradientBevelFilter(
3398
- distance, angle, colors, alphas, ratios,
3399
- blurX, blurY, strength, quality, type, knockout
3400
- );
3401
- ```
3402
-
3403
- ### プロパティ
3404
-
3405
- | プロパティ | 型 | デフォルト | 説明 |
3406
- |-----------|------|----------|------|
3407
- | alphas | number[] \| null | null | カラー配列の各色に対応するアルファ値の配列(各値0〜1) |
3408
- | angle | number | 45 | ベベルの角度(-360〜360度) |
3409
- | blurX | number | 4 | 水平方向のぼかし量(0〜255) |
3410
- | blurY | number | 4 | 垂直方向のぼかし量(0〜255) |
3411
- | colors | number[] \| null | null | グラデーションで使用するRGB 16進数カラー値の配列 |
3412
- | distance | number | 4 | ベベルのオフセット距離(-255〜255ピクセル) |
3413
- | knockout | boolean | false | ノックアウト効果を適用するかどうか |
3414
- | quality | number | 1 | ぼかしの実行回数(0〜15) |
3415
- | ratios | number[] \| null | null | カラー配列の各色に対応する色分布比率の配列(各値0〜255) |
3416
- | strength | number | 1 | インプリントの強さ(0〜255) |
3417
- | type | string | "inner" | ベベルの配置("inner"、"outer"、"full") |
3418
-
3419
- ---
3420
-
3421
- ## GradientGlowFilter
3422
-
3423
- グラデーショングロー効果を適用します。制御可能なカラーグラデーションによるリアルな輝きを表現できます。
3424
-
3425
- ```typescript
3426
- const { GradientGlowFilter } = next2d.filters;
3427
-
3428
- new GradientGlowFilter(
3429
- distance, angle, colors, alphas, ratios,
3430
- blurX, blurY, strength, quality, type, knockout
3431
- );
3432
- ```
3433
-
3434
- ### プロパティ
3435
-
3436
- | プロパティ | 型 | デフォルト | 説明 |
3437
- |-----------|------|----------|------|
3438
- | alphas | number[] \| null | null | カラー配列の各色に対応するアルファ値の配列(各値0〜1) |
3439
- | angle | number | 45 | グローの角度(-360〜360度) |
3440
- | blurX | number | 4 | 水平方向のぼかし量(0〜255) |
3441
- | blurY | number | 4 | 垂直方向のぼかし量(0〜255) |
3442
- | colors | number[] \| null | null | グラデーションで使用するRGB 16進数カラー値の配列 |
3443
- | distance | number | 4 | グローのオフセット距離(-255〜255ピクセル) |
3444
- | knockout | boolean | false | ノックアウト効果を適用するかどうか |
3445
- | quality | number | 1 | ぼかしの実行回数(0〜15) |
3446
- | ratios | number[] \| null | null | カラー配列の各色に対応する色分布比率の配列(各値0〜255) |
3447
- | strength | number | 1 | インプリントの強さ(0〜255) |
3448
- | type | string | "outer" | グローの配置("inner"、"outer"、"full") |
3449
-
3450
- ---
3451
-
3452
- ## 使用例
3453
-
3454
- ### ボタンのホバー効果
3455
-
3456
- ```typescript
3457
- const { Sprite } = next2d.display;
3458
- const { GlowFilter } = next2d.filters;
3459
-
3460
- const button = new Sprite();
3461
-
3462
- button.addEventListener("rollOver", () => {
3463
- button.filters = [
3464
- new GlowFilter(0x00ff00, 0.8, 10, 10)
3465
- ];
3466
- });
3467
-
3468
- button.addEventListener("rollOut", () => {
3469
- button.filters = null;
3470
- });
3471
- ```
3472
-
3473
- ### 影付きテキスト
3474
-
3475
- ```typescript
3476
- const { TextField } = next2d.text;
3477
- const { DropShadowFilter } = next2d.filters;
3478
-
3479
- const textField = new TextField();
3480
- textField.text = "Hello World";
3481
- textField.filters = [
3482
- new DropShadowFilter(2, 45, 0x000000, 0.5, 2, 2)
3483
- ];
3484
- ```
3485
-
3486
- ### 複合フィルター
3487
-
3488
- ```typescript
3489
- const { GlowFilter, DropShadowFilter, BlurFilter } = next2d.filters;
3490
-
3491
- sprite.filters = [
3492
- // 外側のグロー
3493
- new GlowFilter(0x0088ff, 0.8, 15, 15, 2, 1, false),
3494
- // ドロップシャドウ
3495
- new DropShadowFilter(4, 45, 0x000000, 0.6, 4, 4),
3496
- // 軽いぼかし
3497
- new BlurFilter(1, 1, 1)
3498
- ];
3499
- ```
3500
-
3501
- ### カラーマトリックスによるグレースケール
3502
-
3503
- ```typescript
3504
- const { ColorMatrixFilter } = next2d.filters;
3505
-
3506
- // グレースケール変換マトリックス
3507
- const grayscaleMatrix = [
3508
- 0.299, 0.587, 0.114, 0, 0,
3509
- 0.299, 0.587, 0.114, 0, 0,
3510
- 0.299, 0.587, 0.114, 0, 0,
3511
- 0, 0, 0, 1, 0
3512
- ];
3513
-
3514
- sprite.filters = [new ColorMatrixFilter(grayscaleMatrix)];
3515
- ```
3516
-
3517
- ### グラデーショングロー効果
3518
-
3519
- ```typescript
3520
- const { GradientGlowFilter } = next2d.filters;
3521
-
3522
- sprite.filters = [
3523
- new GradientGlowFilter(
3524
- 4, 45,
3525
- [0xff0000, 0x00ff00, 0x0000ff], // colors
3526
- [1, 1, 1], // alphas
3527
- [0, 128, 255], // ratios
3528
- 10, 10, 2, 1, "outer", false
3529
- )
3530
- ];
3531
- ```
3532
-
3533
- ---
3534
-
3535
- ## 関連項目
3536
-
3537
- - [DisplayObject](/ja/reference/player/display-object)
3538
- - [MovieClip](/ja/reference/player/movie-clip)
3539
-