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)

  • 論理積(AND)は2つのオペランドの値がともに true のときに true、それ以外のときには false を返す論理演算です。


論理和 (OR)

  • 論理和(OR)は2つのオペランドの値のどちらか、または両方とも true のときに true、それ以外のときには false を返す論理演算です。


【練習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;
}