FLASH(フラッシュ)の使い方のメモ

//////////////////////////////////////
//////////////////////////////////////
FLASH

 

///////////////
基本

 

ユーザーには最新のFlashPlayerが必要であることを書いておく。
SWFはFLAをコンパイルしたもの。

 

描画モード:
デフォルトでは結合モード。シェイプの上にシェイプを描くと、先に描いた重なった部分は切り取られる。
ツールパネルでオブジェクト描画モードに変更できる。こちらは重なっても切り取られない。
結合モードで描いたものをオブジェクトモードにするには、修正→オブジェクトを結合→結合。

 

////////////
ツールパネル

 

プリミティブツール:矩形と円があり、動的にプロパティを変えられる。

 

////////////////

 

ガイドレイヤー:
ガイドレイヤーはクラシックトゥイーンでのみ使える。
ガイドレイヤーを作ったら、標準レイヤーをそこへドラッグする。

 

ムービークリップのネスト構造:
ムービークリップをダブルクリックし、その中(ネストの子)で動かしたりすると、ルートのタイムラインの動きとネストされた子のタイムラインの動きを足したものになる。

 

トゥイーン:
レイヤー一つにトゥイーンできるシンボルは一つだけ。
トゥイーン可能なパラメータは、位置、回転、伸縮と傾斜、カラー効果とフィルターのプロパティ。
トゥイーンの軌道は、パスをトゥイーンのレイヤーに張り付けると(ペンツールで描いたもの)自動でそれがモーションパスになる。
テキストは、シンボル化しなくてもそのままトゥイーン可能。
クラシックと通常のモーショントゥイーンがあるが、モーショントゥイーンはカラー効果が一種類しか適用できない。詳細にすればすべてのパラメータを変化できる。
モーショントゥイーンはプリセットに保存できる。
一つのフレームを選択するには、ctrl押しながら選択。
コピーは編集→タイムライン→モーションをコピー。
右クリック→モーションをAS3.0に書き出しで、ASフィールドに貼り付けてASとして再現できる。

 

ロービングキーフレーム:
トゥイーンのスパンで右クリック→モーションパスよりロービングキーフレームに切り替えるかどうか選択可能。
これをやるとキーフレームの位置が変わり、空間移動の速度が必ず一定になるように設定される。いつでも元に戻せる。

 

モーションエディター:これでイージングやトゥイーンを微調整できる。

 

シェイプトゥイーン:
開始フレームにシェイプを描き、終了フレームに空白キーフレームを作成してそこで新たにシェイプを描く。この間をシェイプトゥイーンすれば自動で終了時の形に変わっていく。
あるいは、開始フレームにシェイプを描き、フレームを伸ばす。そのフレームの最後にキーフレームを挿入し、そこでシェイプを変形してもシェイプトゥイーンができる。
開始フレームで修正→シェイプ→シェイプヒントの追加でポイントを作成、これをシェイプラインのどれかにあわせる。次に終了フレームでポイントをラインのどれかにあわせると、開始と終了のポイントが対応するようになる。
しかしあまり思ったとおりに動いてくれない。

 

マスクレイヤー:
マスクすると、真下のレイヤーの共通部分だけ表示される。
マスクレイヤーには3Dが使用できない。
テキストをマスクにしたいなら、分解を二回行ってシェイプにする。
塗りつぶされる全領域がマスクとなる。ビットマップの内容などは無視される。
マスクするほうとされるほう、両方ロックしないとマスクすると効果が出ない。マスクすると自動で階層化され、ロックされる。

 

フィルター:
シンボル化してプロパティでフィルターを使える。
あまり使いすぎると、処理が重くなる。

 

///////////////
テキスト

 

TLF:
右下の四角をダブルクリックでポイントエリアテキスト。これはフィールドが文字サイズぴったりの大きさになる。
フィールドの大きさを変えるとエリアテキストになり、フィールドの大きさが固定になる。ポイントに変えるには丸をダブルクリック。
swzというファイルが作られる。これもswfと同様に必要。

 

