Метод FillContainsWithDetail не работает должным образом - PullRequest
0 голосов
/ 17 мая 2018

Ожидается, что метод FillContainsWithDetail вернет мне значение Empty, если первая фигура не касается другой, и она должна возвращать FullyContains.Но когда я делал несколько тестов, я увидел, что это не то, что он возвращает ...

Это метод, который возвращает, если форма коснулась или нет.

public string CheckIfInside(Shape shpPlayer, Shape shpObject)
{
    Geometry geo1 = shpPlayer.RenderedGeometry;
    Geometry geo2 = shpObject.RenderedGeometry;

    string s = geo1.FillContainsWithDetail(geo2).ToString();
    return s;
}

ВозвращаетМетод выше

    [0] "Empty" 
    [1] "Empty" 
    [2] "Intersects"    
    [3] "Intersects"    
    [4] "Intersects"    
    [5] "Empty" 
    [6] "Empty" 
    [7] "Intersects"    
    [8] "Intersects"    
    [9] "FullyInside"   
    [10]    "Empty" 
    [11]    "Empty" 
    [12]    "FullyInside"   
    [13]    "Empty" 
    [14]    "Empty" 
    [15]    "FullyInside"   
    [16]    "Empty" 
    [17]    "Empty" 
    [18]    "FullyInside"   
    [19]    "Empty" 
    [20]    "Empty" 
    [21]    "FullyInside"   
    [22]    "Empty" 
    [23]    "Empty" 
    [24]    "FullyInside"   
    [25]    "Empty" 
    [26]    "Empty" 
    [27]    "FullyInside"   
    [28]    "Empty" 
    [29]    "Empty" 
    [30]    "FullyInside"   
    [31]    "Empty" 
    [32]    "Empty" 
    [33]    "FullyInside"   
    [34]    "Empty" 
    [35]    "Empty" 
    [36]    "FullyInside"   
    [37]    "Empty" 
    [38]    "Empty" 
    [39]    "FullyInside"   
    [40]    "Empty" 
    [41]    "Empty" 
    [42]    "FullyInside"   
    [43]    "Empty" 
    [44]    "Empty" 
    [45]    "FullyInside"   
    [46]    "Empty" 
    [47]    "Empty" 
    [48]    "FullyInside"   
    [49]    "Empty" 
    [50]    "Empty" 

Screenshot of the game (игрок [shpPlayer / geo1] - маленький красный кубик, а фигуры - деревья и озера)

Спасибо за вашу помощь:D

1 Ответ

0 голосов
/ 17 мая 2018

Я наконец нашел ответ.Проблема была в том, что я использовал RenderedGeometry, чтобы получить геометрию, но она не возвращает действительно Geomerty ... По крайней мере, не так, как я хочу.Поэтому я сделал свой собственный метод, если это поможет вам.

private Geometry ConvertToGeometry(Shape s)
    {
        if (s.GetType() == new Rectangle().GetType())
        {
            return new RectangleGeometry(new Rect(new Point(s.Margin.Left, s.Margin.Top), new Point(s.Margin.Left + s.Width, s.Margin.Top + s.Height)));
        }
        if (s.GetType() == new Ellipse().GetType())
        {
            return new EllipseGeometry(new Point(s.Width / 2 + s.Margin.Left, s.Height / 2 + s.Margin.Top), s.Width / 2, s.Height / 2);
        }
        if (s.GetType() == new Polygon().GetType())
        {
            Polygon p = (Polygon)s;
            List<PathSegment> ps = new List<PathSegment>();
            for (int i = 1; i < p.Points.Count; i++)
            {
                ps.Add(new LineSegment(p.Points[i], true));
            }
            PathGeometry pg = new PathGeometry(new PathFigure[] { new PathFigure(p.Points[0], ps, true) });
            return pg;
        }
        return null;
    }

Этот метод работает для Rectangle, Ellipse и Polygon из Shapes.Спасибо всем, кто мне помог: D

...