|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectgreenfoot.UserInfo
public class UserInfo
我们可以利用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网站上运行时,此处的用户名即为网站的登录名。
翻译有误请联系: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 |
---|
public static final int NUM_INTS
public static final int NUM_STRINGS
public static final int STRING_LENGTH_LIMIT
Method Detail |
---|
public java.lang.String getUserName()
public int getInt(int index)
所存整数的默认的值为0;
public java.lang.String getString(int index)
所存字符串的默认的值为空字符串("");
public void setInt(int index, int value)
注意,若要持久化地保存数据,请务必确保在此之后有调用store()方法。
public void setString(int index, java.lang.String value)
注意,若要持久化地保存数据,请务必确保在此之后有调用store()方法。
public int getScore()
public void setScore(int score)
注意,此方法用于直接设置用户的得分。若你想要记录最高分,你必须自己动手编写对应的代码,例如:
if (latestScore > userData.getScore()) { userData.setScore(latestScore); }若你没有采取类似的措施,则每次调用本方法时,原先的得分都会被覆盖。
注意,若要持久化地保存数据,请务必确保在此之后有调用store()方法。
public int getRank()
得分最高的用户的排名值为1,得分第二高的用户的排名值为2,以此类推。拥有相同得分的用户的排名亦相同,所以排名并不是唯一的。为便于查找,我们已按得分降序排列了列表(得分高的用户靠前)。若你想要按得分以升序排列各用户,不妨把游戏的得分设为负值。
若无法取得排名(例如,游戏的得分尚无存档),则返回-1。
public static boolean isStorageAvailable()
游戏案例在Greenfoot主站之外的网站上以Applet的形式运行的情况下,或者以独立的Application形式运行的情况下,或玩家没有登录Greenfoot网站的情况下,存储将变得不可用(译者注:换言之,仅在Greenfoot软件内和Greenfoot主站上可用)。最后一种情况非常常见,所以在想要存取任何数据之前,请务必用本方法确认存储是否可用。若本方法返回false,则你的游戏必须应对存储不可用的情况。
public static UserInfo getMyInfo()
public boolean store()
只能请求存储当前用户的数据(特指,通过getMyData方法获得的数据实例)。任何针对其余用户的存储请求会确保失败。
public static java.util.List getTop(int maxAmount)
返回一个每项都包含一个UserInfo的列表,并且依据游戏得分(getScore()方法的返回值)进行降序排列。maxAmount参数允许你指定所取回的列表带有多少个用户的数据。若有许多用户都玩过你发布的某个游戏,那取回所有用户的信息往往需要一段时间(还有带宽),而通常来说,你或许并不希望处理所有用户的信息。
举个例子,若你想要显示一个高分榜,可以先用setScore()机后续的store()方法储存游戏的得分。然后便可用过调用getTop(10)来获取得分前十名的用户列表。
会返回null的情况有::
maxAmount
- 取回的用户列表中最多含有多少个用户的信息。传入0或负值将会获取所有用户的信息,另请参见上述情况。
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:
maxAmount
- 取回的用户列表中最多含有多少个用户的信息。传入0或负值将会获取所有用户的信息,另请参见上述情况。
public GreenfootImage getUserImage()
在Greenfoot网站上,会返回用户的头像图片。 若是在本地的Greenfoot软件上运行(或用户头像不可用),本方法会返回一个写有用户名称的临时图片。
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |