Flash memo

Flashを1から(=ω=)(4)

 Flashを作る時、同じ画像を1コマずつ作るのはとても無駄な事で、何度も同じ画像を流用するために、画像は”シンボル”に変換します。シンボルに変換された絵は、インスタンス名が付けられるようになるので、スクリプトで動作を制御ができるようになります。

 シンボルに変換する際には、タイプを選ぶ事になります。その3種というのが「ムービークリップ」「ボタン」「グラフィック」です。ムービークリップは中にプロパティを持たせたり、そのムービークリップの動きを制御するスクリプトを入れたりできます。ボタンも、ボタンが押された時の反応を記述する事ができます。グラフィックは動きのない画像なので、スクリプトを書く事はできません。背景など、まったく動かないものは”グラフィック”に、動くものは”ムービークリップ”に、ユーザーからの入力を受け付ける場合は”ボタン”にする感じです。JPEGなどを読み込んだ場合は自働でグラフィックとしてライブラリに入るので、それをムービークリップに変換する場合も出てきます。
 ライブラリに入ったシンボルは”親”。ドラッグ&ドロップでステージにそのシンボルを落とせば、インスタンスという”子”が生成されます。インスタンスは、親の情報が完全に遺伝しているコピーですが、プロパティを変えたり、新たな要素を組み込む事ができます。
 例えば、羽ばたくアニメのある鳥の絵を、ムービークリップシンボルに変換し、ライブラリに入れます。ライブラリに入った鳥の絵を複数個、自由にステージに配置する事ができます。元となる鳥の絵は一個なので、容量に影響を与えません。
 ”親”の情報が遺伝しているので、インスタンスはすべて「鳥の形」「羽ばたくアニメ」という情報を受け継いでいます。それぞれのインスタンスで大きさを変えたりしても、”親”となるシンボルも、兄弟となる他のインスタンスにも影響がありません。”子”はそれぞれ自立しているのです。もちろん”子”であるインスタンス1つ1つに、”斜めに飛ぶ””まっすぐ飛ぶ”という情報を追加で与える事もできます。
 情報はそれぞれに持たせる事が出来ますが、ライブラリに入っている”親”シンボルを消してしまうと、”子”であるインスタンスもすべて消えてしまうので注意してください。グラフィックからシンボルを作成した場合も、元になるグラフィックを削除してしまうと、シンボルの絵も消えてしまいます。

 今日は、上記シンボルのうちスクリプトが書かれる「クリップアクション」「ボタンアクション」そして「フレームアクション」という3種のアクションについて掘り下げていこうかと思います。ActionScriptの書かれるアクションは、それが書かれる場所によって3種類の分類があるのは前述した通り。

●フレームアクション
 タイムラインの各キーフレームに書くスクリプトです。ここに書かれたスクリプトは、そのフレームが再生された時、自働で実行されます。Flashのタイムラインは、スクリプトで指定されていない限り、前から1コマずつ順番にキーフレームが実行され、最後に到達すると最初に戻る、という動作を繰り返します。

●クリップアクション(オブジェクトアクション)
 クリップアクションはMCオブジェクトに記述します。クリップアクションはフレームアクションとは異なり、何かのイベントが発生して、はじめて実行されます。つまりは、アレが起こったらどうするか、という事を必ず記述する必要があるという事です。
 それにはonClipEvent()ハンドラというイベントハンドラを使用します。イベントハンドラというのは、特定のイベントに反応して特定の処理を行うものです。
 onClipEvent()の()内に、どのようなイベントが起こったら処理するのかというイベント内容を入れます。イベント内容は決まっていて、(load)にすればそのMCがメインのタイムライン上に表示されたら(読み込まれたら)実行される事になります。
 load(読み込まれたら)、unload(消えたら)、enterFrame(再生されるたびに)というのがタイムラインイベント。マウスの動きなどユーザーの動作に反応するユーザーイベントであるmouseMove(マウスが動いたら)mouseDown(左クリック押されている状態)、mouseUp(左クリックが解除されたら)、keyDown(キーボードが押されてる状態)、keyUp(キー入力が解除されたら)、data(データを受信したら)があります。

 クリップアクションは、メインとなるシンボルやインスタンスそれぞれに持たせる事もできるし、お互いを参照しあう事ができます。
 しかしボタンの中にMCオブジェクトを置いた場合や、グラフィックシンボルから生まれたインスタンスは、スクリプトが動作しない、名づけられないので制御できないという難点もあります。