TLFのコンパイル:
TLFはそのライブラリをいっしょにコンパイルできる。これをしなければ、ユーザーが以前TLFを再生したことがあるか、なければアドビのサーバからダウンロードするようになっている。安全に行くには、特にAIRを使うときは、オフラインでも普通に使えるよう、パブリッシュ時にswzファイルをいっしょに埋めておくといい。ただしファイルサイズは増える。iPhoneもダウンロードが遅いのでこれをしたほうがいい。
パブリッシュ設定の、Flash→Scriptの右の設定を選び、デフォルトリンケージをコードにマージにするといっしょにパブリッシュする。
埋め込みがない場合にFlashPlayerをダウンロードするが、その時のダウンロード時に表示されるものが、パブリッシュ設定のプリローダー方式。

 

TLFのテキストフロー:
2つフィールドがあり、一つのフィールドの左上の四角をクリックし、もう一つのフィールドに中でクリックすると、片方のテキストの続きをもう片方の中に表示できる。

 

スクロール可能にする:
TLFの場合、まず「編集可能」にする(しなくてもできるようだが一応。後で読み取り専用に変更可能)
複数行あるいは折り返しにする。
コンポーネントのUIScrollBarをフィールドの右か左に置く。
クラシックテキストでもActionScriptのTextFieldオブジェクトで可能。ダイナミックテキストでは上部メニューから指定可能。

 

アンチエイリアス:
デバイスフォントを使用:ユーザーのパソコンのフォントを使う。ほとんどの場合、読みやすいらしい。ファイルサイズが増えない。
読みやすさ優先:特に小さいフォントが読みやすくなる。フォントの埋め込みが必要なのでサイズが増える。
アニメーション:滑らかなアニメが作れる。整列をカーニングを無視。フォントの埋め込みが必要でサイズが増える。

 

フォントの埋め込み:
これをやるとどんな環境でも同じフォントで表示されるが、サイズが増える。表示文字数が少なければサイズはあまり変わらないが、大量のテキストを入れる場合はその全てがSWFに入るため、すごい量になる。
どれだけ埋め込むかを指定できる。すでにテキスト表示されている文字はすべて自動で埋め込まれるが、ASで外部から読み込むような場合、フォントの埋め込みでどれだけ埋め込むかを指定するといい。
ノベルゲームでは、フォントの埋め込みをせず、安定なフォント(明朝など)でやり、サイズの激増や読み込みの時間短縮に使うといい。アンチエイリアスもデバイスフォントでやるといい。

 

リンク:ハイパーリンクがつけられる。_selfなどでリンク先を指定。
数字スタイル:ライニングは整列のこと。オールドスタイルも整列方法の一つ。
数字のツメ:これも整列方法の一つ。

 

折り返し時の改行:指定した文字だけ改行したりできる。

 

変換:クラシックからTLFあるいはその逆の変換は、一度だけ行う。何度もやるとおかしくなるらしい。

 

修正・分解:テキストを1回修正分解すると一文字ずつ分ける。もう一回やるとシェイプになる。

 

//////////
ボタン

 

シンボルにするときにボタンにする。
ボタンをダブルクリックで、アップ(何もしていない時)、オーバー(カーソルが上に乗った時)、ダウン(クリックした時)の挙動をキーフレームできるが、これはシンボルに変化させた瞬間にボタンにする必要があり、後でプロパティでボタンにしてもこれが設定できない。ただしライブラリパネルのプロパティでやれば可能。
ヒットは、オーバーやダウン可能な領域を作る。これを広くすると、その領域で反応が起こる。

 

///////
ライブラリパネル

 

プロパティ:
9スライスの拡大縮小ガイドを有効:ボタンやムービークリップは、外見を維持するために拡大縮小するとき、オブジェクトを9つの領域に分けてやるのだが、このため普通に拡大縮小をすると判定がおかしくなったりする。
だからできるだけオブジェクトを拡大縮小しないほうがいいが、もしやる場合、これでどのへんをどれくらい拡大縮小するか決められる。
領域が狭くなると、きれいに拡大縮小されなくなる様子。

 

