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

本文关键字:一个 三角形 方法 IntersectsWith 使用 绘制 | 更新日期: 2023-09-27 18:04:31

我正在用c#制作一个蛇类游戏。我同时画四个形状(圆形、正方形、长方形、三角形)。如果我把目标当作方阵,蛇就会到达方阵。如果玩家将蛇移动到目标并命中,则获胜,否则失败。

对于矩形,圆形,正方形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'                                       
 }

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

IntersectsWith肯定会只有Rectangles之间工作,而不是三角形,圆圈或椭圆,除非它们恰好在边界重叠。

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

你可以给GraphicsPath添加各种形状,就像你画它们一样…

当你得到两个形状的Regions时,你可以Intersect它们然后测试Region是否为Empty

这是一个使用形状的例子;它需要知道在哪个控件或窗体上绘制图形;我们叫它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();
}