ActionScript
ActionScript(以下AS)の概念と基本的なメソッド(命令する単語)、その他主に使用するもの、の説明をしていきます。
最後にそれらを用いた、スクリプト例を幾つか挙げていきます。
概念
ASには先述した通り、フレームアクション、クリップアクション、ボタンアクションと3種書く場所があります。
ASは命令であるので、「命令する側」と「命令される側」、この二つがあることを意識してください。
FLASHには、「階層」という概念があります。FLASHにMCを配置した場合、この階層が作成されます。そして、配置したMCの中に、またMCを配置すると、更に深い階層が出来ます。
これは、FLASH最上部を木とした、「木の根っこ」をイメージしてもらえれば分かりやすいと思います。
このFLASHの最上部、これを「_root」(根)と呼びます。
例えば、FLASH最上部に命令をしたい時には、_rootと記述します。
FLASH最上部に、「MC1」という「インスタンス名」(これはMCのプロパティで名づけることが出来ます)のMCが配置されているとして、そこに命令したい場合には、「_root.MC1」と記述します。
この記述の仕方を「絶対パス」と呼びます。「命令する側」を意識せず、最上部から階層を書いていく書き方です。
書き方には、もう一種類あり、もう一方は「相対パス」と呼びます。これは、「命令する側から見て、命令される側はどこにあるか」を記述するものです。
この形式で記述する場合、「_parent」(親)を使用する場合があります。これは、「自分の一つ上の階層」という意味を持っています。
また、「this」というものもあります。これは命令する側自らを表すものです。これは省略することが出来ます。(が個人的には書いておいた方が分かりやすいと思います)
例えば、FLASH最上部に、「MC1」というMCが配置されており、その中に「MC2」というMCが配置されているとして、「MC2」から、「MC1」に命令する場合には「this._parent」(又は「_parent」)、_root(FLASH最上部)に命令する場合には「this._parent._parent」(又は「_parent._parent」)と記述します。





次に3種、「ボタンアクション」、「クリップアクション」、「フレームアクション」の書式の違いを説明します。

まず、ボタンアクションの書式を説明します。
ボタンアクションは、onハンドラを用いて、イベントを設定、実行スクリプトを以下のように記述していきます。

on(「イベント」){
   「実行スクリプト」
}

