2005年04月08日

libming

Flashを作るためのライブラリでlibmingという物があるようだ。
そして、これはもともとPHPでSWFファイルを扱うために作られたもので、ライセンスはLGPLとなっている。
なんか楽しそうなので、これをいじってみることにした。
で、ソースを落とすと、ビルドにはbisonとflexが必要なよう。
前にもセットアップしたが、マシンを変えたので、再度セットアップすることにした。

投稿者 Takenori : 23:17 | トラックバック

bisonとflexのセットアップ

GnuWin32 から bison と flex のWin32バイナリを拾ってきて、展開し、任意のフォルダへコピーしパスを通す。
コマンドラインで bison と入力するが、libintl3.dll がないので実行できないと言われる。
libintl-0.11.5-2-lib.zip をとってきて libintl-2.dll を bison と同じフォルダへ入れ、libintl3.dll にリネーム。
libiconv-1.8-1-bin.zip をとってきて、libiconv-2.dll と libcharset-1.dll を bison と同じフォルダへ入れる。
これで動くかと思ったが、実行時にエラーが出る。
そこで、bison の shareフォルダをC:\へコピー。
これで、flex と bison が動くようになった。

GNU utilities for Win32 という、GNU のツールをまとめたものがあるみたい。
これを使うと言う手もある。
bison は少しバージョンが古いようだが、問題ないと思われる。
libming のVCプロジェクトでは、これを使っているようだ。

投稿者 Takenori : 23:31 | トラックバック

libmingテストプログラムのビルド

libming のビルドが出来たので、c++_ext/test.cpp をビルドしてみることにした。
VCで新たにプロジェクトを作り、libming.lib libz.lib libpng.lib libjpeg.libを加える。
インクルードディレクトリには../srcを入れる。
ビルドすると mingpp.h 内でコンパイルエラーがいろいろと出たが、全部キャストをかまして黙らせる。
多分大丈夫だろう。

これでビルドが出来たので実行してみると、SWFMovie_output内でアクセス違反が発生する。
追ってみると、SWFMovie::outputでstdoutへ書き出させているのが原因のよう。
そこで、test.cpp の movie->output(); を movie->save("test.swf"); と書き換えて実行。
test.swf ファイルが出来た。
ブラウザへドロップすると、四角が描画された。
どうやらうまくいった様子。

投稿者 Takenori : 23:40 | トラックバック

libmingのビルド

SourceForge GnuWin32 File Listからzlibとlibpng、jpegのライブラリをとってくる。
zlibとlibpngのインクルードパスを加える。

bisonとyaccのカスタムビルドで、bisonとyaccが環境依存のパス付きで設定されているので、パスをはずす。

zconf.hでコンパイルエラー unistd.h がないと言われる
コメントを見ると、さして必要そうではないので、unistd.h のインクルードをコメントアウト。

これで、ビルドは通るが、このlibmingを使うとリンクエラーが発生する。
そこで、次のようにする。

まずは、GIFは使わないつもりなので、
ming_config.h の #define USE_GIF 1 を #define USE_GIF 0 とした。
そして、pngdbl.c と imports.c/.h 、 videostream.c/.h をプロジェクトに追加。

これで、libmingを使ったプログラムのビルドが通るようになった。
でも、他にも抜けている物があるかもしれない。
その時は、またライブラリにソースを追加したりして対応することにする。

投稿者 Takenori : 23:40 | トラックバック

2005年04月09日

Mingの関連ページ

PHP / Flash 用 Ming 関数
PHP/ming Examples MENU
PHPだぜ(Ming) and ActionScript:

投稿者 Takenori : 00:09 | トラックバック

2006年02月07日

Gnash オープンソース Flashプレーヤー

Gnashというものがあることを知った。(開発中?)
ただ、ライセンスはGPL。
GPLなアプリにFlashを組み込むのにはいいかもしれないが……
まあ、Windowsなら素直にFlashのを使えばいいんだけど。

参考:
オープンソースのFlashプレーヤー開発が進行中

