[Flash] Flashムービーの読み込みと再生

最近は久しぶりに実務でFlashを触っています。
で、今になって「タイムラインベースのFlashムービーは読み込みの完了を待たずにストリーミング的に再生される」という、かなり基本的と思われる仕様を初めて知りました。

そしてそれは当然スクリプトからも制御できて、レアケースではありますがドキュメントクラスで

package 
{
	import flash.display.MovieClip;
	import flash.events.ProgressEvent;
	
	public class Main extends MovieClip
	{
		public function Main()
		{
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
		}
		
		private function progressHandler(e:ProgressEvent):void 
		{
			// 80%以上読み込みが完了したら再生
			if (uint((e.bytesLoaded / e.bytesTotal) * 100 ) > 80) {
				loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
				gotoAndPlay(2);
			}
		}
	}
	
}

みたいにして、何割完了したら再生というような処理も書くことができます。
これってもしかして常識でしょうか…。

冷静になって考えてみると「ああ、そうかー」とも思うのですが、そもそも「読み込みが完了していないと再生されない(できない)」というのがまず頭にあったので、この仕様を知った(というか教えてもらった)時は、目からウロコでございました。うーん、どこで間違ったんでしょう…。

ちなみに上記は外部SWFを読み込み・再生する場合も同様のようですが、ローカルでの確認や読み込むSWFがキャッシュに存在するなど、瞬間的に読み込みが完了する状況では、ProgressEvent.PROGRESSのハンドラでうまくMainTimelineオブジェクト(Loader.content)にアクセスできず、nullが返ってきてしまいます。

イベント自体は配信されていますし、適当になんやらすれば回避は可能ですが、原因がわかっていない(というか調べていない)ので、なんとも。何かまた変な勘違いしている可能性も否定できませんけど(‘A’;)

思い込みと中途半端な理解は怖いなあ、というお話でした。


コメントを残す

メールアドレスが公開されることはありません。


+ 九 = 11