FC2ブログ
スポンサーサイト
--.--.-- (--:--) スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スライドメーターを作る(座標の制御)
2005.11.08 (18:03) [ Action Script ]スライドメーターtrackback(0)comment(0)
前回、スライドメーターを作る(1)からの続きです。
記述したアクションスクリプトを読み取って、座標について勉強します。
前回記述したアクションスクリプト(以下AS)を見てみます。

onClipEvent (load) {
mflag = 0;
}
onClipEvent (mouseUp) {
mflag = 0;
}
onClipEvent (enterFrame) {
if (mflag == 1)
{
_x = _parent._xmouse;
if(_x <= 0) _x = 0;
if(_x > 100) _x = 100;
atai = Math.floor(_x);
}
}


全体をざっと見ますと、三つのonClipEventに分かれていますが
その()の中身、イベントがそれぞれ違っています。
load「このムービーが読み込まれたら」
mouseUp「マウスの左クリックが終わったら」
enterFrame「このフレームに差し掛かったら」
という意味をそれぞれ持っています。
enterFrameについて、記述したムービークリップ(以下MC)"スライダー"
1フレームしかもって居ないので、ムービーが再生されている間、ずっと
onClipEvent (enterFrame)内の命令が実行されます。


onClipEvent (load) { }onClipEvent (mouseUp) { }の中身はどちらも
mflag = 0 です。
mflag変数(値を保管する「箱」) です。
その箱に「0」という値を保管(代入)するようにしています。
よって、1文目は
「このムービーが読み込まれたら「箱」mflagに「0」を保管しろ」
次の文は、
「マウスの左クリックが終わったら「箱」mflagに「0」を保管しろ」
となります。

ここで、今回ボタンシンボル"スライダーボタン"

on (press) {
mflag = 1;
}


と記述していることを思い出します。このASは
「ボタンが左クリックされたら「箱」mflagに「1」を保管しろ」
という意味を持っています。
これより、ムービーが開始された時点では「箱」mflagには「0」
ボタンシンボル"スライダーボタン"がクリックされたら「箱」mflagには「1」、
クリックが終了したら再び「箱」mflagには「0」が保管されます。

よって「箱」mflagはクリックされているのか、されていないのかを
判断する目印 「旗=flag」 のような役割を持っています。
kurikku.png


つまり、onClipEvent (enterFrame) { }if (mflag == 1) { }
「もし"スライダーボタン"がクリックされているならば」を意味します。


ではクリックされている間のASの命令を見てみます。
まずは _x = _parent._xmouse です。
_xインスタンスX座標(横の位置)
表しています。 _ が入っているので変数ではない事に注意します。
_parent._xmouse_xmouseマウスのX座標(横の位置)を表しています。
また、その頭に付いている_parent.
「所属」における1つ上位を示しています。(これを相対パスといいます(後述))
簡単に言うと、前回の「所属」の状態図を見てみると
ASを記述したMC"スライダー"1つ上位に当たるのはMC"スライドメーター"で、
これにおけるマウスのX座標(横の位置)を指定しているって事です。

kurikku1.png

なぜわざわざこうするのかと言いますと、今回スライダーが動く範囲は
メーターの土台の範囲内なので、
この土台の大きさの範囲内でマウスのX座標(横の位置)を取得しないと正しい座標が得られないからです。
よって初めて土台を含めた大きさがインスタンスの大きさになっている
MC"スライドメーター"における
マウスのX座標を指定しているわけです。


よって _x = _parent._xmouse で
「"スライドメーター"におけるマウスのX座標を"スライダー"のX座標に
 入れる(代入する)」
になります。
"スライダー"にX座標(横の位置)についてだけ
マウスと位置を揃えるよう命令してるわけです。
Y座標(縦の位置)について触れていないので、縦の位置が変わる事は無く
"スライダー"は横に平行移動することになります。


if(_x <= 0) _x = 0 と if(_x > 100) _x = 100 は{ }が省略されたif文の形で
「もしX座標(横の位置)が0以下になったら、ずっと0でいろ」
「もしX座標(横の位置)が100より上になったら、ずっと100でいろ」

という意味になります。前回MC"スライドメーター"をの土台を
左揃えで整列させたため、左端の座標が0、右端が100となり
それより先にスライダーが動くのを防ぐ事ができます。


atai = Math.floor(_x)  では「箱」(変数)ataiに、
X座標の値の小数点以下を切り取って整数に変換し、随時保管しています。
これが、スライドメーターの0~100までの表示に成るわけです。


これらの命令がmflagが上がっている間、つまりは
"スライダー"がクリックされている間、繰り返し実行され、
観覧者の自由なスライドを実現しています。


ちなみに繰り返し速度は12fpsなのであまりにも早くスライドされると
これと同じ事が起こります。
同じ方法で解決してみてください。

スポンサーサイト
prevhome next












トラックバックURL
→http://netlostman.blog31.fc2.com/tb.php/21-720d1744
home
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。