控制坦克不超出地图范围的思路非常简单,创建一个每帧检测坦克自身x,y,的方法
private void chaochu()
{
if (Fangxiang == fangxiang.Up)//检测坦克目前朝向
{
if (y - speed < 0)//如果在前进一帧会大于地图边界
{
yidong = false; return;//停止前进
}
}
else if (Fangxiang == fangxiang.Down)
{
if (y + speed + gao > 450)
{
yidong = false; return;
}
}
else if(Fangxiang==fangxiang.Left)
{
if(x - speed < 0)
{
yidong = false; return;
}
}
else if(Fangxiang==fangxiang.Right)
{
if((x + speed+kuang) > 450)
{
yidong = false; return;
}
}
}
由于坦克自身有占用像素格,而坦克生成位置是以左上角x,y的点开始生成,所有坦克向下和向右的实际碰撞位置应该是坦克生成位置加上坦自身宽或高,而坦克有四个方向就有4种对象碰撞可能,所以我们在物体对象的父类中声明存储物体宽和高的int类型
public int gao { get;set;}//放置图片对象的高
public int kuan { get;set;}//放置图像的宽
然后在gudin类和keyidong类中将高和宽赋值
gudin类中图片对象是由直接放入的image决定,所以我们重写image的构造函数按照传入的图片给宽高赋值
public Image image;//声明Image
private Image Image { get { return image; }
set {
image = value;
gao = image.Height;//设置父类继承过来的图片对象高
kuan = image.Width;//设置父类继承过来的图片对象宽
} }//重写Image构造函数
而keyidong类中会根据移动方向传入不同的对象,我们需要在方向定义处根据设置的方向传递不同对象的宽高
private fangxiang fangxiang;//声明枚举类型fangxiang
public fangxiang Fangxiang { get { return fangxiang; }
set
{
fangxiang = value;
Bitmap bitmap = null;//设置一个临时图片变量储存图片信息
switch (fangxiang)
{
case fangxiang.Up://如果当前方向为上
bitmap = BitmapUp;//将临时图片信息传入
break;
case fangxiang.Down:
bitmap = BitmapDown; break;
case fangxiang.Left:
bitmap = BitmapLeft; break;
case fangxiang.Right:
bitmap = BitmapRight; break;
}
gao = bitmap.Height;//将图片的高记录
kuan = bitmap.Width;//将图片的宽记录
}
}//重写方向构造函数,调用传入的方向信息设置图片的宽高信息
这样,调用不同图片对象时的宽高就设置好了