投稿者 Takenori : 18:01 | トラックバック

2007年02月25日

swfファイルフォーマット仕様書のライセンス

Flashを表示するものを作るべくswfファイルフォーマット仕様書のダウンロードページを見ると、swfファイルフォーマット仕様書ライセンスと言うものがあったので読むことに。
Flashを読んだり、表示したりするアプリケーションなどは作れません。。。
そうだったのか。

でも、Gnashは? と思って、自分の解釈がおかしいのかもしれないと思い、調べるとウィキペディアにも再生するソフトは作れないと書いてあり、Gnashはウェブ上に存在する Flash を解析して作っているとか。
Gnashのソースを見て、そこからswfファイルフォーマットを推測し、表示するものを作るという手もなくはないけど、それはどうかとも思う。

再生するのは無理でも、コンバーターなら作れそう。
ライセンスの"reads or renders .swf files"の部分は、ファイルを読み込むという意味ではないとすればだけど。
そもそも読み込みが出来なければ、Flashを編集するアプリは作れないので、読み込みはOKだろう。
SWF2XAMLと言うswfファイルからXAMLを作るコンバーターがあるようだし。(参考)
ただ、そうなると何らかのアニメーション用ファイルフォーマットが必要になる。

2008/05/17
少し前に Adobe Open Screen Project にて、swf のファイルフォーマットが制限なしで一般公開されました。
これで swf を扱うアプリなど自由に作ることが出来るように。

投稿者 Takenori : 21:19 | トラックバック

2010年09月02日

Flex を触ってみた

前々から Flex をいじってみたいと思っていたので、Twitter を使うものを思いついたので作ってみた。
さっくり 1週間程度で作れると思っていたんだけど、1ヶ月もかかってしまった。
Flash は 確か 5 くらいの時に触ったことがある程度で、ActionScript 3.0 とかは全然知らない。
でも、簡単な入門記事とはじめてのActionScript 3~ライフゲームを作ってみるくらいを読んだら問題なく書ける。
JavaScript に UML の型指定のようなものがくっついただけなので、すぐにスクリプトは書ける。
ただ、ライブラリの使い方やどのように作るのがセオリーなのか辺りで手間取る。

いろいろと触ってみて気付いたけど、Flash は思っていたよりも表現力がある。
よく見るのはベクトルアニメの Flash なせいか、あんまりエフェクト等の機能に目がいっていなかった。
後、かなりのことが出来るようだ。
セキュリティ的な理由でいろいろと制限はあるようだけど。

つまずいた部分等を一つのエントリーで書こうかとも思ったけど長くなりそうなので、幾つかのエントリーに分割して書く。

投稿者 Takenori : 16:43 | トラックバック

エフェクト

前のエントリー にリンクしてあるやつを動かすと、回復と爆発のエフェクトがある(ブラー+縮小+フェードアウトもあるけど)。

回復エフェクトはかなり手抜き。
縦長の楕円を少し縮小しつつ上に移動してアルファで消していってるだけ。

Flash はパーリンノイズを生成する機能が組み込みであるので、煙とか余裕で作れるだろうと思ったら意外と苦労した。
単純な PhotoShop で言うところの雲模様はすぐに作れるんだけど、それをアルファに入れたり角をとったりするのがやっかいだった。
生成するスクリプトをこの辺りに貼っている。
まず、パーリンノイズをアルファチャネルだけに生成したいのに、生成すると他のチャンネルは0になってしまうようなので、白く塗った BitmapData にアルファチャネルだけコピーしている。
その後、グラデーションがかかった円を書いて、それをマスクに適用したものを BitmapData に描き出している。
これだけだと大したことないけど、うまく画像が出なくていろいろと苦労した。
最後にスプライトを入れ子にしているのも、そのようにしないとマスクがうまく適用されないから。
煙のサンプルはこんな感じ。





