+ },\r
+ \r
+ /*addEventメソッドで使われるイベントリスト(開始時に登録されたリスナー関数が呼び出される)*/\r
+ _beginListenerList: [],\r
+ \r
+ /*addEventメソッドで使われるイベントリスト(終了時に登録されたリスナー関数が呼び出される)*/\r
+ _endListenerList: [],\r
+ \r
+ /*addEventメソッドで使われるイベントリスト(再生時に登録されたリスナー関数が呼び出される)*/\r
+ _playListenerList: [],\r
+ \r
+ /*開始と再生と終了時に発火されるイベントリスナーを登録するメソッド*/\r
+ addEvent: function ( /*string*/ eventName, /*fnction*/ listener) {\r
+ var evtName = "_" +eventName+ "ListenerList";\r
+ /*プロトタイプ継承していた場合は新しく配列を作成*/\r
+ if (!this.hasOwnProperty(evtName)) {\r
+ this[evtName] = [];\r
+ }\r
+ this[evtName].push(listener);\r
+ },\r
+ \r
+ /*入力されたフレーム数fの場面に切り替えるメソッド*/\r
+ setFrame: function( /*number*/ f) {\r
+ this.currentFrame = f;\r
+ var state = this.updateState(f).state;\r
+ /*アニメーション開始と再生と、終了状態のときに、beginとplayとendイベントを呼び出しておいて、\r
+ * 次の状態(再生状態)に遷移する*/\r
+ if (state === /*this.PLAYING*/ 2) {\r
+ var list = this._playListenerList;\r
+ for (var i=0;i<list.length;++i) {\r
+ list[i](this);\r
+ }\r
+ } else if (state === /*this.BEGINNING*/ 1) {\r
+ list = this._beginListenerList;\r
+ for (var i=0;i<list.length;++i) {\r
+ list[i](this);\r
+ }\r
+ /*開始時刻と終了時刻が一致した場合はstateはENDING状態*/\r
+ state = this.updateState(f).state;\r
+ }\r
+ if (state === /*this.ENDING*/ 3) {\r
+ list = this._endListenerList;\r
+ for (var i=0;i<list.length;++i) {\r
+ list[i](this);\r
+ }\r
+ if (this.updateState(f).state === /*this.BEGINNING*/ 1) {\r
+ /*再生中にbeginイベントが呼び出された場合*/\r
+ this.updateState(f);\r
+ }\r
+ }\r
+ state = list = void 0;\r