サムネールを水平に並べてスクロールさせるメニューのインターフェイスがある

ループする水平スクロール―ifステートメント
まずは、
上級者でも、
// MovieClip: スクロールさせるインスタンス
var nSpeed:Number = 5;
addEventListener(Event.ENTER_FRAME, xScroll);
function xScroll(eventObject:Event):void {
x += nSpeed;
}
毎フレームの描画更新は、DisplayObject.
イベントで受取る。MovieClipインスタンスにこのイベントのリスナー関数を登録して、DisplayObject.
プロパティに代入している

次は、if
ステートメントを使う。シンタックスは、
if (条件) {
// 条件が満たされた場合の処理
}
今回の条件は、DisplayObject.
プロパティの値が、Stage.
を超えたかどうかである。
この条件を表す式は、<
、>
)<=
、>=
)。注意しなければならないのは、==
)=
)
MovieClipインスタンスの水平座標がステージ右端を超え、if
条件が満たされたなら、if
ステートメントは、
if (x>stage.stageWidth) { // ステージ右端を超えたら
x = 0; // ステージ左端に移動
}
実際、

なぜなら、

インスタンスの間隔を変えないためには、
前述スクリプト1にこの条件判定の処理を加えたのが、
// MovieClip: スクロールさせるインスタンス
var nSpeed:Number = 5;
var nStageLeft:Number = 0;
var nStageRight:Number = stage.stageWidth;
var nStageWidth:Number = nStageRight-nStageLeft;
addEventListener(Event.ENTER_FRAME, xScroll);
function xScroll(eventObject:Event):void {
x += nSpeed;
if (x>nStageRight) { // ステージ右端を超えたら
x -= nStageWidth; // ステージ左端に移動
}
}
マウスポインタの位置でスクロール方向を変える―else/else ifステートメント
次は、
今回は条件を満たす場合と満たさない場合、else
ステートメントで追加する。条件を満たすかどうか調べることは、if
条件が満たされると、true
という値に変換する。そして、false
になる。
if (条件) {
// 条件の評価がtrue
の場合の処理
} else {
// 条件の評価がfalse
の場合の処理
}
マウスポインタの座標は、DisplayObject.
/DisplayObject.
で調べられた。ただし、
// MovieClip: スクロールさせるインスタンス
var nSpeed:Number = 5;
var nStageLeft:Number = 0;
var nStageRight:Number = stage.stageWidth;
var nStageWidth:Number = nStageRight-nStageLeft;
var nStageCenter:Number = (nStageRight+nStageLeft)/2; // ステージの水平方向中央の座標値
addEventListener(Event.ENTER_FRAME, xScroll);
function xScroll(eventObject:Event):void {
var nNewSpeed:Number;
if (stage.mouseX<nStageCenter) { // マウスポインタがステージ中央より左寄りなら
nNewSpeed = nSpeed; // 移動方向を右(正)に
} else { // マウスポインタがステージ中央もしくは右寄りなら
nNewSpeed = -nSpeed; // 移動方向を左(負)に
}
x += nNewSpeed; // 設定された方向にインスタンスを移動
if (x>nStageRight) {
x -= nStageWidth;
}
}
まず、
次に、if
条件はtrue
と評価され、false
なら、
あとは、DisplayObject.
プロパティに設定すれば、

スクリプト3で気になるのは、
ステージ右端を超えたら左端にループするif
ステートメントはすでに記述してある。これにelse
ステートメントを書き足したのでは、else if
ステートメントである。
if (条件A) {
// 条件Aの評価がtrue
の場合の処理
} else if (条件B) {
// 条件Aの評価がfalse
かつ条件Bの評価がtrue
の場合の処理
} else {
// 条件Aの評価も条件Bの評価もfalse
の場合の処理
}
else if
ステートメントはいくつでも追加できるので、else
ステートメントは、
// MovieClip: スクロールさせるインスタンス
var nSpeed:Number = 5;
var nStageLeft:Number = 0;
var nStageRight:Number = stage.stageWidth;
var nStageWidth:Number = nStageRight-nStageLeft;
var nStageCenter:Number = (nStageRight+nStageLeft)/2;
addEventListener(Event.ENTER_FRAME, xScroll);
function xScroll(eventObject:Event):void {
var nNewSpeed:Number;
if (stage.mouseX<nStageCenter) {
nNewSpeed = nSpeed;
} else {
nNewSpeed = -nSpeed;
}
x += nNewSpeed;
if (x>nStageRight) {
x -= nStageWidth;
} else if (x<nStageLeft) { // ステージ左端を超えたら
x += nStageWidth; // ステージ右端に移動
}
}
これで、
今回解説した次のサンプルファイルがダウンロードできます。