惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
Schneier on Security
Schneier on Security
N
News | PayPal Newsroom
Hacker News: Ask HN
Hacker News: Ask HN
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google DeepMind News
Google DeepMind News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
N
News and Events Feed by Topic
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
K
Kaspersky official blog
P
Privacy & Cybersecurity Law Blog
P
Privacy International News Feed
WordPress大学
WordPress大学
U
Unit 42
PCI Perspectives
PCI Perspectives
S
Schneier on Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
I
Intezer
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
Martin Fowler
Martin Fowler
B
Blog
美团技术团队
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
The Last Watchdog
The Last Watchdog
J
Java Code Geeks
博客园_首页
A
About on SuperTechFans
Vercel News
Vercel News
Attack and Defense Labs
Attack and Defense Labs
H
Heimdal Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
小众软件
小众软件
H
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
Y
Y Combinator Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Webroot Blog
Webroot Blog
T
Tenable Blog

博客园 - 张剑

WebMatrix&Razor建站系列之WebMatrix介绍 Windows Phone 7 XNA开发之关于游戏组件 Windows Phone 7 XNA开发之关于图形的配置 EntityFramework外健的读写 vs2010中添加项目中找不到EntityFramework实体框架解决办法 使用MSDN学习ASP.NET的工作流程 Windows Phone 7、XNA的旋转的背景 不被重视的基础,简单高效地使用ADO.net连接对象 微软2011 GCR MVP Open Day 之旅! ASP.NET4.5与VisualStudio11预览 程序员杂记系列文章,30岁之前的回忆。 程序员杂记:带面具的生活! MVC中在路由表routes集合中添加Route实例的一些问题。 Windows Phone 7之HelloWorld! MVC3+Entity Framework 实现投票系统(三) MVC3+Entity Framework 实现投票系统(二) MVC3+Entity Framework 实现投票系统(一) 关于Windows Phone 7开发工具离线安装包 程序员杂记:我们的爱情故事
《XNA游戏开发》在战机游戏中使用Decorator模式
张剑 · 2011-12-17 · via 博客园 - 张剑

2011-12-17 13:42  张剑  阅读(1621)  评论()    收藏  举报

《XNA游戏开发》简介

《XNA游戏开发》Game1类的方法与字段

《XNA游戏开发》在战机游戏中使用Decorator模式

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

下载地址