クリックしたら煙が広がる。
普通に PhotoShop でテクスチャ作ってしまった方が楽なのは間違いなかった。
容量的には、スクリプトで生成する方が少ないし、バリエーションを何パターンか作ろうとしたら、かなり差が出る。
後、円のグラデーションでマスクしている関係上、常に円形っぽい雲が生成されてしまうので、マスクもパーリンノイズで生成して、ある程度の閾値でアルファを切ってマスクに適用すると、より不定型な形状の煙が生成できるはず。

そして爆発エフェクト。
検索するとこんなページが見付かる。
動作見るとこれでもいいかと思うけど、どうもイマイチ。
端の方にもあっと出るのが変な気が。
後遅い。
と言うことで、作った爆発エフェクト





煙と同じくクリックしたところが爆発する。
細かい埃用の円を描いてアルファで消しつつ周囲に飛ばす。
赤い円にブラーかけたものを少し時間差を入れて加算合成、時間と共にアルファで消していく。
若干遅らせて煙を拡大しつつ、アルファで消していく。
やっているのはこんな感じの処理。
だいぶらしく見えるようになっていると思う。
ちょっと重いけど。
事前に画像書き出しする等すれば軽くなるはず。
煙の形状を円形ではなくし、ゴミを飛ばして放物線を描かせるなどすればもっと派手になると思うけど、さらに重くなりそう。

今回作ったのはこの程度だけど、他にも様々な機能があるようなので、かなりのことは出来そう。
線を引いたり塗りつぶしたりと出来るので、やろうと思えば何でも出来ることは出来る。
処理時間を気にしなければ。
まあ、そんなことしなくても、組み込まれている機能でいろいろと出来るようだけど。
それらは追々いじってみたいと思う。

投稿者 Takenori : 17:18 | トラックバック

2010年10月27日

デバッガ

Adobe Flash Builder しかないと思い込んでいたので、Flex SDK とブラウザで開発していたんだけど、後に FlashDevelop を知った。
少し触ってみた感じだと結構よさそう。
コマンドラインでコンパイル、ブラウザで実行はかなり面倒。
printf デバッグも、TextField を貼り付けてそこに書き出すという面倒臭さだった。
後、ブラウザだと例外が出ると単純に止まるだけなので、その辺りも困った。
それと、確か JSONP だったと思うけど、サーバーに上げないとうまく動かなかったので、毎回確認するのにコンパイル → アップロード → ブラウザ実行と面倒な手順が必要だった ( JSONP じゃなくて、クロスドメイン関係だったかも ) 。
scheme が file なのがまずかったのかもしれないので、ローカルでサーバー立ててやればアップロード必要なかったかもしれない。
後、関連する部分が作り終わったら、スタブを作って実行できるようにしていればもっと楽だったと思う。

投稿者 Takenori : 15:05 | トラックバック

JSONP

Twitter の API は クロスドメインポリシーの関係で Flash から直接呼び出せない。
検索と画像は呼び出し、取得可能。
そのため何らかの回避策が必要になった。
CGI 経由の呼び出しがすぐに思いつく方法だけど、それだと API の呼び出し回数制限に簡単に引っかかってしまう。
それなら、Flash → JavaScript → Twitter API と思うが、JavaScript にもクロスドメイン制限がある様子。
何だかなぁと思ったが、JSONP を使えば Twitter から情報取得できるようだ。
JSONP は、JSON 形式のデータを返す関数を埋め込んだファイルみたいなもの。
function foo() { return JSONP_OBJ; } みたいな感じで、JSONP_OBJ のところは、普通に JSON 形式でデータが埋め込まれているもの。
これを JavaScript ファイルとして読み込めば、その関数を呼び出せるようになるので、その ( JSONで書かれた ) オブジェクト が取得できるという仕組み。
何その方手落ちみたいな仕組みは、と思うものの、それでうまくいくようなので JSONP で取得することにした。
ただ、JSONP を使うには JavaScript が必要なので、Flash 単体では動かず、ブラウザに埋め込んだ状態で実行する必要が出てくる。

投稿者 Takenori : 15:43 | トラックバック

 
Total : Today : Yesterday :