您好,登录后才能下订单哦!
在之前的关于XNA的介绍中,我们主要讲解了XNA的一些基础,但是将我们在实现一些简单游戏时,众多对象的处理则是一个比较让人头痛的问题。
在这里,我们使用装饰模式来解决在现有对象基础上的扩展问题。
整个程序包括以下几个类文件:
Program XNA入口程序
Game1 完成基础数据加载、卸载,游戏进行时数据的更新、图型的绘制。
GameEngine 用来定义要扩展对象的职责,可以理解为一个装饰的标准。
Game 用来维护一个指向GameEngine的引用,可以理解为一个做装饰的工具。
Map 一个最基本的地图,也就是说我们要在这个地图上进行装饰。
Spirit 我方的飞机,继承自Game类,将来需要装载到Map上。
Bullet 我方×××,同上。
Enemy 敌方飞机,同上。
EnemyBullet 敌方×××,同上。
以下为各类之间的关系图:

需要注意的是,我们在Game的构造方法中,需要定义GameEngine的参数,以便于将来在装饰叠加时传值:
        private GameEngine ge;
        public Game(GameEngine ge)
        {
            this.ge = ge;
        }
        //示列方法,在该方法中需要调用引用对象中的同方法。
        public override void Update(KeyboardState input)
        {
            ge.Update(input);
        }
        //.......
那么,在继承Game这个装饰对象的类中,也需要去访问父类,也就是Game类的方法,以便得到对应的参数对象,和执行父类的方法:
    class Spirit:Game //继承父类
    {
        public Spirit(GameEngine ge)
            : base(ge)
        {
              
        }
        public override void LoadContent(ContentManager content)
        {
            base.LoadContent(content);
        }
   }
最后,在Game1中,就可以调用并完成最后的装饰工作:
            Game game;       public Game1()       {           GameEngine ge = new Map();//基本的地图           game = new Spirit(ge);//我方飞机加载到地图上           game = new Bullet(game);//我方×××加载到地图上           game = new EnemyBullet(game);//敌方×××加载到地图上           game = new Enemy(game);//敌方飞机加载到地图上       } | 
        
完成的效果图如下:

XNA游戏开发是业余爱好,不清楚在正真的XNA游戏开发种是如何来解决这种问题的。未来WP7中游戏的开发主要以XNA为主,大家可以研究一下,以下是提供的代码下载:
下载地址
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。