# プレイヤーを前進

この左画面を左クリックすれば以下の赤字のスクリプト全部がクリップボードにコピーされるので、右の画面の赤い矢印の右側に貼り付けてください。

    	if ( _keyUp )
    	{
    		var radian = degreeToRadian(_rotate);
    		var x = _lookAt.x + Math.sin(radian) * 50;
    		var z = _lookAt.z + Math.cos(radian) * 50;
    		if ( _map[~~(z/WALL_SIZE)*MAP_WIDTH+~~(x/WALL_SIZE)] == 1 )
    		{
    			_lookAt.x += Math.sin(radian) * 300 * _elapsed;
    			_lookAt.z += Math.cos(radian) * 300 * _elapsed;
    		}
    	}

では「制御」→「実行」メニューを実行してください。
「W」キーで前進しました！でも壁にぶつかると止まります・・・。
「_keyUp」がtrueならプレイヤーの向き「_rotate」に50進んだ位置に、プレイヤーの位置をマップ「_map」配列の位置に変換して「1」であれば通路なので通れます。変換方法は進める方向の位置で、z位置を壁のサイズWALL_SIZEで除算した値を整数にした値にMAP_WIDTHを乗算し、x位置をWALL_SIZEで除算した値を整数にした値を足した値が、 _map配列の位置になります。その_map配列の位置が0か1かで通路かどうか判定します。
「~~」は小数を整数に切り捨てるものですね。
カメラ注視点をsin、cosで1秒間に300進むスピードで加算します。

### 次へ