if文を使った反転
反転の考え方
(1)右に移動
- 右端までは移動速度が代入され続け、右に移動します
onClipEvent (load) { var speed:Number = 10; //移動速度 } onClipEvent (enterFrame) { _x += speed; }
(2)ステージの右端まで移動
- 右端のX座標を指定
- 右端のX座標を上回ったら(条件)
onClipEvent (load) { var speed:Number = 10; //移動速度 var rightEdge:Number = 500; //右端の座標 } onClipEvent (enterFrame) { _x += speed; if (_x > rightEdge) { } }
(3)ステージの右端まで移動したら〜をする
- 右端のX座標を上回ったら、マイナス値を代入
onClipEvent (load) { var speed:Number = 10; //移動速度 var rightEdge:Number = 500; //右端の座標 } onClipEvent (enterFrame) { _x += speed; if (_x > rightEdge) { _x -= speed; } }
この時点でのプレビューは、反転しません。
条件式が正しい記述ではないからです。
(4)条件式を整える
onClipEvent (load) { var speed:Number = 10; //移動速度 var rightEdge:Number = 500; //右端の座標 } onClipEvent (enterFrame) { if (_x > rightEdge) { _x -= speed; } else { _x += speed; } }
しかし、この記述でも戻ってきません。
X座標に代入する式を変えるだけでは、再生ヘッドが読まれた瞬間に「右に移動し左に移動」を繰り返してしまいます。
連続的に左に移動させるには、代入する値を「マイナス」になるように書き換えます。
(5)条件式を整える
onClipEvent (load) { var speed:Number = 10; //移動速度 var rightEdge:Number = 500; //右端の座標 } onClipEvent (enterFrame) { if (_x > rightEdge) { speed *= -1; } _x += speed; }
これで反転はされましたが、左端でもそのまま移動してしまいます。
(6)左端の条件式も加える
onClipEvent (load) { var speed:Number = 10; //移動速度 var rightEdge:Number = 500; //右端の座標 var leftEdge:Number = 0; //左端の座標 } onClipEvent (enterFrame) { if (_x > rightEdge) { speed *= -1; } if (_x < leftEdge) { speed *= -1; } _x += speed; }
(7)論理和で条件式を整える
onClipEvent (load) { var speed:Number = 10; //移動速度 var rightEdge:Number = 500; //右端の座標 var leftEdge:Number = 0; //左端の座標 } onClipEvent (enterFrame) { if (_x > rightEdge || _x < leftEdge) { speed *= -1; } _x += speed; }
理論演算子
演算子 | 処理内容 | オペランド数 |
---|---|---|
! | 否定 (NOT) | 単項 |
&& | 論理積 (AND) | 二項 |
|| | 論理和 (OR) | 二項 |
否定(NOT)
- 否定(NOT)はオペランドのブール値を反転する論理演算です。
- ブールは true また flase の2値で表されるデータ型です。
論理積 (AND)
論理和 (OR)
【練習3】
onClipEvent (load) { var speedX:Number = 10; //X座標移動速度 var speedY:Number = 10; //Y座標移動速度 var leftEdge:Number = 0; //左端の座標 var rightEdge:Number = 500; //右端の座標 var topEdge:Number = 0; //左端の座標 var bottomEdge:Number = 300; //右端の座標 } onClipEvent (enterFrame) { if (_x > rightEdge - _width/2 || _x < leftEdge + _width/2) { speedX *= -1; } _x += speedX; if (_y > bottomEdge - _height/2 || _y < topEdge + _height/2) { speedY *= -1; } _y += speedY; }
左右の向きを反転
_xscale *= -1;
onClipEvent (load) { var speedX:Number = 6; //X座標移動速度 var speedY:Number = 6; //Y座標移動速度 var leftEdge:Number = 0; //左端の座標 var rightEdge:Number = 502; //右端の座標 var topEdge:Number = 0; //左端の座標 var bottomEdge:Number = 300; //右端の座標 } onClipEvent (enterFrame) { if (_x > rightEdge - _width/2 || _x < leftEdge + _width/2) { speedX *= -1; _xscale *= -1; } _x += speedX; if (_y > bottomEdge - _height/2 || _y < topEdge + _height/2) { speedY *= -1; } _y += speedY; }
イベントハンドラを使った反転
var speedX:Number = 10; //X座標移動速度 var speedY:Number = 10; //Y座標移動速度 var leftEdge:Number = 0; //左端の座標 var rightEdge:Number = 550; //右端の座標 var topEdge:Number = 0; //左端の座標 var bottomEdge:Number = 400; //右端の座標 this.kuma_mc.onEnterFrame = function() { if (kuma_mc._x > rightEdge-kuma_mc._width/2 || kuma_mc._x < leftEdge+kuma_mc._width/2) { speedX *= -1; kuma_mc._xscale *= -1; } kuma_mc._x += speedX; if (kuma_mc._y > bottomEdge-kuma_mc._height/2 || kuma_mc._y < topEdge+kuma_mc._height/2) { speedY *= -1; } kuma_mc._y += speedY; }
《別例》
var kuma_mc:MovieClip; var leftEdge:Number = 0; var rightEdge:Number = 550; var topEdge:Number = 0; var bottomEdge:Number = 400; var speedX:Number = 5; var speedY:Number = 5; this.onEnterFrame = function() { if(kuma_mc._x > rightEdge-kuma_mc._width/2 || kuma_mc._x < leftEdge+kuma_mc._width/2) { speedX *= -1; } kuma_mc._x += speedX; if(kuma_mc._y > bottomEdge-kuma_mc._height/2 || kuma_mc._y < topEdge+kuma_mc._height/2) { speedY *= -1; } kuma_mc._y += speedY; }