説明
スクリプトの文法は C 言語をもとにしていますが、多くの機能が
省略されています - SWF バイトコードマシンは、より単純であることを
志向しています。例えば、相当手の込んだ細工をしなければ、関数のコールを
実装することもできません。なぜなら、バイトコードの jump 命令は
ハードコードされたオフセット値を使用しているからです。
呼び出し元のアドレスをスタックに格納したりはしません
- すべての関数は、戻ってくる場所を正確に知っている必要があるのです。
結局、どんな機能が残っているのでしょう? コンパイラが理解できるトークンは
以下のとおりです。
-
break
-
for
-
continue
-
if
-
else
-
do
-
while
データ型は存在しません。SWF アクションマシンにおいては、すべての値は
文字列として扱われます。以下の関数が使用可能です。
-
time()
-
ムービーが開始してからの経過時間を、ミリ秒 (?) で返します。
-
random(seed)
-
0 から seed までの範囲の擬似乱数を返します。
-
length(expr)
-
指定した式の長さを返します。
-
int(number)
-
指定した数値を、一番近い整数に切り下げた値を返します。
-
concat(expr, expr)
-
指定した式を連結して返します。
-
ord(expr)
-
指定した文字の ASCII コードを返します。
-
chr(num)
-
指定した ASCII コードに対応する文字を返します。
-
substr(string, location, length)
-
指定した文字列 string の、
位置 location から始まる
長さ length の部分文字列を返します。
さらに、以下のコマンドも使用できるでしょう。
-
duplicateClip(clip, name, depth)
-
指定したムービークリップ (またの名をスプライト)
clip を複製します。
新しいムービークリップの名前は name で、
深度は depth となります。
-
removeClip(expr)
-
指定したムービークリップを削除します。
-
trace(expr)
-
指定した式をトレースログに書き込みます。ブラウザのプラグインが
これをきちんと扱ってくれるかは疑わしいものです。
-
startDrag(target, lock, [left, top, right, bottom])
-
ムービークリップ target のドラッグを開始します。
引数 lock で、マウスをロックするかどうか (?)
を指定します - 0 (FALSE) あるいは 1 (TRUE) を指定します。
オプションのパラメータでは、ドラッグする範囲のを指定します。
-
stopDrag()
-
つかれきった心を落ち着かせます。そしてムービークリップの
ドラッグも修了させます。
-
callFrame(expr)
-
指定したフレームを関数としてコールします。
-
getURL(url, target, [method])
-
指定した URL を読み込みます。引数 target は、
(たとえば "_top" や "_blank" のような) HTML ドキュメントの target
に対応します。オプションの引数 method は、
サーバに変数を返したい場合に POST あるいは GET を指定します。
-
loadMovie(url, target)
-
指定した URL を読み込みます。引数 target は、
(おそらく) フレームの名前か
あるいは特別な値 "_level0" (現在のムービーを置き換える) 、
"_level1" (現在のムービーの前面に新しいムービーを表示する)
のうちのいずれかです。
-
nextFrame()
-
次のフレームに移動します。
-
prevFrame()
-
直前の (あるいは一つ前の) フレームに移動します。
-
play()
-
ムービーの再生を開始します。
-
stop()
-
ムービーの再生を停止します。
-
toggleQuality()
-
高品質/低品質を切り替えます。
-
stopSounds()
-
音声の再生を停止します。
-
gotoFrame(num)
-
フレーム番号 num に移動します。
フレーム番号は 0 からはじまります。
-
gotoFrame(name)
-
name という名前のフレームに移動します。
これは便利です。というのもまだフレームのラベルを追加していないからです。
-
setTarget(expr)
-
アクションのコンテキストといわれるものを設定します。
これが何をするものなのかは実際のところよくわかりません。
そしてもうひとつ変なものがあります。if 文や while ループの中で、
指定したフレーム番号が読み込まれているかどうかを調べるために、
式 frameLoaded(num) が使用可能です。ええ。そのようにいわれています。
しかし私は実際にこれをテストしたことがなく、実際に動作するのか
疑問に思っています。かわりに /:framesLoaded を使用するとよいでしょう。
ムービークリップ (さぁみなさんご一緒に - またの名をスプライト)
はプロパティをひじしています。すべてのプロパティが読み込み可能で、
そのうちのいくつかには値を設定することも可能です。プロパティの
一覧は以下のとおりです。
-
x
-
y
-
xScale
-
yScale
-
currentFrame - (読み込み専用)
-
totalFrames - (読み込み専用)
-
alpha - 透明度
-
visible - 1=on, 0=off (?)
-
width - (読み込み専用)
-
height - (読み込み専用)
-
rotation
-
target - (読み込み専用) (???)
-
framesLoaded - (読み込み専用)
-
name
-
dropTarget - (読み込み専用) (???)
-
url - (読み込み専用) (???)
-
highQuality - 1=high, 0=low (?)
-
focusRect - (???)
-
soundBufTime - (???)
ということで、スプライトの x 位置を指定するには単に
/box.x = 100;
とすればよいわけです。なぜ box の前のスラッシュがあるのでしょう?
これは、flash がムービー内のスプライトを Unix ファイルシステム風に
管理しているからです - つまり、この場合 box がトップレベルに存在する
ことになります。box という名前のスプライトがその中に biff という名前の
スプライトを保持している場合、その x 位置を指定するには
/box/biff.x = 100; とします。すくなくとも私はそう思っています。
もし間違っていたら指摘してください。