zoukankan      html  css  js  c++  java
  • [翻译]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
    (完)
  • 相关阅读:
    前端总结数据结构与算法基础
    Linux 常用命令
    mariadb下载二进制包源码包地址(使用清华)
    centos7添加永久静态路由
    登录普通用户会报错-bash: ulimit: open files: cannot modify limit: Operation not permitted
    编写二进制安装mariadb10.2的ansible-playbook剧本
    su
    URL后面加不加“/”有区别吗?
    RocketMQ在面试中那些常见问题及答案+汇总
    通过实现网站访问计数器带你理解 轻量级锁CAS原理,还学不会算我输!!!
  • 原文地址:https://www.cnblogs.com/315358525/p/1560862.html
Copyright © 2011-2022 走看看