next2d-development-mcp 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/references/player-display-objects.md +603 -0
- package/dist/references/player-events.md +308 -0
- package/dist/references/player-filters.md +338 -0
- package/dist/references/player-media-text.md +529 -0
- package/dist/references/player-overview.md +210 -0
- package/dist/references/player-tween.md +278 -0
- package/package.json +2 -2
- package/dist/references/player-specs.md +0 -3539
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
# Next2D Player - メディア・テキスト(TextField / Sound / Video)
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# TextField
|
|
6
|
+
|
|
7
|
+
TextFieldは、テキストの表示と編集を行うDisplayObjectです。ラベル表示から入力フォームまで、テキスト関連の機能を提供します。
|
|
8
|
+
|
|
9
|
+
## 継承関係
|
|
10
|
+
|
|
11
|
+
```mermaid
|
|
12
|
+
classDiagram
|
|
13
|
+
DisplayObject <|-- InteractiveObject
|
|
14
|
+
InteractiveObject <|-- TextField
|
|
15
|
+
|
|
16
|
+
class TextField {
|
|
17
|
+
+text: String
|
|
18
|
+
+textColor: Number
|
|
19
|
+
+type: String
|
|
20
|
+
+setTextFormat()
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## プロパティ
|
|
25
|
+
|
|
26
|
+
### テキスト関連
|
|
27
|
+
|
|
28
|
+
| プロパティ | 型 | 説明 |
|
|
29
|
+
|-----------|------|------|
|
|
30
|
+
| `text` | string | テキストフィールド内の現在のテキスト |
|
|
31
|
+
| `htmlText` | string | テキストフィールドの内容をHTMLで表した文字列 |
|
|
32
|
+
| `length` | number | テキストフィールド内の文字数(読み取り専用) |
|
|
33
|
+
| `maxChars` | number | ユーザーが入力できる最大文字数(0で無制限) |
|
|
34
|
+
| `restrict` | string | ユーザーがテキストフィールドに入力できる文字のセットを指定 |
|
|
35
|
+
| `defaultTextFormat` | TextFormat | テキストに適用するデフォルトのフォーマット |
|
|
36
|
+
| `stopIndex` | number | テキストの任意の表示終了位置の設定(デフォルト: -1) |
|
|
37
|
+
|
|
38
|
+
### 表示関連
|
|
39
|
+
|
|
40
|
+
| プロパティ | 型 | 説明 |
|
|
41
|
+
|-----------|------|------|
|
|
42
|
+
| `width` | number | 表示オブジェクトの幅(ピクセル単位) |
|
|
43
|
+
| `height` | number | 表示オブジェクトの高さ(ピクセル単位) |
|
|
44
|
+
| `textWidth` | number | テキストの幅(ピクセル単位、読み取り専用) |
|
|
45
|
+
| `textHeight` | number | テキストの高さ(ピクセル単位、読み取り専用) |
|
|
46
|
+
| `autoSize` | string | テキストフィールドの自動的な拡大/縮小および整列を制御("none", "left", "center", "right") |
|
|
47
|
+
| `autoFontSize` | boolean | テキストサイズの自動的な拡大/縮小および整列を制御(デフォルト: false) |
|
|
48
|
+
| `wordWrap` | boolean | テキストフィールドのテキストを折り返すかどうか(デフォルト: false) |
|
|
49
|
+
| `multiline` | boolean | 複数行テキストフィールドであるかどうか(デフォルト: false) |
|
|
50
|
+
| `numLines` | number | テキストの行数(読み取り専用) |
|
|
51
|
+
|
|
52
|
+
### 境界線・背景関連
|
|
53
|
+
|
|
54
|
+
| プロパティ | 型 | 説明 |
|
|
55
|
+
|-----------|------|------|
|
|
56
|
+
| `background` | boolean | テキストフィールドに背景の塗りつぶしがあるかどうか(デフォルト: false) |
|
|
57
|
+
| `backgroundColor` | number | テキストフィールドの背景の色(デフォルト: 0xffffff) |
|
|
58
|
+
| `border` | boolean | テキストフィールドに境界線があるかどうか(デフォルト: false) |
|
|
59
|
+
| `borderColor` | number | テキストフィールドの境界線の色(デフォルト: 0x000000) |
|
|
60
|
+
|
|
61
|
+
### 輪郭関連
|
|
62
|
+
|
|
63
|
+
| プロパティ | 型 | 説明 |
|
|
64
|
+
|-----------|------|------|
|
|
65
|
+
| `thickness` | number | 輪郭のテキスト幅。0(デフォルト値)で無効 |
|
|
66
|
+
| `thicknessColor` | number | 輪郭のテキストの色(16進数形式、デフォルト: 0) |
|
|
67
|
+
|
|
68
|
+
### 入力関連
|
|
69
|
+
|
|
70
|
+
| プロパティ | 型 | 説明 |
|
|
71
|
+
|-----------|------|------|
|
|
72
|
+
| `type` | string | テキストフィールドのタイプ("static", "dynamic", "input")(デフォルト: "static") |
|
|
73
|
+
| `focus` | boolean | テキストフィールドがフォーカスを持つかどうか(デフォルト: false) |
|
|
74
|
+
| `focusVisible` | boolean | テキストフィールドの点滅線の表示・非表示を制御(デフォルト: false) |
|
|
75
|
+
|
|
76
|
+
### スクロール関連
|
|
77
|
+
|
|
78
|
+
| プロパティ | 型 | 説明 |
|
|
79
|
+
|-----------|------|------|
|
|
80
|
+
| `scrollX` | number | x軸のスクロール位置(デフォルト: 0) |
|
|
81
|
+
| `scrollY` | number | y軸のスクロール位置(デフォルト: 0) |
|
|
82
|
+
| `scrollEnabled` | boolean | スクロール機能のON/OFFの制御(デフォルト: true) |
|
|
83
|
+
|
|
84
|
+
### DisplayObjectから継承
|
|
85
|
+
|
|
86
|
+
| プロパティ | 型 | 説明 |
|
|
87
|
+
|-----------|------|------|
|
|
88
|
+
| `cacheAsBitmap` | Matrix \| null | テキスト描画をビットマップとしてキャッシュするMatrix(nullで解除) |
|
|
89
|
+
|
|
90
|
+
## メソッド
|
|
91
|
+
|
|
92
|
+
| メソッド | 戻り値 | 説明 |
|
|
93
|
+
|---------|--------|------|
|
|
94
|
+
| `appendText(newText: string)` | void | 指定されたストリングをテキストフィールドのテキストの最後に付加します |
|
|
95
|
+
| `insertText(newText: string)` | void | テキストフィールドのフォーカス位置にテキストを追加します |
|
|
96
|
+
| `deleteText()` | void | テキストフィールドの選択範囲を削除します |
|
|
97
|
+
| `getLineText(lineIndex: number)` | string | 指定された行のテキストを返します |
|
|
98
|
+
| `replaceText(newText: string, beginIndex: number, endIndex: number)` | void | 指定された文字範囲を新しいテキストの内容に置き換えます |
|
|
99
|
+
| `selectAll()` | void | テキストフィールドのすべてのテキストを選択します |
|
|
100
|
+
|
|
101
|
+
## TextFormat
|
|
102
|
+
|
|
103
|
+
テキストのスタイルを設定するクラスです。
|
|
104
|
+
|
|
105
|
+
| プロパティ | 型 | 説明 |
|
|
106
|
+
|-----------|------|------|
|
|
107
|
+
| `font` | String | フォント名 |
|
|
108
|
+
| `size` | Number | フォントサイズ |
|
|
109
|
+
| `color` | Number | テキスト色 |
|
|
110
|
+
| `bold` | Boolean | 太字 |
|
|
111
|
+
| `italic` | Boolean | 斜体 |
|
|
112
|
+
| `align` | String | 配置("left", "center", "right") |
|
|
113
|
+
| `leading` | Number | 行間(ピクセル) |
|
|
114
|
+
| `letterSpacing` | Number | 文字間隔(ピクセル) |
|
|
115
|
+
|
|
116
|
+
## 使用例
|
|
117
|
+
|
|
118
|
+
### 基本的なテキスト表示
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
const { TextField } = next2d.text;
|
|
122
|
+
|
|
123
|
+
const textField = new TextField();
|
|
124
|
+
textField.text = "Hello, Next2D!";
|
|
125
|
+
textField.x = 100;
|
|
126
|
+
textField.y = 100;
|
|
127
|
+
|
|
128
|
+
stage.addChild(textField);
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### TextFormatの適用
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
const { TextField, TextFormat } = next2d.text;
|
|
135
|
+
|
|
136
|
+
const textField = new TextField();
|
|
137
|
+
textField.text = "スタイル付きテキスト";
|
|
138
|
+
|
|
139
|
+
const format = new TextFormat();
|
|
140
|
+
format.font = "Arial";
|
|
141
|
+
format.size = 24;
|
|
142
|
+
format.color = 0x3498db;
|
|
143
|
+
format.bold = true;
|
|
144
|
+
|
|
145
|
+
textField.setTextFormat(format);
|
|
146
|
+
textField.defaultTextFormat = format;
|
|
147
|
+
|
|
148
|
+
stage.addChild(textField);
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 入力フィールド
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
const { TextField } = next2d.text;
|
|
155
|
+
|
|
156
|
+
const inputField = new TextField();
|
|
157
|
+
inputField.type = "input";
|
|
158
|
+
inputField.width = 200;
|
|
159
|
+
inputField.height = 30;
|
|
160
|
+
inputField.border = true;
|
|
161
|
+
inputField.borderColor = 0xcccccc;
|
|
162
|
+
inputField.background = true;
|
|
163
|
+
inputField.backgroundColor = 0xffffff;
|
|
164
|
+
inputField.restrict = "0-9"; // 数字のみ
|
|
165
|
+
|
|
166
|
+
inputField.addEventListener("change", (event) => {
|
|
167
|
+
console.log("入力値:", inputField.text);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
stage.addChild(inputField);
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### テキストの輪郭効果
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
const { TextField, TextFormat } = next2d.text;
|
|
177
|
+
|
|
178
|
+
const textField = new TextField();
|
|
179
|
+
textField.autoSize = "left";
|
|
180
|
+
|
|
181
|
+
const format = new TextFormat();
|
|
182
|
+
format.font = "Arial";
|
|
183
|
+
format.size = 48;
|
|
184
|
+
format.color = 0xffffff;
|
|
185
|
+
textField.defaultTextFormat = format;
|
|
186
|
+
|
|
187
|
+
textField.text = "輪郭付きテキスト";
|
|
188
|
+
textField.thickness = 2;
|
|
189
|
+
textField.thicknessColor = 0x000000;
|
|
190
|
+
|
|
191
|
+
stage.addChild(textField);
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### RPGゲーム風台詞アニメーション(stopIndex)
|
|
195
|
+
|
|
196
|
+
`stopIndex` を使うと、テキストを先頭から順番に表示するタイプライター効果を実現できます。
|
|
197
|
+
RPGゲームの台詞ウィンドウのような演出に適しています。
|
|
198
|
+
`stopIndex` のデフォルト値は `-1`(全文字を表示)で、`0` にすると文字が非表示になります。
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
const { TextField } = next2d.text;
|
|
202
|
+
const { Tween, Job } = next2d.ui;
|
|
203
|
+
|
|
204
|
+
const textField = new TextField();
|
|
205
|
+
textField.width = 300;
|
|
206
|
+
textField.height = 80;
|
|
207
|
+
textField.multiline = true;
|
|
208
|
+
textField.wordWrap = true;
|
|
209
|
+
textField.text = "勇者よ、魔王を倒してくれ!世界の命運はそなたにかかっている。";
|
|
210
|
+
|
|
211
|
+
stage.addChild(textField);
|
|
212
|
+
|
|
213
|
+
// stopIndex を 0 → text.length まで 5秒かけてアニメーション(0.5秒の遅延あり)
|
|
214
|
+
const job = Tween.add(
|
|
215
|
+
textField,
|
|
216
|
+
{ stopIndex: 0 },
|
|
217
|
+
{ stopIndex: textField.text.length },
|
|
218
|
+
0.5,
|
|
219
|
+
5
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
job.addEventListener(Job.COMPLETE, () => {
|
|
223
|
+
console.log("台詞表示完了");
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
job.start();
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## イベント
|
|
230
|
+
|
|
231
|
+
| イベント | 説明 |
|
|
232
|
+
|----------|------|
|
|
233
|
+
| `change` | テキストが変更されたとき |
|
|
234
|
+
| `focus` | フォーカスを得たとき |
|
|
235
|
+
| `blur` | フォーカスを失ったとき |
|
|
236
|
+
| `keyDown` | キーが押されたとき |
|
|
237
|
+
| `keyUp` | キーが離されたとき |
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
# サウンド
|
|
242
|
+
|
|
243
|
+
Next2D Playerは、ゲームやアプリケーションで必要な音声機能を提供します。BGM、効果音、ボイスなど様々な用途に対応しています。
|
|
244
|
+
|
|
245
|
+
## Sound
|
|
246
|
+
|
|
247
|
+
音声ファイルを読み込み再生するクラスです。EventDispatcherを継承しています。
|
|
248
|
+
|
|
249
|
+
### プロパティ
|
|
250
|
+
|
|
251
|
+
| プロパティ | 型 | デフォルト | 読み取り専用 | 説明 |
|
|
252
|
+
|-----------|------|----------|:------------:|------|
|
|
253
|
+
| `audioBuffer` | AudioBuffer \| null | null | - | オーディオバッファ。load()で読み込んだ音声データが格納されます |
|
|
254
|
+
| `loopCount` | number | 0 | - | ループ回数の設定。0でループなし、9999で実質無限ループ |
|
|
255
|
+
| `volume` | number | 1 | - | ボリューム。範囲は0(無音)〜1(フルボリューム)。SoundMixer.volumeの値を超えることはできません |
|
|
256
|
+
| `canLoop` | boolean | - | ○ | サウンドがループするかどうかを示します |
|
|
257
|
+
|
|
258
|
+
### メソッド
|
|
259
|
+
|
|
260
|
+
| メソッド | 戻り値 | 説明 |
|
|
261
|
+
|---------|--------|------|
|
|
262
|
+
| `clone()` | Sound | Soundクラスを複製します。volume、loopCount、audioBufferがコピーされます |
|
|
263
|
+
| `load(request: URLRequest)` | Promise\<void\> | 指定したURLから外部MP3ファイルのロードを開始します |
|
|
264
|
+
| `play(startTime: number = 0)` | void | サウンドを再生します。既に再生中の場合は何もしません |
|
|
265
|
+
| `stop()` | void | チャンネルで再生しているサウンドを停止します |
|
|
266
|
+
|
|
267
|
+
## 使用例
|
|
268
|
+
|
|
269
|
+
### 基本的な音声再生
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
const { Sound } = next2d.media;
|
|
273
|
+
const { URLRequest } = next2d.net;
|
|
274
|
+
|
|
275
|
+
const sound = new Sound();
|
|
276
|
+
await sound.load(new URLRequest("bgm.mp3"));
|
|
277
|
+
sound.play();
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### BGMのループ再生
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
const { Sound } = next2d.media;
|
|
284
|
+
const { URLRequest } = next2d.net;
|
|
285
|
+
|
|
286
|
+
const bgm = new Sound();
|
|
287
|
+
await bgm.load(new URLRequest("bgm/stage1.mp3"));
|
|
288
|
+
bgm.volume = 0.7;
|
|
289
|
+
bgm.loopCount = 9999; // 実質無限ループ
|
|
290
|
+
bgm.play();
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 効果音(同時に複数回鳴らす場合はclone使用)
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
const { Sound } = next2d.media;
|
|
297
|
+
const { URLRequest } = next2d.net;
|
|
298
|
+
|
|
299
|
+
const seJump = new Sound();
|
|
300
|
+
await seJump.load(new URLRequest("se/jump.mp3"));
|
|
301
|
+
|
|
302
|
+
function playSE(sound) {
|
|
303
|
+
const clone = sound.clone();
|
|
304
|
+
clone.play();
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
player.addEventListener("jump", () => {
|
|
308
|
+
playSE(seJump);
|
|
309
|
+
});
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### サウンドマネージャー
|
|
313
|
+
|
|
314
|
+
```typescript
|
|
315
|
+
const { Sound, SoundMixer } = next2d.media;
|
|
316
|
+
const { URLRequest } = next2d.net;
|
|
317
|
+
|
|
318
|
+
class SoundManager {
|
|
319
|
+
constructor() {
|
|
320
|
+
this._sounds = new Map();
|
|
321
|
+
this._bgm = null;
|
|
322
|
+
this._bgmVolume = 0.7;
|
|
323
|
+
this._seVolume = 1.0;
|
|
324
|
+
this._isMuted = false;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
async preload(id, url) {
|
|
328
|
+
const sound = new Sound();
|
|
329
|
+
await sound.load(new URLRequest(url));
|
|
330
|
+
this._sounds.set(id, sound);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
playBGM(id, loops = 9999) {
|
|
334
|
+
this.stopBGM();
|
|
335
|
+
const sound = this._sounds.get(id);
|
|
336
|
+
if (sound) {
|
|
337
|
+
this._bgm = sound.clone();
|
|
338
|
+
this._bgm.volume = this._isMuted ? 0 : this._bgmVolume;
|
|
339
|
+
this._bgm.loopCount = loops;
|
|
340
|
+
this._bgm.play();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
stopBGM() {
|
|
345
|
+
if (this._bgm) {
|
|
346
|
+
this._bgm.stop();
|
|
347
|
+
this._bgm = null;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
playSE(id) {
|
|
352
|
+
const sound = this._sounds.get(id);
|
|
353
|
+
if (sound) {
|
|
354
|
+
const clone = sound.clone();
|
|
355
|
+
clone.volume = this._isMuted ? 0 : this._seVolume;
|
|
356
|
+
clone.play();
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
toggleMute() {
|
|
361
|
+
this._isMuted = !this._isMuted;
|
|
362
|
+
if (this._bgm) {
|
|
363
|
+
this._bgm.volume = this._isMuted ? 0 : this._bgmVolume;
|
|
364
|
+
}
|
|
365
|
+
return this._isMuted;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## SoundMixer
|
|
371
|
+
|
|
372
|
+
全体のサウンドを制御するクラスです。
|
|
373
|
+
|
|
374
|
+
```typescript
|
|
375
|
+
const { SoundMixer } = next2d.media;
|
|
376
|
+
|
|
377
|
+
SoundMixer.stopAll(); // 全ての音声を停止
|
|
378
|
+
SoundMixer.volume = 0.5; // 全体の音量を50%
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## サポートフォーマット
|
|
382
|
+
|
|
383
|
+
| フォーマット | 拡張子 | 対応状況 |
|
|
384
|
+
|--------------|--------|----------|
|
|
385
|
+
| MP3 | .mp3 | 推奨 |
|
|
386
|
+
| AAC | .m4a, .aac | 対応 |
|
|
387
|
+
| Ogg Vorbis | .ogg | ブラウザ依存 |
|
|
388
|
+
| WAV | .wav | 対応(ファイルサイズ大) |
|
|
389
|
+
|
|
390
|
+
## ベストプラクティス
|
|
391
|
+
|
|
392
|
+
1. **プリロード**: ゲーム開始前に全ての音声をプリロード
|
|
393
|
+
2. **フォーマット**: MP3を推奨(互換性と圧縮率のバランス)
|
|
394
|
+
3. **効果音**: 短い音声はWAVでも可(レイテンシが低い)
|
|
395
|
+
4. **clone使用**: 同じ音を同時に複数回再生する場合はclone()を使用
|
|
396
|
+
5. **モバイル対応**: ユーザーインタラクション後に再生開始
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
# Video
|
|
401
|
+
|
|
402
|
+
Videoは、動画コンテンツを再生するためのDisplayObjectです。WebM、MP4などの動画フォーマットに対応しています。
|
|
403
|
+
|
|
404
|
+
## 継承関係
|
|
405
|
+
|
|
406
|
+
```mermaid
|
|
407
|
+
classDiagram
|
|
408
|
+
DisplayObject <|-- Video
|
|
409
|
+
|
|
410
|
+
class Video {
|
|
411
|
+
+src: string
|
|
412
|
+
+videoWidth: number
|
|
413
|
+
+videoHeight: number
|
|
414
|
+
+duration: number
|
|
415
|
+
+currentTime: number
|
|
416
|
+
+volume: number
|
|
417
|
+
+loop: boolean
|
|
418
|
+
+autoPlay: boolean
|
|
419
|
+
+paused: boolean
|
|
420
|
+
+muted: boolean
|
|
421
|
+
+play() Promise~void~
|
|
422
|
+
+pause() void
|
|
423
|
+
+seek(offset) void
|
|
424
|
+
}
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
## プロパティ
|
|
428
|
+
|
|
429
|
+
| プロパティ | 型 | デフォルト | 説明 |
|
|
430
|
+
|-----------|------|----------|------|
|
|
431
|
+
| `src` | string | "" | ビデオコンテンツへのURLを指定します |
|
|
432
|
+
| `videoWidth` | number | 0 | ビデオの幅をピクセル単位で指定する整数です |
|
|
433
|
+
| `videoHeight` | number | 0 | ビデオの高さをピクセル単位で指定する整数です |
|
|
434
|
+
| `duration` | number | 0 | キーフレーム総数(動画の長さ) |
|
|
435
|
+
| `currentTime` | number | 0 | 現在のキーフレーム(再生位置) |
|
|
436
|
+
| `volume` | number | 1 | ボリュームです。範囲は 0(無音)~ 1(フルボリューム)です |
|
|
437
|
+
| `loop` | boolean | false | ビデオをループ再生するかどうかを指定します |
|
|
438
|
+
| `autoPlay` | boolean | true | ビデオの自動再生の設定 |
|
|
439
|
+
| `smoothing` | boolean | true | ビデオを拡大/縮小する際にスムージング(補間)するかどうかを指定します |
|
|
440
|
+
| `paused` | boolean | true | ビデオが一時停止しているかどうかを返します |
|
|
441
|
+
| `muted` | boolean | false | ビデオがミュートされているかどうかを返します |
|
|
442
|
+
| `loaded` | boolean | false | ビデオが読み込まれているかどうかを返します |
|
|
443
|
+
| `ended` | boolean | false | ビデオが終了したかどうかを返します |
|
|
444
|
+
| `isVideo` | boolean | true | Videoの機能を所持しているかを返却(読み取り専用) |
|
|
445
|
+
|
|
446
|
+
## メソッド
|
|
447
|
+
|
|
448
|
+
| メソッド | 戻り値 | 説明 |
|
|
449
|
+
|---------|--------|------|
|
|
450
|
+
| `play()` | Promise\<void\> | ビデオファイルを再生します |
|
|
451
|
+
| `pause()` | void | ビデオの再生を一時停止します |
|
|
452
|
+
| `seek(offset: number)` | void | 指定された位置に最も近いキーフレームをシークします |
|
|
453
|
+
|
|
454
|
+
## 使用例
|
|
455
|
+
|
|
456
|
+
### 基本的な動画再生
|
|
457
|
+
|
|
458
|
+
```typescript
|
|
459
|
+
const { Video } = next2d.media;
|
|
460
|
+
|
|
461
|
+
const video = new Video(640, 360);
|
|
462
|
+
video.src = "video.mp4";
|
|
463
|
+
video.autoPlay = true;
|
|
464
|
+
video.loop = false;
|
|
465
|
+
video.smoothing = true;
|
|
466
|
+
|
|
467
|
+
stage.addChild(video);
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### 再生コントロール
|
|
471
|
+
|
|
472
|
+
```typescript
|
|
473
|
+
const { Video } = next2d.media;
|
|
474
|
+
const { PointerEvent } = next2d.events;
|
|
475
|
+
|
|
476
|
+
const video = new Video(640, 360);
|
|
477
|
+
video.autoPlay = false;
|
|
478
|
+
video.src = "video.mp4";
|
|
479
|
+
stage.addChild(video);
|
|
480
|
+
|
|
481
|
+
playButton.addEventListener(PointerEvent.POINTER_DOWN, async () => {
|
|
482
|
+
await video.play();
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
pauseButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
|
|
486
|
+
video.pause();
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
// 10秒進む
|
|
490
|
+
forwardButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
|
|
491
|
+
video.seek(video.currentTime + 10);
|
|
492
|
+
});
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### イベントリスニング
|
|
496
|
+
|
|
497
|
+
```typescript
|
|
498
|
+
const { Video } = next2d.media;
|
|
499
|
+
const { VideoEvent } = next2d.events;
|
|
500
|
+
|
|
501
|
+
const video = new Video(640, 360);
|
|
502
|
+
|
|
503
|
+
video.addEventListener(VideoEvent.PLAY, () => { console.log("再生リクエスト"); });
|
|
504
|
+
video.addEventListener(VideoEvent.PLAYING, () => { console.log("再生開始"); });
|
|
505
|
+
video.addEventListener(VideoEvent.PAUSE, () => { console.log("一時停止"); });
|
|
506
|
+
video.addEventListener(VideoEvent.SEEK, () => { console.log("シーク:", video.currentTime); });
|
|
507
|
+
|
|
508
|
+
video.src = "video.mp4";
|
|
509
|
+
stage.addChild(video);
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
## VideoEvent
|
|
513
|
+
|
|
514
|
+
| イベント | 説明 |
|
|
515
|
+
|----------|------|
|
|
516
|
+
| `VideoEvent.PLAY` | 再生がリクエストされた時 |
|
|
517
|
+
| `VideoEvent.PLAYING` | 再生が開始された時 |
|
|
518
|
+
| `VideoEvent.PAUSE` | 一時停止時 |
|
|
519
|
+
| `VideoEvent.SEEK` | シーク時 |
|
|
520
|
+
|
|
521
|
+
## サポートフォーマット
|
|
522
|
+
|
|
523
|
+
| フォーマット | 拡張子 | 対応状況 |
|
|
524
|
+
|--------------|--------|----------|
|
|
525
|
+
| MP4 (H.264) | .mp4 | 推奨 |
|
|
526
|
+
| WebM (VP8/VP9) | .webm | 対応 |
|
|
527
|
+
| Ogg Theora | .ogv | ブラウザ依存 |
|
|
528
|
+
|
|
529
|
+
**注意:** `cacheAsBitmap` は Video には適用できません(固定サイズの画像データのため)。
|