第2章 Sprites(精灵)的乐趣

   之前的一章,我提到在你创建的简单蓝色屏幕后实际上有许多事情发生。让我们对那段代码看得更深一点,看看实际上是什么在运行。打开你在第1章创建的游戏项目以便开始。

看看场景之后

   program.cs文件相当直接。你的Main方法,创建了一个新的对象类型Game1,并执行它的Run方法,放在这个文件里。

   你的游戏真正的东西在Game1.cs文件中。那个文件的代码将看起来如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using Microsoft.Xna.Framework;
 5 using Microsoft.Xna.Framework.Audio;
 6 using Microsoft.Xna.Framework.Content;
 7 using Microsoft.Xna.Framework.GamerServices;
 8 using Microsoft.Xna.Framework.Graphics;
 9 using Microsoft.Xna.Framework.Input;
10 using Microsoft.Xna.Framework.Media;
11 using Microsoft.Xna.Framework.Net;
12 using Microsoft.Xna.Framework.Storage;
13 namespace Collision
14 {
15     /// <summary>
16     /// This is the main type for your game
17     /// </summary>
18     public class Game1 : Microsoft.Xna.Framework.Game
19     {
20         GraphicsDeviceManager graphics;
21         SpriteBatch spriteBatch;
22         A Look Behind the Scenes | 9
23             public Game1()
24         {
25             graphics = new GraphicsDeviceManager(this);
26             Content.RootDirectory = "Content";
27         }
28         protected override void Initialize()
29         {
30             // TODO: Add your initialization logic here
31             base.Initialize();
32         }
33         protected override void LoadContent()
34         {
35             // Create a new SpriteBatch, which can be used to draw textures.
36             spriteBatch = new SpriteBatch(GraphicsDevice);
37             // TODO: use this.Content to load your game content here
38         }
39         protected override void UnloadContent()
40         {
41             // TODO: Unload any non ContentManager content here
42         }
43         protected override void Update(GameTime gameTime)
44         {
45             // Allows the game to exit
46             if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
47                 ButtonState.Pressed)
48                 this.Exit();
49             // TODO: Add your update logic here
50             base.Update(gameTime);
51         }
52         protected override void Draw(GameTime gameTime)
53         {
54             GraphicsDevice.Clear(Color.CornflowerBlue);
55             // TODO: Add your drawing code here
56             base.Draw(gameTime);
57         }
58     }
59 }

   在这个代码中你会注意到几个类层次(class-level)的变量被自动提供,还有Game1的构造器和5个其他方法。第一个类层次的变量是类型GraphicsDeviceManager.这是非常重要的对象,因为它提供你,作为一个开发者,一种访问你PC、Xbox360或Zune上设备的方式。GraphicsDeviceManager对象有一个属性叫GraphicsDevice,代表你机器上的实际图形设备。因为那个图形设备用作你的XNA游戏和图形卡(或更精确的是GPU)间的中间机构,在你的XNA游戏中你在屏幕上做的每样事都会通过这个对象运行。

   第二个变量是SpriteBatch类的一个实例 。这是你用来绘制精灵的核心对象。在计算机图形术语里,一个精灵被定义为一个整合到一个更大的场景中的2D或3D图像。2D游戏通过绘制多个精灵来制作(玩家精灵、敌人精灵、背景精灵等)。通过这章,你将能使用这个概念并绘制你自己的精灵。

   Initialize方法用来初始化变量和其他与Game1对象相关的对象。你的图像设备对象此刻会初始化并能被用于Initialize方法中来帮助你初始化其他依赖它设置的对象。你会用这个方法来初始化得分值和本书以后章节中其他这样的项。

   LoadContent方法在Initialize方法后调用,还用在游戏图像内容需要重载时调用(例如,图像设备因玩家改变显示设置重置,或其他类似事情)LoadContent方法是你加载所有图像和其他内容的地方,包括图像、模型、声音等等。另外,因你当前的工程什么也不做,这个方法就没什么事发生。

   在LoadConten方法完成后,Game1对象进入类似游戏循环的东西。几乎所有的游戏用某种形式的游戏循环。

   在XNA中,游戏循环只包含两个方法:Update和Draw。你应该试着在Draw方法里做尽可能少的事情,除了绘制你的场景。你的游戏中运行的其他事情(涉及移动对象、检测碰撞,更新分数、检查游戏结束逻辑等等)应该发生在Update方法里。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值