新建项目(我起名为“Smartoys”)后,VS中出现一个新的解决方案,里边有两个项目,如图所示:
可以看到,一个是Smartoys项目,一个是SmartoysContent项目,前者用于保存解决方案的代码,后者用于提供资源,比如图片、声音等。
我有个习惯,那就是新建一个没接触过的东西的项目后,立刻会点击编译运行按钮,这时出现这样的窗口:
窗口中什么都没有,只有浅蓝色的背景,至此,一个XNA“游戏”项目新建成功。
结束调试,回头看看代码,就会看到大概是这个样子的代码,我把我的解释写在注释里,大家看看:
public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; //不用管 SpriteBatch spriteBatch; //绘制图片用的东西,以后经常接触到 public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } //构造方法,暂时不用管 protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } //初始化方法,跟构造器差不多 protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } //在Initialize方法后被调用,也没什么意思 protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } //没什么用 protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO: Add your update logic here base.Update(gameTime); } //Update方法是一个关键方法,用于每帧更新游戏数据 protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); //修改这里的Color.***参数,就可以改变背景颜色 // TODO: Add your drawing code here base.Draw(gameTime); } //Draw方法是一个关键方法,用于每帧绘制游戏画面 }
这里,Update和Draw是关键方法,前者用于更新游戏数据,后者用于绘制画面,虽然可以把所有的代码都放进其中一个方法里,但我还是建议分开写比较好。除了构造器以外的其他的方法,我学的时候没觉得有什么用。
XNA框架使用的是轮询机制,也就是每帧调用一次Update和Draw,Update负责修改需要修改的数据,而Draw则把画面擦除,然后重新画。
默认帧率是60fps,开发人员可以修改,但是在电脑上开发一般不修改,想修改的话就用以下代码:
TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 50); //放在Game1构造器的末尾
现在改成了50微秒刷新一次,也就是20fps。