# SWFAction クラス

(PHP 5 < 5.3.0, PECL ming SVN)

## はじめに

SWFAction.

## クラス概要

SWFAction {
/* メソッド */
__construct ( string `$script` )
}

## 説明

スクリプトの文法は 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; とします。すくなくとも私はそう思っています。 もし間違っていたら指摘してください。

## 目次

- SWFAction::__construct — 新しい SWFAction を作成する