next2d-development-mcp 0.0.1

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