使用IntersectsWith()方法绘制三角形

时间:2016-08-27 12:21:53

标签: c#

我正在使用C#进行蛇游戏。我同时画了四个形状(圆形,方形,矩形,三角形)。如果我将目标传递给Square,那么蛇必须到达Square。如果用户将蛇移动到目标并击中,则Win否则失败。

对于矩形,圆形,方形IntersectsWith()工作正常。但对于三角形,它不起作用。有什么帮助我吗? 这是我的代码

if (snakes.SnakeRec[i].IntersectsWith(food.foodSquare))
{
   Win();
}
 if ((snakes.SnakeRec[i].IntersectsWith(food.foodCircle))||    (snakes.SnakeRec[i].IntersectsWith(food.foodRec)))
{
    restart();
}

工作正常 但这不会起作用

if (snakes.SnakeRec[i].IntersectsWith(food.foodTrianglePoints))
 {
       //cannot convert from 'System.Drawing.Point[]' to 'System.Drawing.Rectangle'                                       
 }

1 个答案:

答案 0 :(得分:1)

IntersectsWith肯定Rectangles之间工作,不是三角形,也不是圆形,也不是ellispis,除非碰巧在边界重叠..

然而,只要可以将它们分配给Region,就可以找到几乎任意复杂形状的交点。创建Region的一种简单方法是使用GraphicsPath ..

您可以将各种形状添加到GraphicsPath,就像绘制它们一样。

如果你的两个形状都有Regions,你可以Intersect然后测试RegionEmpty

这是一个使用你的形状的例子;它需要知道绘制形状的控件或形式;我们称之为Control surface ..:

using (Graphics g = surface.CreateGraphics())
{
    GraphicsPath gp1 = new GraphicsPath();
    GraphicsPath gp2 = new GraphicsPath();
    GraphicsPath gp3 = new GraphicsPath();
    GraphicsPath gp4 = new GraphicsPath();

    gp1.AddRectangle(fsnakes.SnakeRec[i]);
    gp2.AddPolygon(food.foodTrianglePoints);
    gp3.AddEllipse(food.foodCircle);
    gp4.AddRectangle(food.foodRec);

    Region reg1 = new Region(gp1);
    Region reg2 = new Region(gp2);
    Region reg3 = new Region(gp3);
    reg2.Intersect(reg1);
    reg3.Intersect(reg1);
    reg4.Intersect(reg1);

    if (!reg2.IsEmpty(g)) Win();
    if (!reg3.IsEmpty(g) || !reg4.IsEmpty(g)) restart();
}