这是一个广泛的问题,但我尝试涵盖有关该主题的视图元素。如果您没有注册或将您的帐户与 Facebook 等网站关联并重新安装应用程序,Candy Crush Sage 会自行重置。他们很可能使用数据库来存储东西。如果你没有注册,东西可能只是存储在本地。
LibGDX 提供了一个方便的功能来在本地存储数据。它称为 Preferences,您只需写入它,下次打开应用程序时它会持续存在。
Preferences pref = Gdx.app.getPreferences("somefile");
pref.putString("name", "Menyo");
pref.putInteger("level", 20);
但是,当您卸载时,这些数据会随之而来,对于喜欢“调查”的玩家来说,这也不是很安全。除此之外,您可以将自己创建的数据存储在某个地方。如果您将其存储在内部应用程序之外,即使在删除应用程序后它仍然存在,并且只要数据保留并且您的应用程序在重新安装后看起来在同一位置,您应该能够检索数据。但正如您所料,这也不是万无一失的。
唯一真正确定的方法是拥有某种登录机制。最可行的方法是数据库。我现在有一个类似的系统正在运行,但是在客户端和数据库之间有一个服务器。您可以将任何数据存储在数据库中,并通过其 ID 将其链接到玩家。
要设置数据库,我强烈建议不要通过客户端设备直接连接到数据库。要么有一个网络服务,要么就像我目前正在做一个KryoNet 服务器。这里的原因是您需要清理来自客户端的数据。您可以从客户端设备执行此操作,但您无法完全控制它。始终在服务器端对用户输入进行清理。
如果您了解一点 PHP 和 mysql,那么创建一个通过数据库连接的 Web 服务非常容易。您只需要向该 php 页面发送 HttpRequest 并让它完成工作。
public class WebTest {
HttpRequestBuilder builder;
Net.HttpRequest request;
public WebTest()
{
builder = new HttpRequestBuilder();
request = builder.newRequest().method(Net.HttpMethods.GET).url("http://yourdomain.com/script.php").build();
request.setHeader("Content-Type", "application/x-www-form-urlencoded");
final long start = System.nanoTime();
Gdx.net.sendHttpRequest(request, new Net.HttpResponseListener() {
@Override
public void handleHttpResponse(Net.HttpResponse httpResponse) {
Gdx.app.log("Test", "HTTP Response code: " + httpResponse.getStatus().getStatusCode());
Gdx.app.log("Test", "HTTP Response code: " + httpResponse.getResultAsString());
Gdx.app.log("Test", "Response time: " + ((System.nanoTime() - start) / 1000000) + "ms");
}
@Override
public void failed(Throwable t) {
Gdx.app.log("Test", "HTTP request failed");
}
@Override
public void cancelled() {
Gdx.app.log("Test", "HTTP request cancelled");
}
});
}
}
将一个名为script.php 的php 脚本放入yourdomain.com 并在其中回显一些内容。那么这段代码应该会在你的应用中接收到这个回声。
您还可以创建 xml 并使用您喜欢的解析器对其进行解析。但是您必须设置请求的标头才能正确接收xml。
request.setHeader("Content-Type", "text/xml");
这是一个以 XML 格式发送反馈的 PHP MySQL 连接。
<?php
$link = mysqli_connect("127.0.0.1", "root", "", "chatapp");
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><mysql></mysql>");
if (!$link)
{
$xml->addChild("error", "Error: Unable to connect to MySQL.");
$xml->addChild("error", "Debugging errno: " . mysqli_connect_errno());
$xml->addChild("error", "Debugging error: " . mysqli_connect_error());
exit;
}
$xml->addChild("success", "Success: A proper connection to MySQL was made!");
$xml->addChild("success", "Host information: " . mysqli_get_host_info($link));
//Sends the xml to whoever requested this
print($xml->asXML());
mysqli_close($link);
?>
现在您可以像使用普通网页一样简单地使用 PHP 将用户登录到数据库中。有很多 php 教程涵盖了这个主题。当然,您可以为此使用任何服务器端脚本。
您自己的服务器也可以连接到数据库,但需要做更多的工作。但是 KryoNet 需要你做很多工作。您自己的服务器确实意味着您可以在服务器上存储数据并通过 TCP 或 UDP 连接快速交换这些数据。您基本上可以更好地控制正在交换的内容。