●ボタンアクション(オブジェクトアクション)
 動作のさせ方はクリップアクションと同じく、イベントが発生したら動作します。違いとしてタイムラインにはスクリプトが書けず、ボタン本体に書く事になります。 
 ボタンのイベントを受け付けるにはon()ハンドラを使います。press(左ボタンが押されてる状態)、release(左ボタンの押された状態が解除されたら)、releaseOutsaide(ボタン以外の場所でボタンが解除されたら)、rollOver(カーソルがボタンにのったら)、rollOut(カーソルがボタンからはずれたら)、dragOut(ボタンの外までドラッグされたら)、dragOver(ドラッグした状態で一度ボタンの外に出て、ふたたび戻ったら)KeyPress()(キーが押されたら()内にどの文字か指定する)

 ネットで落ちてるサンプルスクリプトや、本に載ってるサンプルスクリプトを真似して入力する際、何処に書けばいいのかわからない場合があります。最初、この違いが全然私にはわかりませんでした。3種あるのも知りませんでしたし。コピペしたのになぜ動かない!?という場合は大抵「on()イベントハンドラははボタンアクションに記述してください」みたいなエラーを出しまくってました。

 ですから、スクリプトの中にイベントハンドラが入ってなければフレームアクション(タイムラインに書こう!)、onEnterFrame()があればクリップアクション(ムービークリップに書こう!)、on()が入っているならそれはボタンアクション(ボタンに書こう!)というように判断すれば間違いないと思います。

| | コメント (0) | トラックバック (0)

Flashを1から(=ω=)(3)

 スクリプトの基本的なルールと組み方の考え方を最初に知っておくと、組むときが楽ちんになります。

 コメントは、//をつければその行だけがスクリプトに影響を及ぼさないメモになり、長文の場合は”/*ではじまり*/で終えるようにします。後者は閉じ忘れに注意が必要ですが、FLASH上でコメントは色が変わって表示されるのでわかるかと思います。灰色で表示されるかと思います。

 色が変わるものとしては、最初から定義されているメソッドやプロパティの種類、関数など(gotoAndStopや_xなど)が青地で表示されます。大文字小文字を間違っていたりスペルミスがあると色が付きませんので、エラーの際など読み返すのに便利です。最初から定義されているものなど特定の文章には、大文字小文字の区別があるので、注意が必要です。ただしコレは表示の問題だけで、たとえばgotoAndStopをGOTOandSTOPと書いても、動作は正常に終了します。ただし色が変わって表示されないので、スペルミスの場合などが気づけなかったりします。見易さの問題もありますので、出来れば標準の構成で記入した方がいいでしょう。
 また、一部のキーワードのみ、大文字小文字が違ってはいけない物があります。ifやvar、functionなどがそうです。

 スペースは半角のみ。全角スペースがどこかに入ってるだけですべてが動かなくなります。コメントなどを入れた後についつい全角スペースを入れてしまう事もあるので、エラーが出たらスペルミスチェック、その次にスペースのチェックをするのが良いと思います。

 行の終わりは;をつけますが、つけなくても動きます。これはもうステートメントの終了を見る人にわかりやすくするためだけの物かと。

 FLASHはオブジェクト指向なので、何をするにしても、その命令がどのオブジェクトに対してなされるかの指定をしなければいけません。FLASH4以前やFlashLite1.xは、スクリプトが書かれたオブジェクト自身を参照する際に、特に何も書かなくても良かったのですが、FLSH5以降は必ず自分自身を参照する場合も「this(このオブジェクト)」など、何に対して命令を出しているのだということを明確に指示しなければいけなくなりました。

 オブジェクトに命令を出す際にわかりやすくするため、インスタンスや変数にはそれぞれ名前を付ける事ができます。名づけのルールとして、自分がわかりやすいというだけでなく、つけてはいけない名前や文字があります。