////////////////
プロパティインスペクター

 

ビットマップとしてキャッシュ:
ビットマップはフレームごとに再描画するため、再生速度が下がることがある。
ムービークリップで、位置だけが変化する場合に限り、これをやるとパフォーマンスが向上する。これ以外の条件で行うとおかしくなることがある。
ムービークリップが複雑な場合のみ効果があり、単純な図形では効果がない。

 

///////////////
サウンド

 

16bitまたは8bitで、11,22,44kHzで読み込める。その他のサンプリング周波数ではリサンプリングされる。
エフェクトを使う場合は16bitがいいらしい。
WAVとmp3が使える。oggは使えない。mp3はそのまま配布しても、特許は問題ない。問題があるのはエンコーダを配布するほう。
イベントサウンドとストリーミングがあり、イベントはすべてダウンロードしてから再生するために時間がかかるが、ストリーミングは再生可能な最初のセグメントをダウンロードしたらすぐ再生するので、ほぼ瞬間的に再生される。
ストリーミングはアニメーションと完全同期する。アニメの描写が遅れるときは、遅れたアニメーションの分がスキップされる。SWFが停止するとサウンドも停止する。
SoundBoothで変更した場合、非破壊形式で保存するにはASDN形式で保存する。

 

///使用
まずライブラリに読み込み、新しくレイヤーを作成し、ドラッグで突っ込めばいい。
一つのレイヤーに一つのサウンドを当てる。一つのレイヤーが単一のサウンドチャンネルとして機能するため、複数入れることもできるが、再生するときはすべて合わさって再生されるため。
レイヤー作成時、何もないときはプロパティからすぐにサウンドを選択できる。
確実に停止させる場合、新たにキーフレームを作成し、そこで同じサウンドを読み込んで「停止」にする。
「効果」の右の鉛筆マークでエンベロープを編集できる。音量を詳細に設定できる。

 

ボタンを押すとサウンド再生:
ボタンをシンボル化してダブルクリック、ダウンにキーフレームを作り、そこでプロパティからサウンドを選べばいい。「イベント」にする。
イベントにした場合、ボタンを押すとタイムラインに関係なくとにかく再生され、タイムラインに関係なく最後まで再生される。連続で押すと重なって再生されるため、音楽に向かない。音楽などはASを使う。

 

////////////////
動画

 

ビデオ:
FLVかF4V(H.264)。F4Vのほうが画質がいい。

 

タイムライン埋め込みビデオ:
タイムラインに埋め込むと、音声と画像がずれることがあるらしく、危険。通常、音声のない10秒以内の動画に適するらしい。
ファイルはSWFに含まれる。
再生前に全てメモリにいれなくてはならないので時間がかかる。
16000フレーム以上は埋め込み不可能。
ビデオをタイムラインはfpsが同じでないといけない。

 

FLVPlayBack:
コンピュータのディスクドライブからSWFにロードされて再生開始。メモリの制約はない。
ビデオとSWFのフレームレートを同じにする必要がない。
SWFとビデオファイルは切り離される。メモリも少なくてすむ。
セグメントを読み込んですぐに再生するため、ロード時間がほとんどない。

 

///////////////
上部メニュー

 

///修正
ビットマップのトレースで、ビットマップをベクトルに変えられる。同じ色の部分は一つのまとまりとして、色を変更できる。

 

分解:
ビットマップを、質を変えずにベクターに変換。なげなわの自動選択で色をまとめて変えられる。
シンボルにこれをやると、シンボルを解除してもとのグラフィックに戻す。

 

オブジェクトを結合:
複数のオブジェクトをまとめる。グループとは異なり、塗りなどを一括変更できる。
解除はグループ解除で可能。

 

グループ:まとめて移動できたりする。

 

///制御
シンプルボタンを有効:ボタンオブジェクトの場合、そのままクリックやロールオーバーすると変化が見て取れる。簡易プレビュー。

 

