greenfoot
Class UserInfo

java.lang.Object
  extended by greenfoot.UserInfo

public class UserInfo
extends java.lang.Object

我们可以利用UnserInfo类在Greenfoot网站的服务器上持久化地储存信息,当游戏在Greenfoot网站上运行时,各个玩家可以共享储存于服务器上存着的信息。这在制作排行榜时或其他的联网功能时会非常有用。The UserInfo class can be

只有登录了Greenfoot网站的用户才拥有储存空间,对于部分用户而言,他们可能无法储存信息。因此,每次想要存取信息的时候,请务必先用UserInfo.isStorageAvailable()方法检测用户信息是否处于可用的状态。

一个经典的最高分功能可用如下代码实现:

     if (UserInfo.isStorageAvailable()) {
         UserInfo myInfo = UserInfo.getMyInfo();
         if (newScore > myInfo.getScore()) {
             myInfo.setScore(newScore);
             myInfo.store();  // write back to server
         }
     }
 

获取所存信息的方法包括:获得当前用户信息(getMyInfo()),高分排行(例如,getTop(10)可以获得前十名的信息),以及成绩与当前玩家相近的其他用户的信息(例如,getNearby(10))

每个用户可以储存的信息包括一个游戏得分,10个额外其他用途的整数,5个字符串(50个字符之内)。此外,还可以取得用户的用户名和头像图片等信息。

出于方便测试的考虑,在Greenfoot软件中(而不是在Greenfoot网站上)运行时,用户名可以在preferences(CTRL-SHIFT-P 或 CMD-SHIFT-P)选项卡中设置,用户名在开发过程中可以被反复更改,以模拟多个用户登录的情况。当游戏在Greenfoot网站上运行时,此处的用户名即为网站的登录名。

版本:
2.4
作者:
Neil Brown
译者:
Eric Pan(Upupzealot)

翻译有误请联系:hzxjhspxn@163.com


Field Summary
static int NUM_INTS
          可以储存的整数的数目
static int NUM_STRINGS
          可以储存的字符串的数目
static int STRING_LENGTH_LIMIT
          单个字符串的最大长度
 
Method Summary
 int getInt(int index)
          获得所存的第index(从 0 到 NUM_INTS - 1,含 0 和 NUM_INTS - 1)个整数。
static UserInfo getMyInfo()
          获得当前用户的数据存储实例。
static java.util.List getNearby(int maxAmount)
          获得一个排名与当前用户相近的有序的用户信息列表。
 int getRank()
          获得本用户再本游戏案例的总排名。
 int getScore()
          获得用户的得分。
 java.lang.String getString(int index)
          获得所存的第index(从 0 到 STRING_INTS - 1,含 0 和 STRING_INTS - 1)个字符串。
static java.util.List getTop(int maxAmount)
          获得本游戏案例的一个有序的UserInfo列表,排序从最高分开始。
 GreenfootImage getUserImage()
          返回用户的头像图片。图片的尺寸为50x50像素。
 java.lang.String getUserName()
          获得信息所有者的用户名。
static boolean isStorageAvailable()
          确认存储是否可用。
 void setInt(int index, int value)
          将第index(从 0 到 STRING_INTS - 1,含 0 和 STRING_INTS - 1)个整数存为指定的值。
 void setScore(int score)
          设置用户的得分为指定值。
 void setString(int index, java.lang.String value)
          将第index(从 0 到 STRING_INTS - 1,含 0 和 STRING_INTS - 1)个字符串存为指定的值。
 boolean store()
          向服务器发出存储请求。
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NUM_INTS

public static final int NUM_INTS
可以储存的整数的数目

参见:
Constant Field Values

NUM_STRINGS

public static final int NUM_STRINGS
可以储存的字符串的数目

参见:
Constant Field Values

STRING_LENGTH_LIMIT

public static final int STRING_LENGTH_LIMIT
单个字符串的最大长度

See Also:
Constant Field Values
Method Detail

getUserName

public java.lang.String getUserName()
获得信息所有者的用户名。


getInt

public int getInt(int index)
获得所存的第index(从 0 到 NUM_INTS - 1,含 0 和 NUM_INTS - 1)个整数。

所存整数的默认的值为0;


getString

public java.lang.String getString(int index)
获得所存的第index(从 0 到 STRING_INTS - 1,含 0 和 STRING_INTS - 1)个字符串。

所存字符串的默认的值为空字符串("");


setInt

public void setInt(int index,
                   int value)
将第index(从 0 到 STRING_INTS - 1,含 0 和 STRING_INTS - 1)个整数存为指定的值。

注意,若要持久化地保存数据,请务必确保在此之后有调用store()方法。


setString

public void setString(int index,
                      java.lang.String value)
将第index(从 0 到 STRING_INTS - 1,含 0 和 STRING_INTS - 1)个字符串存为指定的值。若传入null则会被视作空字符串。所指定的字符串的长度必须在STRING_LENGTH_LIMIT之内(否则该方法不会被执行)。

