19 |
20 | EaselJS: アニメーションとTicker
21 |
22 | あらすじ: 簡単なプログラムによるアニメーションを作成し、Tickerクラスについて学びます。
23 | 扱う内容: アニメーション, Ticker, setFPS, useRAF, getTime, setPaused, requestAnimationFrame, Stage.update, 時間ベースのアニメーション
24 | 対象: EaselJS v0.6.0
25 |
26 |
27 |
28 |
29 |
32 |
33 | アニメーションは、オブジェクトの視覚的なプロパティを時間をかけて変更します。これを簡単に作ることができるトゥイーンライブラリは数多くあります(TweenJSやTweenLiteなど)が、このチュートリアルではこれらを使わずに基本的なコンセプトを探ります。
34 |
35 |
36 | 一定間隔で以下のコードを実行すると、円が右に移動します。
37 |
38 |
42 |
43 | シンプルです。しかし、一定間隔を設定するための最適な方法は何でしょうか? setInterval、setTimeout、またはrequestAnimationFrameを使って独自に実装することができ、表示リストを更新した後にstage.update()を実行すれば、EaselJSは完璧に動作します。
44 |
45 |
46 | 物事を簡単にするために、EaselJSにはTickerクラスが付属しています。これは、あなたのアプリケーションのために定期的にハートビート(tick)、一時停止、時間の変化量を提供しており、setTimeoutとrequestAnimationFrameの両方をラップしているので、これらを互換的に使用することができます。
47 |
48 |
49 |
50 |
51 |
54 |
55 | Tickerクラスは、様々なオブジェクトにtickを伝播するシンプルな静的インターフェース(new Ticker()できないことを意味します)を提供します。それを使うには、addEventListener("tick", handler)を使ってイベントリスナーを追加するだけです。リスナーは関数、またはtick関数を定義したオブジェクトを指定できます。
56 |
57 |
58 | 以下のコードはリスナーとしてwindowオブジェクトが追加され、1秒あたり20回(Tickerのデフォルトのフレームレート)呼び出されるtick関数を定義します。
59 |
63 |
64 | 間隔(tick間の時間)、あるいはフレームレート(1秒あたりのtickの数【訳注:原文ではthe number of ticks per frame=1フレームあたりのtickの数】)のいずれかを設定することによって、簡単にデフォルトのフレームレートを変更できます。
65 |
66 |
71 |
72 | 毎秒30フレームでステージ上を移動する円を作るために、すべてを組み合わせてみましょう。canvasの描画を変更するためにtick関数の最後でstage.update()を呼び出すことを忘れないでください! simple.htmlのソースで完成したコードをチェックしてください。
73 |
74 |
75 |
76 |
77 |
78 |
81 |
82 | 多くのアプリケーションでは、フレームレートから切り離してアニメーションを作ることをお勧めします。これにより、動的にフレームレートを変更することができます。また、設定したフレームレートを維持できない低速なデバイスで実行されている場合でも、あなたのアニメーションが同じ時間で実行されることが保証されます。
83 |
84 |
85 | Tickerは、リスナーが前のtickから経過した時間の長さを示すパラメータを渡すため、時間ベースのアニメーションを簡単に作ることができます。また、Tickerが初期化されてから経過した合計時間がgetTimeメソッドによって提供されます。
86 |
87 | プロパティの変更を行う時に経過時間を用いることによって、時間ベースのアニメーションを作ることができます。
88 |
96 |
97 | ここでフレームレートを変更することができ、円がcanvasを横断する時間と同じ時間がかかります(数ミリ秒ずれます)。
98 |
99 |
100 |
101 | FPSを変更するときの上記デモに注目すると、青い円の速度がフレームレートに相対的であるのに対して、赤い円は同じ速度で移動しています。20 fpsの時、赤い円は青い円よりも非常にわずかながら速く移動します。なぜならば、予想の50ミリ秒よりもわずかに長いフレームがかかっているためです。
102 |
103 |
104 |
105 |
106 |
109 |
110 | Tickerはまた、アニメーションのすべてを一時停止する能力を提供します。あなたがTickerに追加するすべてのリスナーは、"一時停止可能"です。Ticker.setPaused(true);を呼び出すと、すべての一時停止可能なリスナー上のtickの呼び出しから、Tickerを停止します。
111 |
112 |
113 | getTimeメソッドは、一時停止かどうかのパラメータを受け取り、それに基づいて適切な合計時間を返します。
114 |
115 |
116 | 以下のデモでは、一時停止をトグルでき、赤い"一時停止可能な"円が停止し、緑の"一時停止不可能な"円がそうでないところを確認できます。Tickerが一時停止しているとき、一時停止可能な合計時間の更新が止まっていることを確認できます。
117 |
118 |
119 |
120 |
121 |
122 |
125 |
126 | stage.update()を呼び出すと、tickメソッドを持つ任意の子孫をチェックし、canvasにその全体の表示リストをレンダリングします。任意のパラメータがupdate()に渡されると、tick()ハンドラに渡されます。これであなたの表示オブジェクトのコンテキストでアニメーションを処理することができます。
127 |
128 |
131 |
132 | StageはupdateのショートカットとしてのhandleEventを持っているので、Tickerにリスナーとして直接ステージを追加することができます。これを使用したいと思うことは希ですが、簡単なテストのためには便利です。例えば、onTick.htmlのソースを参照してください。
133 |
134 |
135 |
136 |
137 |
138 | requestAnimationFrame
139 |
140 |
141 | ほとんどのモダンブラウザでは、requestAnimationFrameと呼ばれる新しいアニメーション関連のAPIをサポートしています。それは、画面描画とプログラム的な変更を同期するための利点を持ち、CPUとバッテリーの使用量を減らすためにバックグラウンドのコンテンツのフレームレートを抑えます(タブのフォーカスが外れるなど)。
142 |
143 |
144 | Ticker.useRAF = trueに設定すると、使用中のブラウザでサポートされている場合はTickerがrequestAnimationFrameを使用し、サポートされていない場合はsetTimeoutにフォールバックします。これを行う場合は、一貫した結果を得るために60の約数(例:15, 20, 30, 60)にフレームレートを設定することをお勧めします。
145 |
146 |
147 |
148 |
149 |
152 |
153 | 高いフレームレートは、常に滑らかなアニメーションをもたらさないことを覚えておいてください。低いフレームレートはCPU使用量を抑え、より一貫したパフォーマンスを提供することができます。あなたのプロジェクトのための適切なバランスを見つけるようにしてください。
154 |
155 |
156 | あなたの本当のフレームレートが何であるかを確認したい場合は、過去1秒間の実際のフレームレートを取得するTicker.getMeasuredFPS()を呼び出すことができます。
157 |
158 |
159 |
160 |
161 |
164 |
165 | アニメーションを多く行うことを計画している場合は、TweenJSまたは別のトゥイーンライブラリをチェックするといいでしょう。時間をかけてプロパティをトゥイーンする簡単なコマンドを使ったり、アニメーションのシーケンスを作ったりすることができます。
166 |
167 |
170 |
171 |
172 |
173 |
174 |
175 |
--------------------------------------------------------------------------------
/ja/EaselJS/0.6.0/src/easeljs/filters/BoxBlurFilter.js:
--------------------------------------------------------------------------------
1 | /*
2 | * BoxBlurFilter
3 | * Visit http://createjs.com/ for documentation, updates and examples.
4 | *
5 | * Copyright (c) 2010 gskinner.com, inc.
6 | *
7 | * Permission is hereby granted, free of charge, to any person
8 | * obtaining a copy of this software and associated documentation
9 | * files (the "Software"), to deal in the Software without
10 | * restriction, including without limitation the rights to use,
11 | * copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | * copies of the Software, and to permit persons to whom the
13 | * Software is furnished to do so, subject to the following
14 | * conditions:
15 | *
16 | * The above copyright notice and this permission notice shall be
17 | * included in all copies or substantial portions of the Software.
18 | *
19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
21 | * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23 | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 | * OTHER DEALINGS IN THE SOFTWARE.
27 | */
28 |
29 | // 名前空間:
30 | this.createjs = this.createjs||{};
31 |
32 | (function() {
33 |
34 | /**
35 | * BoxBlurFilter は表示オブジェクトにボックスブラーを適用します。
36 | *
37 | * フィルターの使い方の例は {{#crossLink "Filter"}}{{/crossLink}} を参照して下さい。
38 | * @class BoxBlurFilter
39 | * @extends Filter
40 | * @constructor
41 | * @param {Number} blurX
42 | * @param {Number} blurY
43 | * @param {Number} quality
44 | **/
45 | var BoxBlurFilter = function( blurX, blurY, quality ) {
46 | this.initialize( blurX, blurY, quality );
47 | }
48 | var p = BoxBlurFilter.prototype = new createjs.Filter();
49 |
50 | // コンストラクタ:
51 | /** @ignore */
52 | p.initialize = function( blurX, blurY, quality ) {
53 | if ( isNaN(blurX) || blurX < 0 ) blurX = 0;
54 | this.blurX = blurX | 0;
55 | if ( isNaN(blurY) || blurY < 0 ) blurY = 0;
56 | this.blurY = blurY | 0;
57 | if ( isNaN(quality) || quality < 1 ) quality = 1;
58 | this.quality = quality | 0;
59 | }
60 |
61 | // パブリックプロパティ:
62 |
63 | /**
64 | * 水平方向のぼかしの半径
65 | * @property blurX
66 | * @type Number
67 | **/
68 | p.blurX = 0;
69 |
70 | /**
71 | * 垂直方向のぼかしの半径
72 | * @property blurY
73 | * @type Number
74 | **/
75 | p.blurY = 0;
76 |
77 | /**
78 | * ぼかし処理を繰り返す回数。例えば、1 を指定すると荒いぼかしになる。
79 | * 2 を指定するとより滑らかなぼかしになるが、処理時間は倍になる。
80 | * @property quality
81 | * @type Number
82 | **/
83 | p.quality = 1;
84 |
85 | // パブリックメソッド:
86 | /**
87 | * フィルターの描画に必要なマージンを示す rectangle オブジェクトを返します。
88 | * 例えば、描画領域を左に 4 ピクセル、右に 7 ピクセル広げるフィルターの場合
89 | * (ただし上下方向には広がらない)返される rectangle の値は (x=-4, y=0, width=11, height=0) になります。
90 | * @method getBounds
91 | * @return {Rectangle} フィルターの描画に必要なマージンを示す rectangle オブジェクトです。
92 | **/
93 | p.getBounds = function() {
94 | // TODO: this doesn't properly account for blur quality.
95 | return new createjs.Rectangle(-this.blurX,-this.blurY,2*this.blurX,2*this.blurY);
96 | }
97 |
98 | /**
99 | * 指定されたコンテキストにフィルターを適用します。
100 | * @method applyFilter
101 | * @param {CanvasRenderingContext2D} ctx ソースとして使用する 2D コンテキストです。
102 | * @param {Number} x ソースとして使用する矩形の x 座標です。
103 | * @param {Number} y ソースとして使用する矩形の y 座標です。
104 | * @param {Number} width ソース矩形の幅です。
105 | * @param {Number} height ソース矩形の高さです。
106 | * @param {CanvasRenderingContext2D} targetCtx オプションです。結果を描く 2D コンテキストです。デフォルトは ctx に渡されたコンテキストです。
107 | * @param {Number} targetX Optional. 結果を描く X 座標です。デフォルトは x に渡された値です。
108 | * @param {Number} targetY Optional. 結果を描く Y 座標です。デフォルトは y に渡された値です。
109 | * @return {Boolean}
110 | **/
111 | p.applyFilter = function(ctx, x, y, width, height, targetCtx, targetX, targetY) {
112 | targetCtx = targetCtx || ctx;
113 | if (targetX == null) { targetX = x; }
114 | if (targetY == null) { targetY = y; }
115 | try {
116 | var imageData = ctx.getImageData(x, y, width, height);
117 | } catch(e) {
118 | //if (!this.suppressCrossDomainErrors) throw new Error("unable to access local image data: " + e);
119 | return false;
120 | }
121 |
122 | var radiusX = this.blurX;
123 | if ( isNaN(radiusX) || radiusX < 0 ) return false;
124 | radiusX |= 0;
125 |
126 | var radiusY = this.blurY;
127 | if ( isNaN(radiusY) || radiusY < 0 ) return false;
128 | radiusY |= 0;
129 |
130 | if ( radiusX == 0 && radiusY == 0 ) return false;
131 |
132 | var iterations = this.quality;
133 | if ( isNaN(iterations) || iterations < 1 ) iterations = 1;
134 | iterations |= 0;
135 | if ( iterations > 3 ) iterations = 3;
136 | if ( iterations < 1 ) iterations = 1;
137 |
138 | var pixels = imageData.data;
139 |
140 | var rsum,gsum,bsum,asum,x,y,i,p,p1,p2,yp,yi,yw;
141 | var wm = width - 1;
142 | var hm = height - 1;
143 | var rad1x = radiusX + 1;
144 | var divx = radiusX + rad1x;
145 | var rad1y = radiusY + 1;
146 | var divy = radiusY + rad1y;
147 | var div2 = 1 / (divx * divy);
148 |
149 | var r = [];
150 | var g = [];
151 | var b = [];
152 | var a = [];
153 |
154 | var vmin = [];
155 | var vmax = [];
156 |
157 | while ( iterations-- > 0 ) {
158 | yw = yi = 0;
159 |
160 | for ( y=0; y < height; y++ ){
161 | rsum = pixels[yw] * rad1x;
162 | gsum = pixels[yw+1] * rad1x;
163 | bsum = pixels[yw+2] * rad1x;
164 | asum = pixels[yw+3] * rad1x;
165 |
166 |
167 | for( i = 1; i <= radiusX; i++ ) {
168 | p = yw + (((i > wm ? wm : i )) << 2 );
169 | rsum += pixels[p++];
170 | gsum += pixels[p++];
171 | bsum += pixels[p++];
172 | asum += pixels[p]
173 | }
174 |
175 | for ( x = 0; x < width; x++ ) {
176 | r[yi] = rsum;
177 | g[yi] = gsum;
178 | b[yi] = bsum;
179 | a[yi] = asum;
180 |
181 | if(y==0){
182 | vmin[x] = Math.min( x + rad1x, wm ) << 2;
183 | vmax[x] = Math.max( x - radiusX, 0 ) << 2;
184 | }
185 |
186 | p1 = yw + vmin[x];
187 | p2 = yw + vmax[x];
188 |
189 | rsum += pixels[p1++] - pixels[p2++];
190 | gsum += pixels[p1++] - pixels[p2++];
191 | bsum += pixels[p1++] - pixels[p2++];
192 | asum += pixels[p1] - pixels[p2];
193 |
194 | yi++;
195 | }
196 | yw += ( width << 2 );
197 | }
198 |
199 | for ( x = 0; x < width; x++ ) {
200 | yp = x;
201 | rsum = r[yp] * rad1y;
202 | gsum = g[yp] * rad1y;
203 | bsum = b[yp] * rad1y;
204 | asum = a[yp] * rad1y;
205 |
206 | for( i = 1; i <= radiusY; i++ ) {
207 | yp += ( i > hm ? 0 : width );
208 | rsum += r[yp];
209 | gsum += g[yp];
210 | bsum += b[yp];
211 | asum += a[yp];
212 | }
213 |
214 | yi = x << 2;
215 | for ( y = 0; y < height; y++) {
216 | pixels[yi] = (rsum * div2 + 0.5) | 0;
217 | pixels[yi+1] = (gsum * div2 + 0.5) | 0;
218 | pixels[yi+2] = (bsum * div2 + 0.5) | 0;
219 | pixels[yi+3] = (asum * div2 + 0.5) | 0;
220 |
221 | if( x == 0 ){
222 | vmin[y] = Math.min( y + rad1y, hm ) * width;
223 | vmax[y] = Math.max( y - radiusY,0 ) * width;
224 | }
225 |
226 | p1 = x + vmin[y];
227 | p2 = x + vmax[y];
228 |
229 | rsum += r[p1] - r[p2];
230 | gsum += g[p1] - g[p2];
231 | bsum += b[p1] - b[p2];
232 | asum += a[p1] - a[p2];
233 |
234 | yi += width << 2;
235 | }
236 | }
237 | }
238 |
239 | targetCtx.putImageData(imageData, targetX, targetY);
240 | return true;
241 | }
242 |
243 | /**
244 | * このオブジェクトの複製を返します。
245 | * @return {BoxBlurFilter}
246 | **/
247 | p.clone = function() {
248 | return new BoxBlurFilter(this.blurX, this.blurY, this.quality);
249 | }
250 |
251 | /**
252 | * このオブジェクトの文字列での表現を返します。
253 | * @return {String}
254 | **/
255 | p.toString = function() {
256 | return "[BoxBlurFilter]";
257 | }
258 |
259 | // プライベートメソッド:
260 |
261 |
262 |
263 | createjs.BoxBlurFilter = BoxBlurFilter;
264 | }());
--------------------------------------------------------------------------------
/ja/EaselJS/0.6.0/tutorials/Mouse Interaction/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
19 |
20 | EaselJS: マウスインタラクション
21 |
22 | あらすじ: 表示オブジェクトとステージ上のマウスイベントについて学びます。
23 | 扱う内容: MouseEvent, click, dblclick, mouseover, mouseout, mousemove, mousedown, mouseup, enableMouseOver, ドラッグアンドドロップ, mouseMoveOutside
24 | 対象: EaselJS v0.6.0
25 |
26 |
27 |
28 |
29 |
32 |
33 | 中核として、EaselJSのマウスインタラクションのモデルを使うことは非常に簡単です - ただ表示オブジェクトにマウスイベントのいずれかのハンドラ関数を割り当てるだけです。
34 |
37 |
38 |
39 |
40 | 表示オブジェクトのために監視できるイベントの数はこちらです。click, mousedown, mouseup, dblclick, mouseover, そしてmouseoutです。
41 |
42 |
43 | 後者の2つのイベントは、それらに関連したいくつかのオーバーヘッドがあるため、stage.enableMouseOver(frequency)で有効にする必要があります。frequencyパラメータは、EaselJSがマウスポインタの下に何があるか1秒間に何回計算するかを示します。数値が高いほど敏感になりますが、より計算コストが高くなります。1秒間に20回がデフォルトです。
44 |
45 |
46 |
47 |
48 |
51 |
52 | マウスハンドラがトリガーされたとき、それはMouseEventインスタンスを持つ1つのパラメータとともに実行されます。イベントのtypeが何であったか、targetが何であったか、それのベースとなったnativeEventオブジェクトへのアクセス、そしてマウスポインタのstageXとstageY座標のチェック、を表示するためにこのオブジェクトを使います。
53 |
58 |
59 |
60 |
61 |
62 |
63 |
66 |
67 | Containerインスタンスにマウスイベントハンドラを割り当てたとき、その子が自分のリスナーを持っていたとしても、すべてのマウスイベントをブロックします。
68 |
69 |
70 | 以下の例は"ボタン"で、背景のシェイプ、テキストラベルの2つの子を含むContainerインスタンスです。これらの表示オブジェクトの3つすべてはclickハンドラを持っていますが、ボタンをクリックすると、ボタンのハンドラのみが呼び出されます。
71 |
72 |
73 |
74 | もしcontainer.htmlのコードを編集してボタンのclickハンドラを削除したら、背景とラベルのハンドラが有効になるでしょう。
75 |
76 |
77 | mouseChildrenをfalseに設定することによって、ハンドラの割り当てなしで子のマウスイベントをブロックすることができます。
78 |
81 |
82 |
83 | 同様に、mouseEnabledをfalseに設定することによって、ハンドラを除去しなくても表示オブジェクトのマウスイベントを無効にすることができます。
84 |
88 |
89 |
90 |
91 |
94 |
95 | 通常、EaselJSは表示オブジェクト上の見えている、非透明なピクセルに基づいて、マウスのヒットを計算します。これはほとんどうまく動作しますが、画面に表示されている内容と異なるヒット領域を定義したい場合があるかもしれません。
96 |
97 |
98 | これを行うには、あなたのオブジェクトのためのhitAreaになる他の表示オブジェクトを割り当てます。これは表示リスト上にある必要はありません、そして表示はされませんが、ヒットテストのために使われます。
99 |
100 |
101 | ヒット領域の表示オブジェクトは、その所有者の座標系(すなわち連結変換)内で使用され、同じ表示オブジェクトを複数のオブジェクトのhitAreaとして再利用することができます。
102 |
103 |
104 |
105 | このデモでは、赤色のテキストにロールオーバーしてマウスポインタが非透明ピクセルの上にあるときだけヒットを登録し、一方青色のテキストは長方形のhitAreaを使ってヒットを計算していることに注意してください。
106 |
107 |
108 |
109 |
110 |
113 |
114 | もしステージに通常のマウスイベントハンドラを割り当てたら、そのすべての子のマウスイベントがブロックされるでしょう。また、他のすべての表示オブジェクトのように、非透明ピクセル上にマウスポインタがあるときだけイベ
115 |
116 | ステージは、canvas内の任意の場所で一般的なマウスインタラクションに応答するため、便利ないくつかの特別なマウスイベントを持っています。stagemousedown, stagemouseup, そしてstagemousemoveは、canvas内の任意の場所で関連するマウスインタラクションが起こると、いつでも呼び出されます。
117 |
122 |
123 | 次のデモでは、canvasに絵を描けるように、これらのイベントを使って示しています。
124 |
125 |
126 |
127 | デフォルトでは、マウスポインタがcanvasの外にあるときstagemousemoveイベントを取得することを止めるでしょう。stage.mouseInBoundsで何が起こったかをチェックすることができます。
128 |
129 |
130 | もしマウスポインタがcanvasを出たときにstagemousemoveイベントを取得し続けたい場合は、mouseMoveOutsideをtrueに設定します。MouseEventのstageXとstageYプロパティは、常にステージの範囲内に正規化された値を返しますが、rawXとrawYを使うと、正規化されていない値を取得します(注意していない場合、これはエラーを返すことがあります)。
131 |
138 |
139 |
140 |
141 |
142 |
145 |
146 | EaselJSは、実装が非常に簡単なドラッグアンドドロップ機能を作れます。clickハンドラが呼ばれたとき、それに渡されるMouseEventは、独自の2つの特別なマウスハンドラ、mousemoveとmouseupを持っています。
147 |
148 |
149 | これらのハンドラは、Stageとまったく同じように機能しますが、1つの大きな違いは、ユーザーがマウスポインタをリリースするまでの間のみ有効なことです。少し奇妙に聞こえますが、使うことは本当に簡単です。
150 |
151 |
161 |
162 | 簡単な例について、以下のデモのソースをチェックしてください。それはまたmouseMoveOutsideプロパティを試すには絶好の場所です。
163 |
164 |
165 |
166 |
167 |
168 |
171 |
172 | 高度なマウスインタラクションに関連する他のメソッドは、以下の通りです。
173 | -
Container.getObjectUnderPoint() 指定されたポイントの下の一番上の表示オブジェクトを返します。
174 | -
Container.getObjectsUnderPoint() 指定されたポイントの下のすべての表示オブジェクトを返します。
175 | -
DisplayObject.hitTest() 指定されたポイントに非透明な表示オブジェクトがある場合はtrueを返します。
176 |
177 | 詳細については、APIドキュメントとHitTestチュートリアルをチェックしてください。
178 |
179 |
180 |
181 |
182 |
183 |
184 |
--------------------------------------------------------------------------------
/ja/TweenJS/0.4.0/src/tweenjs/MotionGuidePlugin.js:
--------------------------------------------------------------------------------
1 | /*
2 | * MotionGuidePlugin
3 | * ドキュメント、更新、例については、 http://createjs.com/ を参照してください。
4 | *
5 | * Copyright (c) 2010 gskinner.com, inc.
6 | *
7 | * Permission is hereby granted, free of charge, to any person
8 | * obtaining a copy of this software and associated documentation
9 | * files (the "Software"), to deal in the Software without
10 | * restriction, including without limitation the rights to use,
11 | * copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | * copies of the Software, and to permit persons to whom the
13 | * Software is furnished to do so, subject to the following
14 | * conditions:
15 | *
16 | * The above copyright notice and this permission notice shall be
17 | * included in all copies or substantial portions of the Software.
18 | *
19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
21 | * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23 | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 | * OTHER DEALINGS IN THE SOFTWARE.
27 | */
28 |
29 | // 名前空間:
30 | this.createjs = this.createjs||{};
31 |
32 | (function() {
33 | /**
34 | * モーションガイドと共に動作するTweenJSプラグイン。
35 | *
36 | * 使用するには、TweenJSがロードされた後でプラグインをインストールします。次に、以下に述べるように、オブジェクトと
37 | * 共に'guide'プロパティをトゥイーンします。
38 | *
39 | * createjs.MotionGuidePlugin.install();
40 | *
41 | *