////////////////

 

ライブラリパネル:
パネル下部のプロパティで基本設定を変更できる。
スムージングは拡大縮小を滑らかにする。

 

//////
パブリッシュ設定

 

gif,jpeg,png,:それぞれの形式でFlashアニメを書き出す。jpeg,pngは最初のフレームを書き出す。

 

コードにマージ:
ライブラリをSWFに突っ込むらしい。ライブラリがなかったら正確に動かないかもしれないので、心配ならこれにしておくといいと思う。

 

///Flashタブ

 

JPEGの非ブロック化を有効:高圧縮のJPEGの場合、滑らかに表示するが、細部が失われる可能性がある。

 

オーディオストリーム・オーディオイベント:
ストリームはすぐ再生され、タイムラインと同期。イベントはすべてダウンロードしてから再生。これの設定。

 

個々のサウンド設定を無効:
サウンドを低い品質で再生する。これにチェックを入れていなければ、読み込まれた設定に従って最高の品質で再生しようとする。

 

デバイスサウンド:モバイルなど、ライブラリデバイスではない書き出しをする場合はこれを有効にする。
読み込みから保護:SWFからFLAへ変換できなくする。パスワードで保護できる。
トレースを省略:ASのtraceによる出力を出ないようにする。

 

ローカルファイルのみアクセス・ネットワークにアクセス:
SWFがローカルにしかアクセスできないか、ネットワークにしかアクセスできないかの設定。

 

ハードウェアアクセラレーション:
レベル1:ブラウザではなくFlashの力で描画する。
レベル2:GPUで描画する。
複数のSWFを含む場合、パフォーマンスを高めるにはどちらか使用する。プレビューではこれらは使用しない。
無難に行くなら無効で。

 

スクリプトの制限時間:
SWFファイルの実行時、この時間を超えるとスクリプトがキャンセルされる。

 

///HTMLタブ

 

テンプレート:
バージョンの検出にすると、ユーザーが必要なバージョンを持っていなければ、インストールできるように誘導する。
通常はFlashのみでいい。

 

サイズ:ムービーに合わせるで今のサイズをそのまま使用。

 

メニュー表示:右クリックでメニューを表示するかどうか。

 

デバイスフォント:デバイスフォントが使われていれば、ユーザーのシステムにインストールされていないフォントでもアンチエイリアスをかけ、きれいにする。

 

画質:ビットマップやテキストにどれくらいきれいにアンチエイリアスをかけるか。汚いほど早い。品質優先が最もきれいだが時間がかかる。

 

ウインドウモード:
背景色にウインドウ:HTMLの背景が使用される。ハードウェアアクセラレーションをオンにするとこれになるので注意。
不透明:Flashの下のHTMLは見えない。
透明:Flashの下が透けて見える。アニメーションが遅くなることがあるので注意。

 

HTMLの位置:デフォルトはHTMLの中央にFlashを表示する。

 

/////////////
AIRのファイル作成

 

AIRはインストールするファイルを作る。ユーザーからすると面倒。FlashPlayerでexeファイルパブリッシュするほうが一番お手軽。
ファイル→Adobe AIR2設定で設定する。著名しないとファイルは作成できないが、airiというファイルは作れる(証明書が別のマシンにある場合などに使う)

 

///一般設定

 

Windowsインストーラー:無効だとプラットフォームに依存しない.airを作成、有効にするとWindowsインストーラー.exeを作成。
バージョン:そのソフトにバージョンをつけられる。
ID:一意の識別番号を付けられる。半角212文字以内で特殊な文字を使わないこと。エラーになる。
説明:インストーラーウインドウに説明書きができる。
Copyright:著作権情報を入れる。
ウインドウスタイル:カスタムにすると、FLAにウインドウのスタイルを設定すればそれが反映される。透明だと端が透明になり、四角でないウインドウを作れる。
プロファイル:特定の環境でのみ再生する場合、不要なプロファイルを消す。
含めるファイル:何か一緒に含めたいファイルがあればここで指定する。swfなど必須ファイルは最初から載っており、消せない。+で追加、−で消す。

 

