第11回 MovieClipをスクロールさせる―条件判定

第11回←教材はこれ!

  • 条件判定っていかにもスクリプトのお勉強っぽくて僕は好きですよ。
  • 野中先生今回は余裕が感じられますね。野中節炸裂。

上級者でも,ひとつのミスもなく,1回で動きを完成することはたやすくない。小分けにして作成と確認を繰返していけば,問題が出たときも,その調査対象を限定できる。事件の早期解決には,何より容疑者の絞り込みが重要なのだ。

  • そして条件文の書式がこちら。

if (条件) {
// 条件が満たされた場合の処理
}

  • 画像を無限ループさせるための条件式。ちょうどスロットマシーンを作りたいと思っててこれやりたいと思ってた!ラッキー。

if (x>stage.stageWidth) { // ステージ右端を超えたら
x = 0; // ステージ左端に移動
}

  • おっとしかしこれでは困るとのこと。なるほどインスタンスがいっぱいあったらずれる可能性があるのね。
  • そんなわけで何ピクセルはみ出してても大丈夫なように「x=0」とせず、「x-=stage.stageWidth」にすると。

// 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; // ステージ左端に移動
}
}

  • 次は条件分岐の書式。この流れでswitch文も出てくるのかな?

if (条件) {
// 条件の評価がtrueの場合の処理
} else {
// 条件の評価がfalseの場合の処理
}

  • これを利用してマウスポインタの位置からスクロールする方向を変えるのがこれ。

// 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;
}
}

  • わざわざステージの右と左の座標を取ってる意味が今のところよくわかんない。センターも「stage.stagewidth/2」でいい気がするのに。なぜだ!*1
  • あと変数に「-」つけるだけで絶対値変えられるんかー。やったこと無い気がする。
  • そんで後はステージ左端を越えたら右端に行くという逆の場合の処理も付け加えると最後のif文は以下。

if (x>nStageRight) { ←まず右端を越えてるかチェック
x -= nStageWidth;   ←越えてたら左端へとばす
} else if (x<nStageLeft) { // ステージ左端を超えたら
x += nStageWidth; // ステージ右端に移動
}
}

  • 結局今回はswitch文出てこず。

*1:どーせすぐ種明かしがある。←無かった