2011/11/28(月) [n年前の日記]
#1 [flash] AS3.0を勉強中
以前某所から「FLASHで落ちゲーを作れないか」と打診があったものの、開発環境が不安定・HDDが壊れるかもしれない気配がチラホラ見えていた時期だったので断ってしまったことがあり。しかし、実際作ろうとしたらどのくらの期間で作れるものか、どの程度のものが作れそうなのか、興味があったわけで。せっかくだから、ちょっと試してみようかと思い立ち、FlashDevelop 上で AS3.0 のプロジェクトを作成してポチポチと作業を始めたり。
ゲームを作る際に必須であろうメインループは、onEnterFrame っぽいイベントを設定すればそれっぽくなると分かった。また、画像表示は、Embed なるものを利用すれば画像を埋め込み可能と分かった。
ここで欲が出た。どうせならベクター画像を、つまり外部swfを埋め込んで利用できないものか。拡大縮小しても画質が荒れないし、容量も少なくて済むはず。しかし、試してみたら、ハマった。
ひとまず全部フリーの環境で実現できたほうがいいだろうと常日頃から思い込んでいるので、Flash CS5 は持っているけどあえて使わないで作業する。
しかし、AS3.0スクリプト上から、読み込んだ swf のタイムラインが制御できない。要するに gotoAndPlay() が使えない。ラベルを指定しても「そんなラベルは無い」と言われるし、フレーム番号を指定しても無反応。…このあたりは、読み込んだswfを子にしている親MovieClip に対して行っていたから無反応で当然なのだけど。では、その子MovieClipが対象であると、どうやって指定すればいいのか。そこが分からない。
また、読み込んだswfの縦横幅が取得できないことにも気がついた。
色々調べてみたら、そもそも Suzuka で出力した swf は FLASH8 までの対応なので、AS3.0 からは古いタイプの、タイムラインを一切制御できない swf として見られてしまうらしい。静止画としての表示、アニメ再生の垂れ流しならできる。だが、それ以上のことは、上位から一切指定できない。
AS3.0 相当の swf を出力する術は無いものか。以下を試してみた。
とうとう諦めて、Flash CS5 をインストールしてしまった。HDDが壊れるとアクティベーション云々が面倒なことになるから、当分壊れそうにないと分かるまで入れたくなかったのだけどな…。
Flash CS5 でパブリッシュした swf を FlashDeevelop 上で操作してみたところ、あっさりタイムラインの制御が出来た。くそう。Adobe純正アプリを使えということか。
つまり、フリーの開発環境・関連ツールでは制限がある。
なんとなく、FLASHを敵視して、HTML5+JavaScript を推している人達の気持ちが少し分かったような気がする。昔に比べたらFLASH界隈も随分オープンになってきたけど、やっぱりこういうところでAdobeにお布施を強要されるあたりが嫌われる一因だったり…するのかどうかはよく分からない。
ゲームを作る際に必須であろうメインループは、onEnterFrame っぽいイベントを設定すればそれっぽくなると分かった。また、画像表示は、Embed なるものを利用すれば画像を埋め込み可能と分かった。
ここで欲が出た。どうせならベクター画像を、つまり外部swfを埋め込んで利用できないものか。拡大縮小しても画質が荒れないし、容量も少なくて済むはず。しかし、試してみたら、ハマった。
ひとまず全部フリーの環境で実現できたほうがいいだろうと常日頃から思い込んでいるので、Flash CS5 は持っているけどあえて使わないで作業する。
- Inkscape で元となるsvgを作成。
- SuzukaなるFLASH作成ソフトで svg を読み込んで簡単なアニメを作ってswfで書き出し。
- FlashDevelop上で、その swf を Embed とやらで埋め込んで表示。
しかし、AS3.0スクリプト上から、読み込んだ swf のタイムラインが制御できない。要するに gotoAndPlay() が使えない。ラベルを指定しても「そんなラベルは無い」と言われるし、フレーム番号を指定しても無反応。…このあたりは、読み込んだswfを子にしている親MovieClip に対して行っていたから無反応で当然なのだけど。では、その子MovieClipが対象であると、どうやって指定すればいいのか。そこが分からない。
また、読み込んだswfの縦横幅が取得できないことにも気がついた。
色々調べてみたら、そもそも Suzuka で出力した swf は FLASH8 までの対応なので、AS3.0 からは古いタイプの、タイムラインを一切制御できない swf として見られてしまうらしい。静止画としての表示、アニメ再生の垂れ流しならできる。だが、それ以上のことは、上位から一切指定できない。
AS3.0 相当の swf を出力する術は無いものか。以下を試してみた。
- Inkscape で、svg ではなくpdf出力して、swftools の pdf2swf を使ってswf にしてみたり。
- svg2pdr を使って、ParaDraw で読み込んでみたり。
- svg2swf というツールを見つけて Windows7上で動かしてみたら不正終了したり。
とうとう諦めて、Flash CS5 をインストールしてしまった。HDDが壊れるとアクティベーション云々が面倒なことになるから、当分壊れそうにないと分かるまで入れたくなかったのだけどな…。
Flash CS5 でパブリッシュした swf を FlashDeevelop 上で操作してみたところ、あっさりタイムラインの制御が出来た。くそう。Adobe純正アプリを使えということか。
つまり、フリーの開発環境・関連ツールでは制限がある。
- ベクター画像を積極的に使いたいなら、AS2.0を選ぶべき。
- AS3.0を使うなら、基本的にビットマップ画像(png,gif,jpg等)しか使えない、と思っておく。
- どうしてもAS3.0でベクター画像を使いたいなら、外部swfのタイムライン制御は諦める。外部swfは、静止画もしくはアニメ垂れ流しオンリーのswfとして扱う。
なんとなく、FLASHを敵視して、HTML5+JavaScript を推している人達の気持ちが少し分かったような気がする。昔に比べたらFLASH界隈も随分オープンになってきたけど、やっぱりこういうところでAdobeにお布施を強要されるあたりが嫌われる一因だったり…するのかどうかはよく分からない。
[ ツッコむ ]
以上です。