・ActionScriptですでに定義されている名前(varやfunctionなど)
・全角が使えないので、必ず半角英数字に
・_以外の記号は使えない(特に演算子とかはダメ)途中に入ってもダメ
・数字が最初に付く名前 後ろや中に含まれるのは大丈夫

 変数や関数はそれぞれのMCオブジェクトで独立しているので、上記ルールさえ守っていれば、MCオブジェクトが別であればそれぞれの内部で同じ名前を使っても構いません。むしろ、すべてのMCクリップで共通になる変数や関数を作る事ができません。

 変数の名前が出ているのでついでに。たぶんコレの扱いが一番混乱すると思いますし。
 変数にはグローバル変数とローカル変数があるという事は、先の記事の用語解説に出ていたと思います。
 詳しく説明していきますと、MCオブジェクト内にそれぞれ自由に変数を定義する事ができます。定義された変数はそのMCオブジェクト内でだけ有効という事をまず覚えていてください。外にはみ出す事はありません。

 さてその変数2種類ですが、それぞれずっと値が残るものとその場で消えるものに分類されます。
 グローバル変数は名前の通りグローバルなので、そのMCオブジェクトが存在する限りずっと値が保持されます。しかしローカル変数は関数の{}内でだけ使用され、用が済んだら値が消えてしまうという変数になっています。
 グローバル変数とローカル変数の作り方の前に、まずは変数の作り方。

var neko;

 varというのはステートメントと呼ばれる、ActionScriptに最初から入ってる命令の一種で、ローカル変数やタイムライン変数を宣言する場合に使用します。これでnekoという名前の変数が出来上がり。var neko =0;とすればついでに初期値も入れられます。しかし実は

neko = 0;

 でもneko変数は出来てるし、初期値に0が入ります。となるとこのvarに何の意味があるのか?という事になりますよね。
 上記二つの文で作られた変数は、どちらも自働でグローバル変数になります。
 
 実はローカル変数を扱う必要があるのはfunction(関数)内だけ。つまり、function内でvarをつけて変数を作った場合のみ、その変数はローカル変数になるのです。
 
function nukosama(){
var neko = 0;
  inu = 0;
}

 関数nukosamaの中でneko変数が一時的に使われる状態の出来上がり。inu変数はvarがついていないので、グローバル変数になります。

 varは変数を定義するときに付けるもの、というルールで使っていってもいいのですが、function内で使ってしまうとその変数がローカル変数になってしまうので、基本はグローバル変数では付けず、ローカル変数には付ける、というのが良いのではないかと思います。

 グローバル変数でvarを付ける時は、その変数に型指定を厳密に付ける場合などになります。

メモ : 外部スクリプトのクラス定義の中でプロパティを宣言する際にも、var を使用する必要があります。クラスファイルでは、変数のスコープとしてパブリック、プライベート、スタティックがサポートされます。 (ヘルプより引用)

 これらのルールがわかれば、サンプルスクリプトなどを見たときに変数で混乱する事はないのではないかと思います。

| | コメント (0) | トラックバック (0)

Flashを1から(=ω=)(2)

 スクリプトを組むために、参考資料を見ていると、最初に用語で躓くので、簡単によく使われる用語の解説を。

