サムネールを水平に並べてスクロールさせるメニューのインターフェイスがある
ループする水平スクロール―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; // ステージ右端に移動
}
}
これで、
今回解説した次のサンプルファイルがダウンロードできます。
