1

だから私は点が長方形の中に含まれているかどうかを見つけようとしています。長方形の高さと幅の両方が正または負の場合は正常に機能しますが、一方だけが負の場合は機能しません。幅または高さが負の長方形の全体的なアイデアは奇妙なものですが、両方が負の場合はうまく処理されているように見えました。それで、XNAがこのシナリオでcontainsメソッドをどのように処理するのか疑問に思いましたか?それが機能しない場合、この場合はそれを受け入れないだけではいけません。

私はそれを使用して、その長方形を定義するためだけにrtsスタイル選択ボックスを作成しているので、その中身がわかります。これが私のコードです:

if (InputHandler.IsLeftMouseHeld() == true)
{
    selectionBoxRectangle = new Rectangle(selectionBoxRectangle.X,
      selectionBoxRectangle.Y,
      (int)Vector2.Transform(InputHandler.MousePosition(),
      Matrix.Invert(camera.Transformation)).X - selectionBoxRectangle.X,
      (int)Vector2.Transform(InputHandler.MousePosition(),
      Matrix.Invert(camera.Transformation)).Y - selectionBoxRectangle.Y);

    foreach(ControllableCharacter character in characters.OfType<ControllableCharacter>())
    {
        if (selectionBoxRectangle.Contains(character.DestRectangle.Center) == true
          || character.DestRectangle.Contains(selectionBoxRectangle))
        {
            character.Selected = true;
            character.Color = Color.LightGreen;
        }
        else
        {
            character.Selected = false;
            character.Color = Color.White;
        }
    }
}

この場合にどのように対処するかについてのアイデアはありますか?

4

3 に答える 3

1

Rectangle の XNA コードを逆コンパイルすると、実装が次のように表示されます。

public bool Contains(Point value)
{
    return this.X <= value.X && value.X < this.X + this.Width && this.Y <= value.Y && value.Y < this.Y + this.Height;
}
于 2012-12-17T19:36:21.630 に答える
0

デフォルトのメソッドよりも特殊なケースでうまく機能する独自のメソッドをいつでも作成できます。

そのようです:

bool RectangleContainsPoint(Rectangle rect, Point p)
{
    if (rect.Width < 0 && rect.Height >=0 ||
        rect.Width >=0 && rect.Height < 0)  // if in this case you have problems

        return MyImplementationOfContains(rect, p);
    else
        return Rectangle.Contains(rect, p);
}

bool MyImplementationOfContains(Rectangle rect, Point p)
{
    // as the name of this method suggests, your implementation
}
于 2012-12-17T20:32:16.037 に答える