1

現在、私のゲームはいくつかのピクセル検出を使用しています。たとえば、スプライトの場合、その位置のピクセルを取得します。私がそれを動かすとき、位置の値は次のようないくつかの小数を持っています:

thePixel = new vector(position.X, position.Y);
//thePixel = (52.2451, 635.2642)

だから私はこれらの値を丸める必要があります

thePixel = new vector((float)Math.Round(position.X, 0), (float)Math.Round(position.Y, 0));
//thePixel = (52, 635)

四捨五入せずに完全な位置(つまり、小数点なし)を取得する方法が他にあるかどうかを知りたいです。移動方法の問題でしょうか?

読んでくれてありがとう、あなたが助けてくれることを願っています。

4

1 に答える 1

3

値を丸める必要性を実際に回避することはできませんが、拡張メソッドを使用してコーディングをより適切にすることができます。

public static class Vector2Extensions
{
    public static Vector2 Floor(this Vector2 vector)
    {
        return new Vector2((float)Math.Floor(vector.X), (float)Math.Floor(vector.Y));
    }
}

(ご覧のとおり、個人的には好きFloorですRound。私も持っていCeilingます。)

次に、次のように使用できます。

HandleCollision(position.Floor());

もちろん、ピクセルごとの衝突検出を行っている場合、衝突計算はおそらく整数ベースである必要があります(のように格納されていないfloatVector2。を使用できますPoint。そのための拡張メソッドもあります。

public static class Vector2Extensions
{
    public static Point AsXnaPoint(this Vector2 v)
    {
        return new Point((int)v.X, (int)v.Y);
    }
}

それで:

HandleCollision(position.AsXNAPoint());

またはおそらく:

HandleCollision(position.Floor().AsXNAPoint());
于 2012-09-14T06:35:35.973 に答える