VectorとRect
Prometeでは、2D座標や矩形などを扱うために Vector(実数), VectorInt(整数), Rect(実数矩形), RectInt(整数矩形)を用意しています。
ゲームやUIの座標計算、当たり判定、移動処理など幅広く利用できます。
基本の使い方
// 実数ベクトルvar v = new Vector(10.5f, 20.0f);
// 整数ベクトルvar vi = new VectorInt(10, 20);
// 実数矩形var r = new Rect((10, 20), (100, 50));
// 整数矩形var ri = new RectInt((10, 20), (100, 50));主なAPI
v.X,v.Y
座標値v.Magnitude
長さv.Normalized
単位ベクトルVector.Angle(from, to)
2点間の角度(ラジアン)Vector.Distance(from, to)
2点間の距離Vector.Dot(v1, v2)
内積v.In(rect)
矩形内判定Rect.Intersect(rect)
矩形同士の交差判定Rect.Translate(offset)
矩形の平行移動
タプルとの相互変換
Vector/VectorInt/Rect/RectInt は、タプルとの相互変換(暗黙的キャスト)が可能です。
これにより、タプルから直接ベクトルや矩形を生成したり、逆にベクトルや矩形をタプルとして扱うことができます。
// Vectorをタプルから生成Vector v = (10.5f, 20.0f);
// Vectorの分解var (vx, vy) = v; // vx, vy: float
// Rectをタプルから生成Rect r = (10f, 20f, 100f, 50f);
// Rectの分解var (pos, rect) = r; // pos: Vector, rect: Vectorvar (rx, ry, rw, rh) = r; // rx, ry, rw, rh: floatサンプル:当たり判定
var player = new Rect((x, y), (w, h));var enemy = new Rect((ex, ey), (ew, eh));if (player.Intersect(enemy)){ // 当たり判定成立}