///著名設定

 

ルート証明局の証明書がある場合、参照でそのファイルを選ぶ。
自分で作る場合、「作成」で各種項目を登録。
「種類」で証明書のセキュリティレベル。2048のほうがセキュリティが高い。普通は1024でいいと思う。
証明書を保存する。
タイムスタンプ付加を無効にすると、証明書の期限が切れるとインストールできなくなる。付加しておく。

 

///アイコン設定

 

アイコンを指定できる。何もしなければデフォルト。画像はPNGしかできない。

 

///詳細設定

 

アップデート時にカスタムUIを使用する:AIRのアップデートを、ユーザーではなくアプリケーションで制御する。やらないほうがよさそう。

 

//////////////////////////////////////
//////////////////////////////////////
Action Script

 

テキストフィールドはシンボル化するとテキスト内容を編集できない。

 

引数なしの関数は、引数を省略できないので、適当な文字を入れておく。
function tasizan(a){
var bb = 2;
return bb;
}
ただしコンストラクタには引数がいらない。

 

this.addEventListener(Event.ENTER_FRAME,tasizan);
これ(this)をフレームごとに(ENTR_FRAME)tasizanを実行する。

 

qq.text.addEventListener(Event.CHANGE,tasizan);
qqというテキストがCHANGEしたときにtasizanを実行する。

 

asd.text = a + b;のように、.text=の右辺に演算式を入れることはできない。
asd.text = c;ならいい。

 

///////////////
/間違いやすい命令

 

stop();
命令を書いたところで停止するのではない。stop以降、そのフレームに書かれた命令をすべて実行してからそのフレームで停止する。

 

gotoAndPlay()やgotoAndStop();
命令を書いた時点でgotoのフレームに飛ぶのだが、元フレームのgotoAndPlay以降に書かれた命令はその後すべて実行する。

 

ドラッグアンドドロップ:
埋め込みビデオはそのままではシンボル化されていないため、ドラッグアンドドロップできないので注意。シンボル化する必要がある。

 

/////////////////////////
不具合一覧

 

seekの不正確さ:
理由は不明だが、動画のキーフレーム間をどんなに小さくしても、seekで正確な場所を指定して再生することは不可能。必ずずれる。
seekでフレーム単位の再生をコントロールすることはやめるべき。
ただしplayとstopは、キーフレームに関係なくその場で停止、再生できる。

 

空白キーフレームの重要な問題:
ASで、同じフレーム位置にある空白キーフレームは、「存在しない」ものとして扱われる。
ASが実行された瞬間、「以前は存在していたインスタンスだが、今は空白キーフレームになっている」場合、不具合となって機能しなくなる。
ただし「定義しているだけ関数の中に空白キーフレームのインスタンス」が入っていてもエラーにはならない。実行時に空白キーフレームがあるとエラーになる。
したがってこの手の不具合を防ぐためには、「ASでアクセスするインスタンスには空白キーフレームのレイヤーを作らない」ことにある。
ただ一つ、埋め込みビデオだけは、どうしても再生位置までの間は空白にしないといけない。それ以外はすべてフレームで埋め尽くすようにする。
また埋め込みビデオのインスタンスには、なるべくASでアクセスしないようにする。

 

FLVPalybackより下のレイヤーがマウスで押せる:
FLVPlaybackの仕様で、これは突き抜けて下のレイヤーをクリックしてしまうらしい。

 

エラー1009:
ファイルロード中、そのファイルを操作しようとすると、何もないのに操作しようとすることでエラーになる。
ファイルロード中、タイマーを動作していると起こったりする。
対策は、ロードが終了してからタイマーを動作させるようにする。

 

重複宣言:
varによる変数宣言やfunctionによる関数は、重複した部分が一つでもあると、コンパイルできない。別のフレームで前のと同じ宣言すると、不具合となる。
しかしイベントリスナーのaddとremoveは、何度同じことをやっても重複にならない。
なので、varやfunctionは1フレーム目ですべて宣言し、「タイトルに戻る」では2フレーム目に移動させるようにして重複を避ける。イベントリスナーは何フレーム目でどんな風に付け加えても除いてもいい。

 

