XNA游戏开发学习笔记系列(四)
2012-05-11 00:50
267 查看
面向对象设计
在本节中将会创建三个类,第一个是Sprite类,Sprite类是一个抽象类;第二个UserControlledSprite类,继承于Sprite,对象是一个用户可以控制的精灵;第三个是AutomatedSprite,同样是继承于Sprite类,这个类是创建自动精灵的。
Sprite类的成员:
textureImage Texture2D 要绘制的精灵表
position Vector2 精灵的绘制位置
frameSize Point 精灵中每一帧的大小
collisionOffset int 碰撞检测偏移量
currentFrame Point 当前帧在精灵表中的索引
sheetSize Point 精灵表的列数/行数
timeSinceLastFrame int 上一帧绘制后经过的毫秒数
millisecondsPerFrame int 帧与帧之间要等待的毫秒数
speed vector2 精灵在X方向和Y方向的移动速度
Sprite类的定义了两个构造器,差别在于第二个构造器用millisecondsPerFrame变了计算动画的速度
UserControlledSprite和AutomatedSprite继承Sprite类,重写Update和Draw方法,实现动画,移动,碰撞检测等逻辑,具体请参考上一节或本节源代码。
游戏组件GameComponent
GameComponent类允许以模块方式将任何代码插入到应用程序中,并即那个那个组件自动集成到游戏循环的Update调用之中,游戏每一次执行Update调用后都会执行组件中的Update方法,这样既可以方便地为游戏添加模块,同时也可以将不同逻辑的代码实现分离。要使用游戏组件,我们就要新建一个GameComponent,该类默认从GameComponent派生,如果我们想在组件中绘制,既调用Draw方法,我们可以将该类改为继承于DrawableGameComponent。创建了这个游戏组件后,怎么将游戏与组件关联呢?也很简单,就三行代码,先声明一个变量,SpriteBatch spriteBatch; 然后在Initialize方法中添加
spriteManager = new SpriteManager(this);
Components.Add(spriteManager);
最后添加一些逻辑代码,面向对象的精灵管理器就完成了。
源代码下载:http://www.ctdisk.com/file/6709470
在本节中将会创建三个类,第一个是Sprite类,Sprite类是一个抽象类;第二个UserControlledSprite类,继承于Sprite,对象是一个用户可以控制的精灵;第三个是AutomatedSprite,同样是继承于Sprite类,这个类是创建自动精灵的。
Sprite类的成员:
textureImage Texture2D 要绘制的精灵表
position Vector2 精灵的绘制位置
frameSize Point 精灵中每一帧的大小
collisionOffset int 碰撞检测偏移量
currentFrame Point 当前帧在精灵表中的索引
sheetSize Point 精灵表的列数/行数
timeSinceLastFrame int 上一帧绘制后经过的毫秒数
millisecondsPerFrame int 帧与帧之间要等待的毫秒数
speed vector2 精灵在X方向和Y方向的移动速度
Sprite类的定义了两个构造器,差别在于第二个构造器用millisecondsPerFrame变了计算动画的速度
public Sprite(Texture2D textureImage, Vector2 position, Point frameSize, int collisionOffset, Point currentFrame, Point sheetSize, Vector2 speed) : this(textureImage, position, frameSize, collisionOffset, currentFrame, sheetSize, speed, defaultMillisecondsPerFrame) { } //第一个和第二个构造函数的区别在于第二个要求用millisecondsPerFrame变量计算动画速度 public Sprite(Texture2D textureImage, Vector2 position, Point frameSize, int collisionOffset, Point currentFrame, Point sheetSize, Vector2 speed, int millisecondsPerFrame) { this.textureImage = textureImage; this.position = position; this.frameSize = frameSize; this.collisionOffset = collisionOffset; this.currentFrame = currentFrame; this.sheetSize = sheetSize; this.speed = speed; this.millisecondsPerFrame = millisecondsPerFrame; }
UserControlledSprite和AutomatedSprite继承Sprite类,重写Update和Draw方法,实现动画,移动,碰撞检测等逻辑,具体请参考上一节或本节源代码。
游戏组件GameComponent
GameComponent类允许以模块方式将任何代码插入到应用程序中,并即那个那个组件自动集成到游戏循环的Update调用之中,游戏每一次执行Update调用后都会执行组件中的Update方法,这样既可以方便地为游戏添加模块,同时也可以将不同逻辑的代码实现分离。要使用游戏组件,我们就要新建一个GameComponent,该类默认从GameComponent派生,如果我们想在组件中绘制,既调用Draw方法,我们可以将该类改为继承于DrawableGameComponent。创建了这个游戏组件后,怎么将游戏与组件关联呢?也很简单,就三行代码,先声明一个变量,SpriteBatch spriteBatch; 然后在Initialize方法中添加
spriteManager = new SpriteManager(this);
Components.Add(spriteManager);
最后添加一些逻辑代码,面向对象的精灵管理器就完成了。
源代码下载:http://www.ctdisk.com/file/6709470
相关文章推荐
- XNA游戏开发学习笔记系列(三)
- XNA游戏开发学习笔记系列(一)
- XNA游戏开发学习笔记系列(二)
- 【Cocos2d-X开发学习笔记】第27期:游戏背景之贴图地图类(CCTileMapAtlas)的使用
- 【J2me 2D 游戏开发系列】◣Himi游戏开发启蒙教程◢Java零基础学习J2me游戏开发全过程!
- 【Unity3D】学习笔记(第4记) 2D游戏开发基本技巧之人物动画
- 【Cocos2d-X开发学习笔记】第27期:游戏背景之贴图地图类(CCTileMapAtlas)的使用
- cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建
- Cocos2dx游戏开发笔记21:动手学习《Flappy Bird》之继续优化(付源码)
- opengl es3.0游戏开发学习笔记2--绘制地月星系
- 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习
- 步步为营 SharePoint 开发学习笔记系列 十、SharePoint web service 开发(下)
- 公共语言运行库(CLR)开发系列课程(3):COM Interop基础 学习笔记
- 基于Cocos2D的IOS游戏开发进阶与实践 —— Stage 1 —— 学习笔记
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建
- Cocos2dx游戏开发系列笔记11:解刨《战神传说》完结篇
- 游戏网站开发学习笔记(一)
- 步步为营 SharePoint 开发学习笔记系列 八、SharePoint EventHandler开发
- Cocos2dx游戏开发笔记21:动手学习《Flappy Bird》
- cocos2dx游戏开发——微信打飞机学习笔记(八)——EnemyLayer的搭建