alt+sync

オルトプラス の スタッフブログ

PHPとMingをつかってSWFを合成しよう

      2015/10/21


 

こんにちはFlasherだけど結構PHPやってるこばやしです。

 

携帯向けのFlashにはFlashLiteを使うわけですが、PCなどで利用しているFlashとは違い多くの制限があります。そのため、携帯向けのFlash開発ではSWFをサーバーサイドで合成して利用することが非常に多いです。

 

オルトプラスではmingを使った合成を行っています。

 

http://php.net/manual/ja/book.ming.php

 

mingの他にもswfmillなどがよく利用されているようですが、Flash作る人が合成を行う場合はmingのほうが扱いやすいのではないかなと思っています。(合成部分はFlashを作った人がやったほうが、内部構造を理解しているため効率よいです。オルトプラスのFlash担当は、みんなPHPもできるのでFlashの制作とPHPでの合成両方を担当します。)

 

swfmillはSWFとXMLを相互変換することができ、SWFをXMLに変換して必要な変更を行いSWFに戻すような使い方になります。一方mingはSWF自体の変更はあまり行えないのですが、SWFとSWFを合成して利用していきます。例えばアバターなどの着せ替えの場合は、各パーツのSWFを作っておいて、必要なものをSWF表示時にmingで合成して出力するような使い方をします。なのでmingの場合は、元になるFlashを作ってそれらの組み合わせで動的なSWFを生成していきます。

 

まずは単純なサンプルを。FlashLite1.1を対象としてます。

 

mingでSWFを生成


1
2
3
4
5
ming_useswfversion(4); // Flashのバージョン指定
$swf = new SWFMovie();

header('Content-type:application/x-shockwave-flash');
$swf->output(); // 出力

 

これで空のSWFが生成されます。

 

次に変数を動的にしてみます。PCのFlashだったらFlashVarsなどで、HTMLのタグから変数を渡したりできますが、FlashLiteではできませんので、mingで変数を合成します。

 

mingで変数を埋め込み


1
2
3
4
5
6
7
ming_useswfversion(4);
$swf = new SWFMovie();

$swf->add(new SWFAction('/:hoge=1;')); // 変数の埋め込み

header('Content-type:application/x-shockwave-flash');
$swf->output();

 

画像の埋め込みも可能です。画像などSWFの実行時に読み込むことはできるのですが、FlashLiteでは外部データを読み込むのに、キー操作などユーザーのアクションが必要になります。そのため、動的に画像を変更したい場合はmingで画像を合成します。

 

mingで画像を合成


1
2
3
4
5
6
7
ming_useswfversion(4);
$swf = new SWFMovie();

$swf->add(new SWFBitmap(fopen('pic.gif', 'r'))); // 画像ファイルの埋め込み

header('Content-type:application/x-shockwave-flash');
$swf->output();

 

今回は基本的なことだけ書いてみましたが、mingを使うことでFlashLiteでも動的なFlashコンテンツを作成することが可能です。

 

FlashLite1.1は10年ほど前のFlash4をベースとした技術で、言語?自体に配列がなかったり関数がなかったりします。その上メモリや容量の制限が非常に厳しいのですが、工夫次第で結構色々できます。制約がある中でよいモノをつくるってのもなかなか面白いなと思いながらやってます。

 

枯れた技術ではありますが、テクニックというかバットノウハウの塊wなので、次はもう少し実際の制作に近いテクニックなどを紹介出来ればと思います。

 

 

【追記】
金曜に全体会議があったので、社内の雰囲気が分かるように写真を撮ってみました。会議のあとはピザとか寿司と、もちろんビールで乾杯です。この日は代表の石井が誕生日だったのでサプライズでケーキも登場したりしました。




 - 開発者ブログ