项目-坦克大战学习笔记-控制玩家坦克不超出地图范围

控制坦克不超出地图范围的思路非常简单,创建一个每帧检测坦克自身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;//将图片的宽记录
    }
}//重写方向构造函数,调用传入的方向信息设置图片的宽高信息

这样,调用不同图片对象时的宽高就设置好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值