我们需要用墙体对象对地图进行绘制,前面我们说了窗体是由一个个像素点组成的,所以可以把他看成一个二位数组,需要在对应的位置调用窗体自带的绘制方法,将图片绘制上去
前一节说了这么绘制图片到指定的点上,但是一个一个图片绘制不现实,这时候我们需要定义一个类用来存放每个墙体的位置信息而后一次性绘制
对于存放绘制图片的信息,我们需要一个point(x,y),以及Image
在位置信息类中创建一个gudin类型的list列表用来存放位置信息
private static List<gudin> list = new List<gudin>();//创建一个列表放置墙
用一个设置墙体方法将设置的位置信息传入列表
需要传入x,y,墙体数量,存放列表四个信息,gudin类中包含了需要传入列表的x,y,Image信息,所以我们在gudin类中设置一个构造函数方便使用
public gudin(int x,int y,Image img)//构造函数,方便在外部调用这个类存储数据
{
this.image = img;//传入image
this.x = x;//来自父类
this.y = y;//来自父类
}
再来设置墙体信息方法wall,根据初始墙体块的位置往后遍历其他墙体快,使其变成一堵墙,存入gudin类型后方便后续调用GameObject方法中的绘制方法
private static void wall(int x, int y, int count, List<gudin> list)//设置墙的位置(x,y,多少块),list类型,将墙对象的列表对应信息传出来
{
int X = x * 30;//定义一块墙占30像素点,同比例放大生成墙的坐标
int Y = y * 30;
for (int i= Y; i < Y + count * 30; i += 15) //通过遍历窗体将指定像素点位置生成墙体对象
{
gudin gudin1=new gudin(X,i,Resources.wall);//调用gudin类构造函数,传入(坐标,image)储存起来
gudin gudin2 = new gudin(X+15, i, Resources.wall);//第二列墙体对象,四个墙体对象构成一块墙,单个墙体对象长15像素
list.Add(gudin1);//将gudin类墙体信息放入列表
list.Add(gudin2);
}
}
墙体图片对象信息需要调用资源管理器,方法为Resources.图片名称,格式为imge
由于实际一格墙体是15*15像素,太小了,所以我们定义一块墙体由4格墙体拼起来也就是30*30像素所以我们用count定义墙体数量,然后乘以30定义那一条墙体占用空间,在用for遍历墙体长度将15*15的墙体对象存储一条竖列进去,然后在定义一条竖列墙体,将x的位置增加15放在第一条墙体右边,然后用ADD函数将所有定义的gudin类型放入列表,这样一条完整墙体的位置以及图片信息就储存好了
在地图信息类不仅有1条墙体,所以我们需要一个设置地图基本信息的方法map
public static void map()//设置整体地图
{
wall(1, 1, 5, list);//在30,30的位置创造竖着的五个墙体,传入(位置,数量,储存对象信息的列表)
}
然后在地图信息中在定义一个绘制方法将列表中所有信息传入GameObject中的绘制函数
public static void huizhi()//有了位置以及图片信息就可以调用Object里的绘制函数在窗体中实例化对象
{
foreach (gudin n in list)//遍历列表
{
n.HuiZhi();//调用列表中定义的gudin类信息,传回父类GameObject
}
}
然后回到游戏逻辑函数将地图初始化函数放入start方法初始化一遍,将绘制方法放入update方法中每帧调用,这样地图的初始化就完成了