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.
- package/README.md +344 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +3 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +211 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/prompts.test.d.ts +2 -0
- package/dist/prompts/prompts.test.d.ts.map +1 -0
- package/dist/prompts/prompts.test.js +23 -0
- package/dist/prompts/prompts.test.js.map +1 -0
- package/dist/references/develop-specs.md +1576 -0
- package/dist/references/framework-specs.md +1687 -0
- package/dist/references/player-specs.md +3292 -0
- package/dist/resources/index.d.ts +3 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +185 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/resources.test.d.ts +2 -0
- package/dist/resources/resources.test.d.ts.map +1 -0
- package/dist/resources/resources.test.js +32 -0
- package/dist/resources/resources.test.js.map +1 -0
- package/dist/templates/animation.d.ts +6 -0
- package/dist/templates/animation.d.ts.map +1 -0
- package/dist/templates/animation.js +65 -0
- package/dist/templates/animation.js.map +1 -0
- package/dist/templates/animation.test.d.ts +2 -0
- package/dist/templates/animation.test.d.ts.map +1 -0
- package/dist/templates/animation.test.js +30 -0
- package/dist/templates/animation.test.js.map +1 -0
- package/dist/templates/domainService.d.ts +9 -0
- package/dist/templates/domainService.d.ts.map +1 -0
- package/dist/templates/domainService.js +56 -0
- package/dist/templates/domainService.js.map +1 -0
- package/dist/templates/domainService.test.d.ts +2 -0
- package/dist/templates/domainService.test.d.ts.map +1 -0
- package/dist/templates/domainService.test.js +33 -0
- package/dist/templates/domainService.test.js.map +1 -0
- package/dist/templates/interfaceFile.d.ts +5 -0
- package/dist/templates/interfaceFile.d.ts.map +1 -0
- package/dist/templates/interfaceFile.js +16 -0
- package/dist/templates/interfaceFile.js.map +1 -0
- package/dist/templates/interfaceFile.test.d.ts +2 -0
- package/dist/templates/interfaceFile.test.d.ts.map +1 -0
- package/dist/templates/interfaceFile.test.js +30 -0
- package/dist/templates/interfaceFile.test.js.map +1 -0
- package/dist/templates/loading.d.ts +5 -0
- package/dist/templates/loading.d.ts.map +1 -0
- package/dist/templates/loading.js +62 -0
- package/dist/templates/loading.js.map +1 -0
- package/dist/templates/loading.test.d.ts +2 -0
- package/dist/templates/loading.test.d.ts.map +1 -0
- package/dist/templates/loading.test.js +31 -0
- package/dist/templates/loading.test.js.map +1 -0
- package/dist/templates/repository.d.ts +2 -0
- package/dist/templates/repository.d.ts.map +1 -0
- package/dist/templates/repository.js +42 -0
- package/dist/templates/repository.js.map +1 -0
- package/dist/templates/repository.test.d.ts +2 -0
- package/dist/templates/repository.test.d.ts.map +1 -0
- package/dist/templates/repository.test.js +44 -0
- package/dist/templates/repository.test.js.map +1 -0
- package/dist/templates/uiComponent.d.ts +4 -0
- package/dist/templates/uiComponent.d.ts.map +1 -0
- package/dist/templates/uiComponent.js +108 -0
- package/dist/templates/uiComponent.js.map +1 -0
- package/dist/templates/uiComponent.test.d.ts +2 -0
- package/dist/templates/uiComponent.test.d.ts.map +1 -0
- package/dist/templates/uiComponent.test.js +76 -0
- package/dist/templates/uiComponent.test.js.map +1 -0
- package/dist/templates/usecase.d.ts +2 -0
- package/dist/templates/usecase.d.ts.map +1 -0
- package/dist/templates/usecase.js +31 -0
- package/dist/templates/usecase.js.map +1 -0
- package/dist/templates/usecase.test.d.ts +2 -0
- package/dist/templates/usecase.test.d.ts.map +1 -0
- package/dist/templates/usecase.test.js +23 -0
- package/dist/templates/usecase.test.js.map +1 -0
- package/dist/templates/view.d.ts +3 -0
- package/dist/templates/view.d.ts.map +1 -0
- package/dist/templates/view.js +112 -0
- package/dist/templates/view.js.map +1 -0
- package/dist/templates/view.test.d.ts +2 -0
- package/dist/templates/view.test.d.ts.map +1 -0
- package/dist/templates/view.test.js +71 -0
- package/dist/templates/view.test.js.map +1 -0
- package/dist/tools/addRoute.d.ts +3 -0
- package/dist/tools/addRoute.d.ts.map +1 -0
- package/dist/tools/addRoute.js +101 -0
- package/dist/tools/addRoute.js.map +1 -0
- package/dist/tools/createAnimation.d.ts +3 -0
- package/dist/tools/createAnimation.d.ts.map +1 -0
- package/dist/tools/createAnimation.js +53 -0
- package/dist/tools/createAnimation.js.map +1 -0
- package/dist/tools/createDomainService.d.ts +3 -0
- package/dist/tools/createDomainService.d.ts.map +1 -0
- package/dist/tools/createDomainService.js +82 -0
- package/dist/tools/createDomainService.js.map +1 -0
- package/dist/tools/createInterface.d.ts +3 -0
- package/dist/tools/createInterface.d.ts.map +1 -0
- package/dist/tools/createInterface.js +59 -0
- package/dist/tools/createInterface.js.map +1 -0
- package/dist/tools/createLoading.d.ts +3 -0
- package/dist/tools/createLoading.d.ts.map +1 -0
- package/dist/tools/createLoading.js +52 -0
- package/dist/tools/createLoading.js.map +1 -0
- package/dist/tools/createRepository.d.ts +3 -0
- package/dist/tools/createRepository.d.ts.map +1 -0
- package/dist/tools/createRepository.js +55 -0
- package/dist/tools/createRepository.js.map +1 -0
- package/dist/tools/createUiComponent.d.ts +3 -0
- package/dist/tools/createUiComponent.d.ts.map +1 -0
- package/dist/tools/createUiComponent.js +80 -0
- package/dist/tools/createUiComponent.js.map +1 -0
- package/dist/tools/createUseCase.d.ts +3 -0
- package/dist/tools/createUseCase.d.ts.map +1 -0
- package/dist/tools/createUseCase.js +52 -0
- package/dist/tools/createUseCase.js.map +1 -0
- package/dist/tools/createView.d.ts +3 -0
- package/dist/tools/createView.d.ts.map +1 -0
- package/dist/tools/createView.js +59 -0
- package/dist/tools/createView.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +25 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/tools.test.d.ts +2 -0
- package/dist/tools/tools.test.d.ts.map +1 -0
- package/dist/tools/tools.test.js +58 -0
- package/dist/tools/tools.test.js.map +1 -0
- package/dist/tools/validateArchitecture.d.ts +3 -0
- package/dist/tools/validateArchitecture.d.ts.map +1 -0
- package/dist/tools/validateArchitecture.js +134 -0
- package/dist/tools/validateArchitecture.js.map +1 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +18 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +2 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +34 -0
- package/dist/utils.test.js.map +1 -0
- 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
|
+
|