Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中创建一个图像/位图对象,由多个小图像组成_C#_Bitmap_Drawrectangle - Fatal编程技术网

在C#中创建一个图像/位图对象,由多个小图像组成

在C#中创建一个图像/位图对象,由多个小图像组成,c#,bitmap,drawrectangle,C#,Bitmap,Drawrectangle,我正在用c#(:)编写这个游戏,这是捷克版的Snake,使用Windows窗体和System.Drawing 到目前为止,行为和功能都不是问题,我不能回答的疑问是,是否有可能创建和图像、位图、图形、矩形或任何可以工作的对象,由小图像的总和组成。具体来说,游戏的每个关卡都有普通的墙,再加上特定关卡的墙,所以我如何绘制那面墙,或者创建一个图像或位图,由一个图像的重复组成 问题是,我需要从这个小图像(这里是我将要更新的所有代码)的总和创建墙,它将进入一个矩形对象(Graphics.DrawImage(

我正在用c#(:)编写这个游戏,这是捷克版的Snake,使用Windows窗体和System.Drawing

到目前为止,行为和功能都不是问题,我不能回答的疑问是,是否有可能创建和图像、位图、图形、矩形或任何可以工作的对象,由小图像的总和组成。具体来说,游戏的每个关卡都有普通的墙,再加上特定关卡的墙,所以我如何绘制那面墙,或者创建一个图像或位图,由一个图像的重复组成

问题是,我需要从这个小图像(这里是我将要更新的所有代码)的总和创建墙,它将进入一个矩形对象(Graphics.DrawImage(image,rectangle))的“内部”,因为我需要矩形来检查与墙和火车车身的碰撞


那么,我是如何用这幅图像绘制整面墙的。一个循环并多次绘制同一幅图像?我可以将所有这些存储在一幅图像中吗?

我假设您在这里使用的是WinForms。如果这是WPF,请告诉我们

与其绘制位图,不如使用GDI+中可用的向量方法?您应该在内存中存储每个级别的墙配置(xml/任何内容)。这些可能都是线段集(x1,y1到x2,y2)。然后,在无效时,您可以读取当前标高的墙数据,并使用
e.Graphics.DrawLine()
e.Graphics.draw矩形()
等在
Paint
事件中绘制它们

请确保在用于创建游戏帧的计时器中
Invalidate()

您的墙数据应如下所示:

class Wall
{
  public Point Start {get; set;}
  public Point End {get; set;}
}
级别类应该是这样的

class Level
{
  public string Name {get; set;}
  public List<Wall> Walls {get; set;}
}
类级别
{
公共字符串名称{get;set;}
公共列表墙{get;set;}
}

您可以在
Wall
类中实现一个碰撞检测器,它只是一个检查蛇头(x,y)是否正确的函数位于该线段上。

将代码粘贴到此处我肯定会尝试此方法。为了检测碰撞,我使用了与相交的方法,因为蛇形部分是矩形,而墙也是矩形。@PabloRodriz:两件事:除非墙在不同点具有不同的厚度,否则应使用x1,y1 a表示它们nd x2,y2(可能具有可选的厚度属性)。其次,了解蛇的唯一可以与墙壁碰撞的部分是它的头部。蛇应该用
列表表示,并且你应该始终检查该列表的第一个点(蛇的头部)根据墙的尺寸。即使你决定用矩形而不是线来表示墙,你也应该使用
Rectangle.Contains(Point)
作为交点。