使用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
肯定会只有在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();
}