[翻译]XNA 3.0 Game Programming Recipes之fiftythree


PS:自己翻译的,转载请著明出处

                                                                 8-1 登入网络服务

问题
                                    在你可以连接与别的玩家之前,你首先需要用一个帐号或者创造一个新帐号去登录。可以是脱机的帐户如果所有玩家都在同一网络段相连(局域网)或者在线Live帐户,如果你想去通过因特网连接。
                                    登入是被要求的在你访问网络上任何资源之前。它同样允许其他玩家去看到你的名字,以及一些额外的你可以提供的详细信息。
注意:在Zune里这是不必要的。一个XNA游戏在Zune开始一个SignedInPlayer有你指定在Zune设备上的名字。
解决方案
                                    用你的帐号登入是非常容易的。所有你需要做的是调用Guide.ShowSignIn方法,它允许用户去选择一个存在的帐号或者创建一个帐号。
它是如何工作的
                                    在你可以用任何XNA的网络功能时,你应该添加GameServicesComponent到你的Game中。

Adding the GamerServicesComponent(添加游戏的服务组件)
                                    这个GameComponent(参看1-7节)确保整个网络引擎在后台固定时间内被更新。正如任何的GameComponent,它应该被从你的Game结构中加载。

1 public Game1()
2 {
3      graphics=new GraphicsDeviceManager(this);
4      Content.RootDirectory="Content";
5      Componets.Add(new GamerServicesComponent(this));
6 }

Displaying the Sign In Interface(显示登入界面)
                                    此示列程序将选择你定义两个状态中的一个:SignIn和SignedIn.同样的程序是在SignIn状态,登录界面将会显示给你的用户,直到一个帐户被选择或者被创建。一旦一个有效果的帐号已经被选择,程序将移动到SignedIn状态。
                                    开始时声明这两种状态:
1 public enmu GameState{SignIn,SignedIn}
                                    然后声明一个变量,它保留当前的状态:
1 GameState currentGameState=GameState.SignIn;
                                    这将导致你的程序开始在SignIn状态。在你的程序的更新循环里,你将检查你的程序在哪种状态。如果是在SignIn状态,你想要让用户选择一个帐号。然而,因为玩家可以选择一个帐号自动的登录,这是可能的,一个帐号在你开始GamerServicesComponent登录时就已经登录了,你首先想要去检查这里是否当前有一个帐号已经登录了:
 1 if(Gamer.SignedInGamers.Count<1)
 2 {
 3      Guide.ShowSignIn(1,false);
 4      log.Add("Opened  User SignIn Interface");
 5 }
 6 else
 7 {
 8      currentGameState=GameState.SignedIn;
 9      log.Add(Gamer.SignedInGamers[0].GamerTag+"logged in-proceed to SignedIn");
10 }

                                    如果没有帐号已经登录,你激活登录界面,允许用户去选择或者创建一个帐号。一旦一个帐号被选择,Gamer.SignedInGamers.Count将不在是0。在下一次更新阶段之间,当前的状态将会被设置为SignedIn,并且一个消息包含玩家的名字,名字被添加到日志中。
注意:这个日志的内容将会用Draw方法被打印到屏幕上。参看3-5节可以得到更多的关于绘制文本到屏幕上的信息。
                                    Guide.ShowSign方法接收两个参数。第一个参数表示多少玩家应该要求登录。在一个Xbox360的解决方案中,最高四个玩家可以同时登录,同时这个限制只有一个在Windows-based机器上。第二个参数指定是否是在线帐户,它是否被允许登录,如果你想要使用在线的服务器来比赛,它是非常有用的!
注意:紧记,用户可以放弃Guide界面,它导致没有帐号被选择。
                                    因为在同一时刻你不能打开Guide界面两次,你应该检查Guide是否是当前关闭的在你调用这个Guide.ShowSignIn方法。你可以通过检查你的Game的IsActive属性,它将将会是true只在如果你的游戏的窗口是被激活的,如果它不是最小化的,并且如果没有显示。

代码
                                    这整个Update方法下面会显示出。这个IsActive属性被检查,在它Guide.SignIn方法被调用如果没有帐号已经登录。一旦一个有效的帐号已经被登录,状态改变为SignedIn.
 1 protected override void Update(GameTime gameTime)
 2 {
 3     if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)
 4          this.Exit();
 5     if(this.IsActive)
 6     {
 7          switch(currentGameState)
 8          {
 9                  if(Gamer.SignedInGamers.Count<1)
10                  {
11                        Guide.ShowSignIn(1,false);
12                        log.Add("Opened User SignIn Interface");
13                  }
14                  else
15                  {
16                        currentGameState=GameState.SignedIn;
17                        log.Add(Gamer.SignedInGamers[0].Gamertag+"logged in-proceed to SignedIn");
18                  }
19          }
20          break;
21          case GameState.SingedIn:
22          {}
23          break;
24        }
25     }
26    base.Update(gameTime);
27 }
源代码:http://shiba.hpe.cn/jiaoyanzu/WULI/soft/xna.aspx?classId=4
(完)
原文地址:https://www.cnblogs.com/315358525/p/1560862.html