[翻译]XNA 3.0 Game Programming Recipes之fifty-three


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/archive/2009/09/05/1560862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值