在窗体绘制地图对象时我们需要考虑到绘制对象的分类,首先统一称为Object类,
细分为不可移动类(墙体),可移动类(玩家,人机,子弹),可移动类又分为三类
在Object类中有4个子类,他们都继承在Object,在父类中,我们需要实现对象的绘制,坐标的定义
坐标的定义
public int x{get;set;}
public int y{get;set;}
用构造函数在设置坐标
对象的绘制我们需要一个对象绘制函数
public void HuiZhi()//绘制功能的函数
{
Graphics g = tankthread.g;//创建一个画布变量并使他拥有画布组件
g.DrawImage(shehziImage(),x,y);//调用画布变量的绘制图片方法,传入(图片,坐标)
}
一个图片设置的方法
protected abstract Image shehziImage(); //抽象方法,需要在子类重写,方法重写后传回的参数传入绘制函数
需要将父类设置为抽象类abstract才能在里面设置抽象方法,抽象方法在父类中调用却在子类中定义,根据子类中定义后传入的image返回值传入绘制方法中调用方法在窗体中绘制对象
在可移动子类中分为上下左右四种情况的图片对象,我们需要一个枚举类型来设置当前方向
enum fangxiang
{
Up,
Down,
Left,
Right
}
在可移动对象中要设置每个方向对应的对象,还要设置移动速度,设置移动方向
public Bitmap BitmapUp { get; set; }//设置向上的图片
public Bitmap BitmapDown { get; set; }//设置向下的图片
public Bitmap BitmapLeft { get; set; }//设置向左的图片
public Bitmap BitmapRight { get; set; }//设置向右的图片
public int speed { get; set; }//设置速度
public fangxiang fangxiang { get; set; }//设置方向
在重写父类中设置图片的方法,根据当前方向运用switch选择根据fangxaing设置image
protected override Image shehziImage()//根据方向设置图片传到GameObject类的绘制函数将指定图片绘制出来
{Bitmap image = null;//创建一个空的Bitmap对象
switch(fangxiang)//设置image的图片
{
case fangxiang.Up:
image = BitmapUp;
break;
case fangxiang.Down:
image = BitmapDown;
break;
case fangxiang.Left:
image = BitmapLeft;
break;
case fangxiang.Right:
image = BitmapRight;
break;
}
image.MakeTransparent(Color.Black);//调用Bitmap中的方法将黑色设置为透明
return image;//将image的对象返回出函数
}
可移动图片有黑色底色,所以得运用Bitmap内置的方法将图片的黑色设置为透明
image.MakeTransparent(Color.Black);//调用Bitmap中的方法将黑色设置为透明
然后设置调整好的图片为返回值
窗体底色的设置:窗体变量.Clear(Color.Black);//调用Clear方法,清除覆盖掉当前窗体内容,用黑色