博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《XNA游戏开发》在战机游戏中使用Decorator模式
阅读量:6527 次
发布时间:2019-06-24

本文共 1286 字,大约阅读时间需要 4 分钟。

 在之前的关于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为主,大家可以研究一下,以下是提供的代码下载:

 

转载地址:http://mmvbo.baihongyu.com/

你可能感兴趣的文章
Ubuntu 16.04 Steam
查看>>
Turbo Boost是什么?最高睿频是什么?
查看>>
onScrollChanged()
查看>>
c#多态
查看>>
单独使用bable插件
查看>>
// 查询字符串转json
查看>>
第四十天笔记
查看>>
4、动态代理
查看>>
Loj #6073.「2017 山东一轮集训 Day5」距离
查看>>
我的TCP/IP学习笔记
查看>>
刷碗效应
查看>>
ie7下<a></a>标签中<input />时不反应
查看>>
一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程
查看>>
POJ1011 Sticks
查看>>
前言:数据库典型架构实践
查看>>
使用fat-jar打包多个java工程为可执行文件
查看>>
Fluent NHibernate之旅
查看>>
python基础知识
查看>>
【机器学习】--GBDT算法从初始到应用
查看>>
图片常见格式
查看>>