今日から必死で1から全て学んでゲーム作成します
■ このスレッドは過去ログ倉庫に格納されています
0001松田 ◆cobo4pcvHY
03/02/06 21:28ID:+Sp/g0d7言語の難しさから逃げていては駄目だ!お前はゲームを作りたいのだろ!?
という悟りを開き、今日からプログラム言語を覚え、そして
プログラムツールで作ります!今持ってるものは・・・。
6才年下の弟の持ってる技術(厨2)の教科書。
アクティブベーシック。(vectorより入手)
・・・作れるのだろうか!?もちろん古本屋で買いあさってくるが
(作れ次第、いずれうpします・・・。いつまでかか(ry))
0368名前は開発中のものです。
03/02/26 03:14ID:UwPRkjgq簡単講座その2 の準備。
まずは、先日の誤記の突っ込みありがとう。で入るか…
でだ、今回は、角度やら、それに関係して軽く当り判定とかをやりたいんだが、その前に準備だ。
復習を兼ねて、ベクトルの話だ。なにが準備かと言うと、
これから(x, y)は、ベクトル扱いで説明して行かないと、膨大な説明と書き込みになるのでベクトルの基本を少し。
基本だが、ベクトルを表すのに構造体なりクラスなりを定義してると楽なのは分るよね。
struct VECTOR { float x, y; };
こんな感じだ。クラスなら、メンバ関数で、大きさを返す物や単位化する物を定義したり
演算子のオーバーロードで計算処理も定義できるし便利だよね。
で、肝心のベクトルの扱いなんだが、基本は位置ベクトルだ。基本の位置から、どこぞを指し示すと考えてもらって結構。
つまり、座標と考えても差し支え無い。原点(基本位置)から、座標(x, y)までのベクトルって感じだ。
さらに考えを柔軟にすると、基本の位置を原点以外でも考える。ホーミングの時の、敵機から自機へのベクトルって奴だ。
これらのベクトルは、始点を考えるベクトルな。
で次の考えは、少し複雑だ。方向ベクトルって言って、向きだけを考えるんだ。
大きさや始点は、基本的に考えないベクトルだ。
具体的に言うと、真上を向くベクトルは、大きさが1だろうが10だろうが、真上って向きだし
原点だろうと、(10, 10)の座標からだろうと、真上って方向だろ?
この二つの考えで説明して行くから、調べるなりして身に付けるべし。
そして最後に、ラジアン処理だ。之は前にも書いたが、角度の表現方法の一つだ。
π = 180度 = 3.1415926535897932…って奴だ。
具体的な使い方は、
#define PI 3.1415926535897932
って感じでデファインしておいて使うのだ。90度を表す時は、PI/2.0 (180/2)って感じで使うのだ。
0369名前は開発中のものです。
03/02/26 03:17ID:UwPRkjgq簡単講座その2。角度編。
先ずは、角度って言っても基準となる0度の場所を決めて置かないといけないな。
これは、ゲーム毎に処理やなんかも違うし、自分で決めておいて、
計算時に、数学処理や標準関数とのオフセット(一定の差の修正)を取れば良いと思う。
今回は、X軸、つまり”y = 0”の直線が0度の角度で行こうと思います。
なぜなら、atan2での基準でもあるので、戻り値がそのまま使えるからです。
いきなり本題。原点から”大きさR”の”円上”の座標の式は?
x = R * cos(θ);
y = R * sin(θ);
*sin() cos()は標準関数。
が答えです。θとはシータと読みます。ギリシャ文字で数学だと計算時の角度を表す場合が多い。(高校数学教科書でも載ってるよ)
角度は、X軸からの角度で、例えば、45度つまりy = xの直線上の座標(マイナス座標はおいておく)なら
x = R * cos(PI / 4.0);
y = R * sin(PI / 4.0);
です。45 = 180/4 = PI/4.0ですね。
atan2で言うと
PI/4.0 = atan2(10.0, 10.0);//y = xの式で考えるので、引数yと引数xを同じ数値にしただけ。
解説をすると、先ず単位円(半径が1の円)で考えましょう。つまりR = 1となって
x = cos(θ);
y = sin(θ);
って簡単になります。そしてsinとcosとは、xとyが円を描く時の軌跡を表す物と考えると良いでしょう。
cos(0.0) = 1.0
sin(0.0) = 0.0
です。いきなり、”です”じゃ分りませんね?之は"大きさ1"の円の0度の座標を表します。
大きさ1の円で、基準はX軸でしたね。つまり0度なら(1, 0)が円上の座標です。上の式通りでしょ?
atan2だと
0.0 = atan2(0.0, 1.0);//引数に注意、atan2はy, xの順です。
0370名前は開発中のものです。
03/02/26 03:19ID:UwPRkjgqcos(PI / 2.0) = 0.0
sin(PI / 2.0) = 1.0
です。もう分りますね。(0, 1)の座標が90度の時の円上の座標です。atan2では
PI/2.0 = atan2(1.0, 0.0);
何を言いたいのか?それは、sinとcosを使えば、角度から座標が得られるのです。
そして、アーク系の標準関数を使えば、座標から角度が得られるのです。
例えば、10度づつに180度まで、角度を刻みたいって処理をするなら
float angle = 0.0f;
struct VECTOR vec;
vec.x = 0.0f;
vec.y = 0.0f;
while(angle <= PI)
{
vec.x = cos(angle);
vec.y = sin(angle);
//ここでxとyを使った処理、描画でも何でも良い
angle += PI / 18.0;//10度 = 180/18
}
ってやれば良いのです。
…すまん、もう眠い、限界だ、続きは近いうちに。
■ このスレッドは過去ログ倉庫に格納されています