FlashPlayerとFlashムービーの使い方を探る

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2005年4月3日(日)版

FlashPlayerとFlashムービーの使い方を探る

シグマリオンIII用Flash Player Mateの中身はどうなってるの? その1


FPM起動直後の画面
■はじめに

 昨年度シグマリオンIII用に『モバイルカスタム』からダウンロード可能になっていたFlash Player ヘルパーアプリケーションのFPM( Flash Player Mate Ver 1.0 for Sigmarion III )の中身がどうなっているのかをソースコードで公開いたします。もちろん実行ファイルも含まれています。
 ソースコードだけを見てもFlashPlayerの使い方はわかりにくいですし、コードの意味を知るにはFlashムービーのしくみや内部の変数の知識がある程度必要です。しかしC++やC#とFlash/FlashPlayerを連携した解説書はほとんどないのが実情です。そこで数回にわたりソースコードの説明とFPMの動作理解に必要なFlashムービーの仕組みや変数の解説を行いたいと思います。
 記事やソースコードの情報をもとに、同様のアプリケーションをPocketPC用に作成することも可能です。

■ダウンロード

 ダウンロードしたソースコードや実行ファイルの取り扱いについては添付されている Readme.txt の内容を守ってください。

*注意点

  • 本ソフトウェアはシグマリオンIII専用です。
  • 本ソフトウェアは、Flash Player Version6 for sigmarionIIIを制御するユーティリティソフトウェアであり、本ソフトウェア単体でFlashコンテンツを再生することはできません。
  • シグマリオンIII内臓のインターネットエクスプローラ上で再生可能なFlashコンテンツであっても本ソフトウェアを使った場合には再生できないコンテンツがあります。

*使用条件や制限事項など

  • 本ソフトウェアはシグマリオンIII専用のフリーウェアです。
  • 無保証です。
  • 作者は一切の責任や義務を負いません。
  • 再配布や転載はしないでください。
  • FlashPlayerの使い方の参考としていただくためソースコードと共に公開します。
  • 本ソフトウェアソースコード中のFlashPlayerの使い方は一般的なもので、その使い方を他のソフトウェアに応用されることについてはなんら制限はありません。
  • 添付されているプロジェクトファイル(ソースコード、リソースファイル、ビットマップを含む)の公開は上記のようにあくまでFlashPlayerの使い方の情報を提供することを目的としています。
  • 添付されているプロジェクトファイル(ソースコード、リソースファイル、ビットマップを含む)や実行ファイルを改変して再配布したり、商用に用いることはしないでください。

 ダウンロードはこちらです → FPMソースコード(実行ファイル付き)をダウンロードする。

■ソースコード説明・その1

 WindowsCE用のFlashPlayerはActiveXコントロールとして実装されており、外部から制御できるようになっています。今回はもっとも基本的な制御「FlashムービーのLOAD」について説明したいと思います。公開ソースコードのLOAD部分は次のようになっています。


//***** LOADボタン
void CTest1Dlg::OnButton7()
{
static TCHAR filter[] = TEXT("SWF files(*.swf)|*.swf|||\0\0\0\0" );
CFileDialog dlg( TRUE, NULL, NULL, OFN_EXPLORER,filter,NULL );
dlg.DoModal();
TCHAR buf[MAX_PATH];
_tcscpy(buf,TEXT("file://") );
_tcscat(buf, dlg.m_ofn.lpstrFile );
CWnd* pF = GetDlgItem(IDC_SHOCKWAVEFLASH1);
m_Flash.SetMovie( buf );
pF->SetWindowPos( 0, 45,37,624,416 , SWP_NOZORDER );
TaskBarShow();
//ロードしたFlashムービーのパラメータを変更しても後で戻せるように
//Flash Movieロード直後の値を保持しておく
_width0 = GetIntVariable( TEXT("_width" ) );
_height0 = GetIntVariable( TEXT("_height" ) );
_x0 = GetIntVariable( TEXT("_x" ) );
_y00 = GetIntVariable( TEXT("_y" ) ); // _y0がランタイムで使用されているため
_xscale0 = GetIntVariable( TEXT("_xscale" ) );
_yscale0 = GetIntVariable( TEXT("_yscale" ) );
_rotation0 = GetIntVariable( TEXT("_rotation" ) );
}

 上記ソースコードではFlashPlayer ActiveXのラッパークラスのSetMovieメソッドをコールしているだけですが、ダイアログでファイルを選んだ後、その前に "file://" を前置してFlashPlayerにセットしている点に注意してください。これはFlashPlayerに対し、LoadするFlashムービーがローカルに存在していることを示すものです。

 他のWindowsCE機用に移植された古いバージョンのFlashPlayerではこの前置なしにローカルファイルを再生できる場合がありましたが、シグマリオンIII用のFlashPlayer 6では必ず書かなければならなくなっています。ところがデスクトップWindows用のFlashPlayer 6では前置なくてもロード可能なようになっているので、この微妙な差異がFlashをわかりにくくしているのかもしれません。

 ローカルにあるFlashムービーは"file://"を前置しなければならないというルールは、『LOADしたFlashムービーが実行中に外部のFlashムービーをロードしようとすると失敗する場合がある』という制限をもたらします。
 通常Flashコンテンツは、WEB上で再生されることを前提としているため、Flashムービーが外部FlashムービーをLOADするという場合にはFlashムービー内部のActionScript中で "file://"を前置していません。そのためシグマリオンのインターネットエクスプローラーで見えていた『複数のFlashムービーが順次ロードされて実行されるコンテンツ』はキャッシュ中にSWF(Flashムービーの拡張子)ファイルがすべて残っていてもローカルでこれをWEB上と同様に再生することはできません。
 このような制限はコンテンツのセキュリティを守るための一環として準備されたもののようです。またこのような制限はFlash Playerのバージョンにより異なります。Flashのバージョンが進むに連れてセキュリティに対する対策が強化されているからです。

 Flashムービー中のシステム変数にFlashPlayerがブラウザ中から参照されているのか否かを判定に利用できるフラグがあるようですが、これを利用したFlashムービーコンテンツはほとんど存在していないようです。またFlashムービーからはローカルにあるCSVやXML等のファイルを読み取ることができますが、FlashPlayer 7ではFlashムービー中からローカルファイルのLOADを禁止するか否か明示的にコントロールできるようになっています。
 以上のようにFlashPlayerには搭載プラットフォームやバージョンにより若干の差異がありますので注意が必要です。

 上記ソースコード後半の変数を退避する部分の説明は長くなりますので次回にします。

■終わりに

 FlashPlayerやFlashムービーをC++やC#で作成したWindowsCEアプリケーション上で活用する方法はまだまだ知られていないのが実情なのだが、C++やC#プログラマーにとってタイムラインを用いたFlashコンテンツ開発方法がとっつきにくいことや、なかなか十分な情報が得にくいことが原因ではないかと思う。この解説記事がその手がかりになればと願います。
 なお、筆者が「開発者向け談話室」などで質問等にお答えできる時間的余裕はほとんどないのでご容赦とご理解を賜りたいと思います。



FlashPlayerとFlashムービーの使い方を探る


Reported by かっぴー


Last-modified: Sun, 24 May 2009 23:45:30 JST (3617d)