オブジェクト・・・画面内に配置されるもの、何らかの値を持つもの
メソッド・・・オブジェクトに送られるコマンド、命令
ムービークリップシンボル・・・ムービークリップの親
ムービークリップインスタンス・・・シンボルから生まれた子
プロパティ・・・属性。主に座標やサイズ、透明度など
ドットシンタックス・・・「.」 
変数…一時的に何らかの値を保持する入れ物
グローバル変数…定義されたMCオブジェクトの中ではいつでも参照される
ローカル変数…使用が終わるとすぐに消える(主にfunctionで使用される
関数…オブジェクトなしで単独で動作し、値を渡すと処理を行い、結果の値を返す
 渡す値を”引数”、返ってくる値が”返り値”
function文…関数を自分で定義する ユーザー定義のメソッドと考えればわかりやすい?
true…真 OK的に使う 
false…偽 NO的に使う
NaN・・・数値ではない
null…値を持たない
演算子・・・算術演算子、代入演算子、比較演算子、倫理演算子

| | コメント (0) | トラックバック (0)

Flashを1から(=ω=)(1)

 人に教える事になりそうなので、まとめて行きます('A')適当にやってるから、結構、嘘を教えそう…。嘘に気づいたら、突っ込みプリーズ。

------------

01_78
 FLASHでActionScriptをいじる前に、まずはソフト自体の使い方をマスターする必要があります。スクリプトをまったく書かなくてもモーショントゥイーンで色んな動きを付けることができます。基本はパラパラマンガなので、それほど悩むことなく扱えるようになるのではないでしょうか。容量など気にしない、CPU負荷なんてぶっちぎりだぜ!という環境なら、スクリプトなしでわが道を行く事も可能です。音をつけたりするとなると、スクリプトのお世話になりますが・・・。

 FLASHバージョン5から搭載されたActionScriptは、オブジェクト指向になっています。FlashLite1.xのベースとなったFLASHバージョン4とは大きく異なり、かなりJAVAに似た感じになっていて、よりプログラム的です。

 バージョンの対応がすっごくわかりにくいので説明しますと、基本的にプレイヤーのバージョンによってActionScriptのバージョンが違うのです。
 FlashPlayerは1~9と、FlashLite1.0、FlashLite1.1、FlashLite2.0が現在あります。FlashLite1.xは、FlashPlayerでは4相当。FlashPlayerのバージョン4までは、ActionScriptがなかったり、5でActionScript1.0です。FlashPlayer6以降になって、ActionScriptは2.0になりました。FlashLite2.0はFlashPlayer7相当で、使用されるActionScriptのバージョンは2.0です。
 そして最新のFlashPlayer9は、ActionScript3.0。もうこれは相当の別物になってるらしいですが…。

flashPlayer1
flashPlayer2
flashPlayer3
flashPlayer4 FlashLite1.0 1.1
flashPlayer5 ActionScript1.0
flashPlayer6 ActionScript1.0 2.0
flashPlayer7 FlashLite2.0 ActionScript1.0 2.0
flashPlayer8 ActionScript1.0 2.0
flashPlayer9 ActionScript1.0 2.0 3.0

 FLASHでは旧バージョンから2つのアクションの概念がありました。大元となる基本のタイムラインを制御するためにキーフレームに書くフレームアクション、ユーザーからの指示を受け付けるボタンアクションです。そして新たに5以降、各MovieClip(以下MC)オブジェクトごとに書くことのできるクリップアクションが追加されました。クリップアクションはスクリプトの組み方によってはボタンも作成できるので、マニュアルなどで2つは1セットとして扱われており、ボタンアクションもクリップアクションも”オブジェクトアクション”と1くくりに呼ばれるようです。でも、フレームアクション、ボタンアクション、クリップアクションの3つを別々に考えた方が勉強しやすいのではないかと思います。

フレームアクション…フレームに書くスクリプト
ボタンアクション…ボタンに書くスクリプト
クリップアクション…MCオブジェクトに書くスクリプト

 フレームアクションはタイムラインの制御、MCの統括がメインになります。ちなみにフレーム自体もMCなので、クリップアクションとスクリプトの記述は同じです。
 ボタンアクションはちょっと特殊で、ボタン自身を参照しません。ボタンについては、ボタンが置かれたMCを制御するスクリプトを記述する事になります。またボタンのみでしか使えないイベントもあります。on()ハンドラとか。
 クリップアクションは、MCオブジェクト自体に書き、その書かれたオブジェクトだけに有効なスクリプトが書けます。

| | コメント (0) | トラックバック (0)