サイトトップ

Director Flash 書籍 業務内容 プロフィール

HTML5テクニカルノート

TweenJS とSoundJS 0.4.1に備わったインスタンスを削除するメソッド

ID: FN1305004 Technique: HTML5 and JavaScript Library: TweenJS 0.4.1 and SoundJS 0.4.1

2013年5月14日に、CreateJSのライブラリがそれぞれ0.01ずつバージョンを上げました。ライブラリのプログラムについては、バグを直すことがおもな狙いとされています。とはいえ、新たに加わったメソッドも少しあります。その中から、TweenとSoundクラスで要らなくなったオブジェクトは消してメモリを抑える、エコなメソッドをご紹介します。

Tween.removeAllTweens()メソッド
文法 Tween.removeAllTweens()
概要 [静的] すべてのTweenインスタンスを消し去る。トゥイーンの進行もすべて止まる。
引数 なし。
戻り値 なし。
Sound.removeAllSounds()メソッド
文法 Sound.removeAllSounds()
概要 [静的] Sound.registerSound()またはSound.registerManifest()メソッドで登録したすべてのサウンドを消す。その際、再生されているサウンドはすべて止められる。
引数 なし。
戻り値 なし。
Sound.removeSound()メソッド
文法 Sound.removeSound(src)
概要 [静的] Sound.registerSound()またはSound.registerManifest()メソッドで登録した指定のサウンドを消す。そのサウンドが再生されていれば止まる。
引数

src − 再生するサウンドのパス(src)または識別子(id)を示す文字列、あるいはサウンドのパスの文字列をsrcプロパティにもつObjectインスタンス。

戻り値 サウンドが正しく除けたかどうかを示すブール(論理)値。
Sound.removeManifest()メソッド
文法 Sound.removeManifest(manifest)
概要 [静的] Sound.registerSound()またはSound.registerManifest()メソッドで登録したサウンドを、マニフェストの配列に定めて消す。その際、再生されているサウンドはすべて止められる。
引数

manifest − サウンドを定めるObjectインスタンスが納められた配列。オブジェクトのsrcプロパティにサウンドのパスを与える。

戻り値 ブール値を納める配列で、引数に渡された配列エレメントの各サウンドが正しく除けたかどうかを示す。

説明

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で修正されました。つぎのバージョンのリリースで正規公開されるでしょう。



作成者: 野中文雄
更新日: 2013年6月12日「確認されている問題』がGitHubで修正された旨を追記。
作成日: 2013年5月22日


Copyright © 2001-2013 Fumio Nonaka.  All rights reserved.