//「イベント」時、「実行スクリプト」が実行されます。
//「イベント」は、二つ同時に書くことは出来ません。
//二つ書く場合は、onハンドラを二つ作ってください。
(「//」は、ASにコメントを記述する際に、そのコメントの前に記述します。コメントを残しておくことで、後に見た時に分かりやすくすることが出来ます。)
「実行スクリプト」で、thisが表すのは、ボタンインスタンスを含めているインスタンスです。ボタンでは階層は作られないことに注意してください。
例1:インスタンス名「MC1」というMC中に配置されたボタンのthis → MC1
例2:FLASH最上部に直に配置されたボタンのthis → _root

ボタンアクションの「イベント」とその内容を列挙していきます。「実行スクリプト」は後の項目「基本的なメソッド」を参照してください
press ボタン上で左クリックされた瞬間
release ボタン上で左クリックされて、離された瞬間
releaseOutside ボタン上で左クリックされて、ボタンの外で離された瞬間
rollOver ボタン上にカーソルが乗った瞬間
rollOut 一度ボタン上にカーソルが乗り、外に出た瞬間
dragOut ボタン上でドラッグして、外に出た瞬間
dragOver ボタン上でドラッグして、一度外に出て、再度ボタン上にカーソルが乗った瞬間
keyPress"「キー名」" 指定したキーが押された瞬間(キー判定、検知はダンオニに関しては「クリップアクション」の方が使いやすいと思います。)

press、release、rollOver辺りが良く使われると思います。



次に、クリップアクションの書式を説明します。
ボタンアクションは、onClipEventハンドラを用いて、イベントを設定、実行スクリプトを以下のように記述していきます。

onClipEvent(「イベント」){
   「実行スクリプト」
}

//「イベント」時、「実行スクリプト」が実行されます。
//「イベント」は、二つ同時に書くことは出来ません。
//二つ書く場合は、onClipEventハンドラを二つ作ってください。

クリップアクションの主用と思われる「イベント」とその内容を列挙していきます。「実行スクリプト」は後の項目「基本的なメソッド」を参照してください
load このMCがタイムライン上で登場し、読み込まれた瞬間
enterFrame 「1 / fps」毎に繰り返し行われる(タイムラインに関係無)
keyDown キーボードのキーが押されている瞬間(つまり長押なら繰返)
keyUp キーボードのキーが離された瞬間

個人的にダンオニ作成に関わる主用なものを選びました。



フレームアクションは、「実行スクリプト」を羅列させて記述していきます。そのキーフレームが再生されるとスクリプトが実行されます。
基本的なメソッド、プロパティ、演算子、if文
まず、基本的なメソッドをカテゴリ大別に分けて、列挙していきます。


タイムライン関連メソッド
stop() タイムラインを停止
play() タイムラインを再生
gotoAndStop(数値) タイムラインを数値のフレームに移動させ、停止
gotoAndPlay(数値) タイムラインを数値のフレームに移動させ、再生
nextFrame() 次のフレームに移動して、停止
prevFrame() 前のフレームに移動させ、停止


MCのプロパティ関連
_x _y 各々、x,yの座標値
_width _height 各々、幅,高さの値
_rotation 原形を0度とした角度
_alpha アルファ(透明度)の値(0:完全透明、100:不透明)
_visible trueであれば表示、falseであれば非表示
_currentframe 現在のフレーム


その他
変数(任意の半角英数文字) 「数値」や「文字列」を保存することが出来ます。任意の半角英数文字で定義することが出来ます。(但し予約語(青くなる文字)は使えません)定義する階層はしっかり意識してください。


これらのメソッド、プロパティ、その他、は、上記で説明した「階層」と合わせて(.(ドット)で繋いで)使用します。



次は、「演算子」についてです。
演算子には大きく分けて、「算術演算子」、「代入演算子」、「比較演算子」、「論理演算子」、「否定演算子」の5つがあります。まず、各々の内容を列挙していきます。


算術演算子
+ 加算(足し算)
- 減算(引き算)
* 乗算(掛け算)
/ 除算(割り算)
% 剰余(割り算の余り)
これは比較的分かりやすいと思います。


代入演算子
= 「左辺」に「右辺」を代入
+= 「左辺」に「左辺と右辺の和」を代入
-= 「左辺」に「左辺から右辺を引いた値」を代入
*= 「左辺」に「左辺と右辺を掛けた値」を代入
/= 「左辺」に「左辺から右辺を割った値」を代入
++ (「(変数)++」の形で)(変数)に1を足す
-- (「(変数)--」の形で)(変数)から1を引く
「=」が「等価」では無く、「代入」であることに注意してください。
それさえ抑えられれば他は理解できると思います。


比較演算子
== 等価(「左辺」=「右辺」の時)
> 「左辺」が「右辺」より大きい時(等価では×)
< 「左辺」が「右辺」より小さい時(等価では×)
>= 「左辺」が「右辺」以上の時(等価でも○)
<= 「左辺」が「右辺」以下の時(等価でも○)
!= 「左辺」と「右辺」が異なる時
これはif文等の条件式で用います。if文については後述します


論理演算子
&& 左と右の条件式を同時に満たす
|| 左と右の条件式のどちらかを満たす
これもif文等の条件式で用います。


否定演算子
! trueならfalseにする。falseならtrueにする。
これもif文等の条件式で用います。



最後に、if文の記述の仕方です。以下の様に記述していきます。
if(「条件式」){
   「実行スクリプト」
}
//「条件式」を満たした(true)時、「実行スクリプト」が実行されます。
またif文には、「else if」、「else」というものがあります。
else if」は、if文と同様の記述方法です。if文(もしくはelse if文)の後に記述し、それまでのif文、else if文の条件式に満たなかった場合、条件式を判別しにいきます。
else」は、条件式を持ちません。if文(「else if」があれば「else if」)の後に記述し、それまでのif文の条件式どれにも満たなかった場合、else文のスクリプトが実行されます。
スクリプト例
以上のことを組み合わせて、スクリプトを組んでいきます。以下にいくつかの例を挙げて解説を終わります。


例1:
FLASH最上部のフレームアクション。最上部に配置されたMC「MC1」のx座標を5にする。
_root.MC1._x = 5;
//最上部に書いている為、「_root」は省略or「this」に置き換え可
//実際スクリプトを書く場合、「;」を忘れないようにする。「;」はスクリプトの区切りを意味する。


例2:
最上部に配置されたMC「MC1」のクリップアクション。「MC1」がタイムライン上に読み込まれた時、最上部に配置されているMC「MC2」を消滅させる。
onClipEvent(load){
   _root.MC2.removeMovieClip();
   //これは絶対パスで書かれたもの。相対パスで書くと、「this._parent.MC2」。
}


例3:
FLASH最上部のフレームアクション。if文についてです。
if(_root.MC1._visible == true){
   _root.MC1._visible = false;
}else if (_root.MC._visible == false){
   _root.MC1._visible = true;
}
//FLASH最上部に配置されたMC「MC1」のプロパティ「_visible」がtrue(見えている)ならfalse(見えないよう)にする。
//逆にfalseであったなら、trueにする。
これは以下の様に記述することも出来ます。
if(_root.MC1._visible){
   _root.MC1._visible = false;
} else if (! _root.MC._visible){
   _root.MC1._visible = true;
}
話は変わって、elseを抜き、以下の様に書くと
if(_root.MC1._visible){
   _root.MC1._visible = false;
}
if (! _root.MC._visible){
   _root.MC1._visible = true;
}
//trueの場合、true→false→true
//falseの場合、false→true
//となります。


例4:
FLASH最上部のフレームアクション。変数「hensu1」を定義し、初期値として、30を代入する。その後、変数「hensu2」を定義し、初期値として、「hensu1+50」を代入する。
hensu1 = 30;

hensu2 = hensu1 + 50;
//        ↑の「hensu1」は「this.」又は「_root.」が省略されている。
最上部に配置されたMC「MC1」のクリップアクション。読み込まれた時「MC1」の高さを、最上部に定義された変数「hensu2」の値にする。
onClipEvent(load){
   this._height = _root.hensu2;
}
//MC1の高さは80になります。