1

.net の XNA フレームワークには、2 次元ベクトルを表す vector2 と呼ばれる非常に便利なオブジェクトがあります。それらを int、float、および他の Vector 2 で乗算できます。

例えば。

        Vector2 bloo = new Vector2(5, 5);
        bloo *= 5;
        bloo *= someotherVector2;

唯一のことは、X、Y 情報が float として保存され、多くの場合、単純に 2d 情報または 2d 座標を int として保存したいということです。このための独自の構造体を作成したいと思います..これが私が持っているものです..

internal struct Coord
{
    public int X { get; private set; }
    public int Y { get; private set; }

    public Coord(int x,int y)
    {
        X = x;
        Y = y;
    }
} 

私の質問は、* (「乗算」関数呼び出しではありません) を使用して、Coord 構造体を int または他の Coords で乗算できるようにする方法です。

4

3 に答える 3

5

演算子のオーバーロードを使用できます。

public static Coord operator*(Coord left, int right) 
{
    return new Coord(left.X * right, left.Y * right);
}

メソッドを構造体に入れるだけCoordです。+,-,/これは、 etc...のような多くの演算子と、さまざまなパラメーターを使用して行うことができます。

于 2013-02-18T12:17:04.403 に答える
1

入力する乗算演算子をオーバーロードする必要があります。

// overload operator * 
public static Coord operator *(Coord x, Coord y)
{
    // Return a `Coord` that results from multiplying x with y
}
于 2013-02-18T12:17:56.760 に答える
1

オーバーロード乗算演算子:

public static Coord operator* (Coord multiplyThis, Coord withThis) {
    Coord result = multiply(multiplyThis, withThis); //...multiply the 2 Coords
    return result;
}

public static Coord operator* (Coord multiplyThis, float withThis) {
    Coord result = multiply(multiplyThis, withThis); //...multiply the Coord with the float
    return result;
}
于 2013-02-18T12:25:45.070 に答える