【原创】XNA 4.0学习知识记录(1)
2011-01-27 21:11 刺客之家 阅读(652) 评论(0) 编辑 收藏 举报记录一下学习过程中的知识点,以后进行整理。
1:使用Window.ClientBounds属性,可以随时获取当前显示区域(PC上理解为游戏的可见区域)的大小。
2:几个方法的用法:
1)LoadContent() 进行资源的载入
2)Update() XNA进行画面更新的时候,需要修改的参数在这里修改
3)Draw() XNA进行绘制图片的时候,绘制逻辑在这里调用
3:绘制图片的时候,绘制逻辑应该写在: spriteBatch.Begin 和 spriteBatch.End方法之间(一般情况下)
4:SpriteSortMode.FrontToBack枚举,字面意思是从前到后,但是实际绘制的结果,是Idex比较小的,反而显示在后面。可以这么理解,从前到后的意思,是层次较小的先绘制,层次较深的后绘制,所以层次较深的反而显示在最前面。
5:XNA默认的透明色是洋红色(255,0,255),这可能有历史原因,但是这个是可以修改的,可以指定任意一种颜色让XNA渲染为透明色。
6:帧速是控制绘制事件执行的重要因素,帧速保持在60fps比较好,这是让人眼睛不产生闪烁感的最低速度,高了会加重显卡的负担,低了效果不好。
7:帧速的修改有几种方式,一种是在构造函数中修改 TargetElapsedTime ,比如设置为TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 17);表示每2帧间隔17毫秒,算下来相当于一秒大概60帧
8:可以在Update和Draw方法中,通过参数gameTime.IsRunningSlowly是否为true,来判断此时XNA是否已经跟不上你所指示的帧速了,如果是,你可能需要提醒用户当前配置获取不到最佳效果。
9:使用修改帧速虽然可以改变精灵的绘制频度,但是这往往不是解决问题的方式,如果需要不同的精灵以不同的频率进行刷新,这种方法就不行了。还有一种可行的方式,就是为每个精灵自定义自己的“精灵帧速”,需要2个变量,一个记录精灵本身多少毫秒绘制一次,一个记录从上一次绘制开始已经过了多少毫秒。然后在Update函数中,通过gameTime.ElapsedGameTime.Milliseconds属性,获取上一帧到现在过去了多少时间,然后累加变量,只有当变量超过自身的绘制等待时间,才绘制。
【PS:此种方法我理解是有条件的:整个画面的帧速必须要快于动画中任意一个精灵的绘制速度,因为这里帧速成为了累加时间的最小单位(每个帧触发一次Update)】
10:可以获取键盘的状态,从而对用户的输入进行处理: KeyboardState keyboardState = Keyboard.GetState();这句话可以获取键盘当前状态,然后使用类似keyboardState.IsKeyDown(Keys.Left)的方法来判断某个键是否按下。
【 Keyboard.GetState();方法开销很大, 在update里最好调用一次,保存结果,然后判断全部用这个结果】
11:使用“游戏组件”,可以简化程序的设计,利用DrawableGameComponent来对若干游戏中的精灵进行控制,并且在主程序的ComponentList中添加游戏组件,可以灵活的配置整个游戏框架中的各个模块。比如利用一个组件来控制所有的敌人,一个组件来控制所有的玩家,一个控制子弹等。这样可以灵活的配置是否需要处理子弹,处理玩家。
12:使用XNA GameStudio 4.0的专业工具Audio Create Tool可以建立声音库,XNA通过与声音库进行通讯以播放声音。声音库需要用XACT Auditioning Ultility运行起来,并且会占用80端口。所以需要关闭IIS或者其他使用了80端口的服务。
13:只有启动了XACT Auditioning Ultility,才能在Audio Create Tool的wav或者cue库中进行试听
14:游戏组件的Update方法和Draw方法是随着Game本身的Update和Draw方法一起调用的,这是默认的行为,也是可以禁止的。GameComponent类的2个属性分别控制这些方法:
Enable 控制是否执行Update(),Visible 控制是否执行Draw();
15:在游戏中使用的素材分为图片,音频,字体等,其中图片和字体通常都是通过XNA的内容管道进行处理的,统一添加到项目中;而音频的话,如果是使用XACT处理的,则不进入内容管道(也有使用内容管道处理音频的方式)。如果经过内容管道,则在LoadContent中用Content.Load<T>方法载入的时候,不需要加Content文件夹路径,而如果不通过内容管道,则需要加入Content路径(就是根据exe所属路径,去找音频文件放置的文件路径)。
16:XNA开发3D游戏,使用的坐标系是右手系,具体如下图:[右边的是右手系]