//////////////////////////
コンパイルのメモリ不足の問題

 

Flashはコンパイルのメモリが貧弱らしく、「多くのインスタンス」を「たくさんのフレーム(空白キーフレームは問題ない)」を生成すると、コンパイルのメモリが足りずに正常にパブリッシュできない。
埋め込みビデオは大量のフレームを取るため、これをFLVPlayBackの操作にするとかなり節約できる。

 

対策:
まず、パブリッシュ設定の「ムービーの圧縮」を無効にする。この圧縮の時点で不具合が起こりやすいらしい。
次の対策として、インスタンスの数を減らす、キーフレームの数を減らす、環境変数でメモリを増やす、という方法があるが、環境変数を変えるのは非常に難しくてリスクも高いのでお薦めできない。
とにかくインスタンスやキーフレームの数を減らす。これらの不具合は単一のファイルの大きさのために起こるので、細分化して単一当たりのファイルの大きさを小さくすればいい。
swfに分割して、マスターswfから読み込む形にすればよい。マスターswfは次のswfを読み込むと、しばらくして前のswfをメモリからなくすので、外部から何度もswfを読み込ませることでメモリの不具合は起きなくなる。

 

エラー報告がない:
どうみても正しいコードで、コンパイルエラーが出ていないのに不具合が起きていることがある。
たいていはコンパイルのメモリ不足によるエラーだが、エラー報告に出ない。
症状として、主にstopが効かなくなったり、画面が点滅するとか、「押しても何も起こらない」とか。
いろいろあるが、解決方法は主にコードを減らすこと。
念のため、不具合が起きなくなっても、いくらかフレームを引き伸ばしてみて、不具合が起こらないかどうか見るといい。

 

外部ファイルにする解決方法:
大きなファイルを、swfなどの外部ファイルにすれば問題はなくなる。
巨大な埋め込みビデオを使用する場合、埋め込み部分だけ外部swfにすればこの問題は回避できる(その外部swfが大きすぎてコンパイルエラーになるようならどうしようもないが)
その外部ファイルは、ASで読み込ませるのではなく、最初からFlash内のシンボルとして読み込んでおいても、元Flashのデータが大きくなることはない(完全に外部ファイルとして読み込まれているため)
ASで外部ファイルを読み込ませるのは面倒でしかも制御しにくいので、最初からシンボルに読み込んでおくといい。
また外部ファイルはムービークリップとして、例えばaa.currentFrameのように、ASによる制御も簡単。

 

/////////////////////////
不具合を見つけるコツ

 

時間を戻す:
バックアップしたデータをたどり、不具合が起きていない時点まで戻る。
不具合が起きた瞬間のデータとその直前のデータを比較し、「その間に何をやったか」が不具合の元となる。

 

単純な形と比較する:
出来上がったプログラムには非常に多くの要因が入っているため、不具合の元となっている要素の見当がつくとき、それを含めた簡単なプログラムを作ってみて、動作するかどうか検証する。

 

要因を削る、あるいは変える:
現在のプログラムから、適当にいくつか条件を変えてみて、不具合がなくなったらその「変えた条件」が不具合の原因である。

 

//////////////////////
不具合を出さない作り方

 

単純な構成:
まず最も単純で、見慣れた形で作っていく。少ない行数で書く。
具体的には、関数などで切り離さず、数値もできるだけ少なく。
これで上手くいくか検証してから、次の段階へ進む。

 

一気にたくさん書かない:
少し書いては検証する。常に検証しながら進む。
一気にたくさん書くと、書いたうちどれが不具合の原因かわからなくなる。

 

見慣れた形を使う:
自分の見慣れた、間違いない形から始める。
初めての書き方だと、そこで不具合が発生するかもしれない。それと別の要因で不具合が発生すると、どちらが問題かわからなくなる。