注意,若要持久化地保存数据,请务必确保在此之后有调用store()方法。


getScore

public int getScore()
获得用户的得分。默认为0。


setScore

public void setScore(int score)
设置用户的得分为指定值。

注意,此方法用于直接设置用户的得分。若你想要记录最高分,你必须自己动手编写对应的代码,例如:

   if (latestScore > userData.getScore())
   {
     userData.setScore(latestScore);
   }
 
若你没有采取类似的措施,则每次调用本方法时,原先的得分都会被覆盖。

注意,若要持久化地保存数据,请务必确保在此之后有调用store()方法。


getRank

public int getRank()
获得本用户再本游戏案例的总排名。

得分最高的用户的排名值为1,得分第二高的用户的排名值为2,以此类推。拥有相同得分的用户的排名亦相同,所以排名并不是唯一的。为便于查找,我们已按得分降序排列了列表(得分高的用户靠前)。若你想要按得分以升序排列各用户,不妨把游戏的得分设为负值。

若无法取得排名(例如,游戏的得分尚无存档),则返回-1。


isStorageAvailable

public static boolean isStorageAvailable()
确认存储是否可用。

游戏案例在Greenfoot主站之外的网站上以Applet的形式运行的情况下,或者以独立的Application形式运行的情况下,或玩家没有登录Greenfoot网站的情况下,存储将变得不可用(译者注:换言之,仅在Greenfoot软件内和Greenfoot主站上可用)。最后一种情况非常常见,所以在想要存取任何数据之前,请务必用本方法确认存储是否可用。若本方法返回false,则你的游戏必须应对存储不可用的情况。


getMyInfo

public static UserInfo getMyInfo()
获得当前用户的数据存储实例。 该方法在遇到以下情况时,会返回null: 最后一种情况非常常见,所以请务必考虑到本方法法返回null值的可能性。

返回:
用户的信息,或者在遇到上述问题的情况下返回null。

store

public boolean store()
向服务器发出存储请求。

只能请求存储当前用户的数据(特指,通过getMyData方法获得的数据实例)。任何针对其余用户的存储请求会确保失败。

返回:
若存成功存储,则返回true;遇到问题,则返回false。

getTop

public static java.util.List getTop(int maxAmount)
获得本游戏案例的一个有序的UserInfo列表,排序从最高分开始。

返回一个每项都包含一个UserInfo的列表,并且依据游戏得分(getScore()方法的返回值)进行降序排列。maxAmount参数允许你指定所取回的列表带有多少个用户的数据。若有许多用户都玩过你发布的某个游戏,那取回所有用户的信息往往需要一段时间(还有带宽),而通常来说,你或许并不希望处理所有用户的信息。

举个例子,若你想要显示一个高分榜,可以先用setScore()机后续的store()方法储存游戏的得分。然后便可用过调用getTop(10)来获取得分前十名的用户列表。

会返回null的情况有::

请务必考虑到本方法法返回null值的可能性。

参数:
maxAmount - 取回的用户列表中最多含有多少个用户的信息。传入0或负值将会获取所有用户的信息,另请参见上述情况。
返回:
一个每项都包含一个UserInfo的列表,在遇到问题的情况下返回null。

getNearby

public static java.util.List getNearby(int maxAmount)
获得一个排名与当前用户相近的有序的用户信息列表。

列表中的每一项都含有一个用户的信息,并且依据游戏得分(getScore()方法的返回值)进行降序排列。maxAmount参数允许你指定所取回的列表带有多少个用户的数据。若有许多用户都玩过你发布的某个游戏,那取回所有用户的信息往往需要一段时间(还有带宽),而通常来说,你或许并不希望处理所有用户的信息。

列表由本用户及得分情况在本用户周围的用户们的用户信息组成。由此举例而言,假设某玩家在共100个用户中排名第50位。此时若调用getNearby(5)方法,将依次返回由第48名,49名,50名,51名和52名用户的用户信息构成的列表。请不要因此信赖当前用户总是处于所得列表的中间位置:当当前用户排在第2名时,调用getNearby(5)方法,将依次返回由第1名,2名,3名,4名和5名用户的用户信息构成的列表,此时当前用户就位于列表的第二项,同理,类似的情况也会在用户位于排名的最末几位时发生。

举个例子,若你想要显示一个基于当前用户排名的得分榜(用于显示本用户以及周围几名得分相近的用户的信息),可以先用setScore()机后续的store()方法储存游戏的得分。然后便可用过调用getNearby(10)来获取得与当前用户排名相近的十名的用户列表。

该方法在遇到以下情况时,会返回null:

getUserImage

public GreenfootImage getUserImage()
返回用户的头像图片。图片的尺寸为50x50像素。

在Greenfoot网站上,会返回用户的头像图片。 若是在本地的Greenfoot软件上运行(或用户头像不可用),本方法会返回一个写有用户名称的临时图片。

返回:
一个50x50像素的GreenfootImage图片


Greenfoot homepage