HTML5テクニカルノート TweenJS とSoundJS 0.4.1に備わったインスタンスを削除するメソッド
2013年5月14日に、CreateJSのライブラリがそれぞれ0.01ずつバージョンを上げました。ライブラリのプログラムについては、バグを直すことがおもな狙いとされています。とはいえ、新たに加わったメソッドも少しあります。その中から、TweenとSoundクラスで要らなくなったオブジェクトは消してメモリを抑える、エコなメソッドをご紹介します。
説明Tweenクラスにはすでに静的メソッドTween.removeTweens()が備わっていて、引数のインスタンスに定めたトゥイーンをすべて除くことができました(gihyo.jp連載「HTML5のCanvasでつくるダイナミックな表現―CreateJSを使う」第5回「トゥイーンアニメーションを仕上げる」の「隊列を乱さない」の項参照)。新しいTween.removeAllTweens()メソッドは、すべてのインスタンスに対するすべてのTweenオブジェクトを消し去ります。 SoundJS 0.4.0から、再生を始めたサウンドはSoundInstanceクラスで扱うようになりました(「SoundJSに備わる予定のSoundクラスで外部サウンドファイルを再生する」03「Soundクラスを使う」)。仕事の減ってしまったSoundクラスに、サウンドを止めて消す静的メソッドが3つ加えられました。いずれも、Sound.registerSound()またはSound.registerManifest()メソッドで登録したサウンドが対象です。 Sound.removeSound()メソッドは、引数に渡したサウンドを消します。引数はサウンドのパスか、登録のときに定めた識別子(id)の文字列、あるいはそれらをsrcやidというプロパティに納めたオブジェクトです。サウンドが正しく除けたらtrue、そうでなければfalseを返します。サウンドをオブジェクトのかたちでいくつでも配列に納めて渡せるのが、Sound.removeManifest()メソッドです。それぞれのサウンドが正しく消せたかどうかを、ブール値のエレメントとして配列に入れて返します。Sound.removeAllSounds()メソッドには引数がなく、登録されたすべてのサウンドを除きます。 これらのメソッドは、サウンドのプリロードなどの準備を取りやめ、再生されているサウンドは消して、内部的に使われているSoundChannelオブジェクトも開放します。ただし、再生されたサウンドのSoundInstanceオブジェクトへの参照は、別途外すべきでしょう。 確認されている問題Sound.removeSound()あるいはSound.removeManifest()メソッドを呼出しても、サウンドの再生が止まりません。 たとえば、以下のjsdo.itのJavaScriptコードは、Sound.registerSound()メソッドで登録したサウンドをロードすると、Sound.loadCompleteイベントのリスナー関数がSound.play()メソッドにより再生を始めます。 input要素のボタンのonclickハンドラは、Sound.removeSound()メソッドを呼出します。けれど、サウンドの再生は止まりません。ボタンをクリックすると、再びSound.registerSound()メソッドでサウンドをロードしますので、繰返し試すことができます。 この問題はCreateJS Supportに報告され、確認されました。2013年6月11日付のGitHubで修正されました。つぎのバージョンのリリースで正規公開されるでしょう。 作成者: 野中文雄 Copyright © 2001-2013 Fumio Nonaka. All rights reserved. |
||||||||||||||||||||||||||||||||||||||||||||