我目前正在尝试与Phaser和Eureca io一起构建多人游戏。我正处于试图确定玩家身份验证和他们控制权的阶段,我正在服务器上执行此操作,该方法返回正确的玩家ID。
服务器上的方法是 -
eurecaServer.exports.getPlayer2Id = function(name , id)
{
if(name == "Fly" && id == player2id)
{
console.log("correct fly player");
return player2id;
}
else
{
console.log("Wrong fly player");
return id;
}
}
目前我只在客户端进行测试,但是当我调用该函数时,它会返回一个对象。只需在控制台中查看对象,就会显示出来。
Object {status: 0, result: null, error: null, sig: "eY0IjunQt7"}
所以它告诉我我的结果是null,这是奇怪的,但当扩展它我得到。
Object {status: 0, result: null, error: null, sig: "eY0IjunQt7"}
callback: function()
error: null
errorCallback: function()
onReady: (fn, errorFn)
result: "jVcZvzetc8AAK45NAAAH"
sig: "eY0IjunQt7"
正如你所看到的,当扩展结果不是null时,正是我正在寻找的,我试过,JSON.stringify但是它给了我第一个结果,它告诉我结果是null。
任何想法我如何得到我的实际结果或为什么会发生这种情况。
感谢。
编辑:
服务器的客户端组件在主游戏文件
中定义var eurecaClientSetup = function() {
var eurecaClient = new Eureca.Client();
eurecaClient.ready(function (proxy) {
eurecaServer = proxy;
});
然后在对象类中调用它。
this.name = "Fly"
this.id = index; //Passed in on object creation
this.currPlayer = eurecaServer.getPlayer2Id(this.name, this.id);
console.log(JSON.stringify(this.currPlayer));
console.log(this.currPlayer);
答案 0 :(得分:1)
无论框架*如何,任何服务器操作都将是异步的。一旦可用,不同的框架就有不同的方法来获得结果。在Eureca.io中,它似乎在服务器函数名之后使用.onReady()
调用。
换句话说,您需要做的是将客户端代码更改为以下内容:
this.name = "Fly"
this.id = index; //Passed in on object creation
var _this = this; // needed because "this" inside function below won't be the same
eurecaServer.getPlayer2Id(this.name, this.id).onReady(function (id) {
_this.currPlayer = id;
console.log(_this.currPlayer); // shows the right thing
// do other stuff here now you have the right player id
});
*从技术上讲,您可以执行同步/阻止AJAX请求,但在99%的情况下都是不好的做法。
答案 1 :(得分:0)
我是eureca.io的作者,GregL给出的答案是正确的。 我只想补充一点,onReady()调用将被弃用,eureca.io支持promise如call(使用then()函数)。
因此您可以使用此语法,这是更标准的。
this.name = "Fly"
this.id = index; //Passed in on object creation
var _this = this; // needed because "this" inside function below won't be the same
eurecaServer.getPlayer2Id(this.name, this.id).then(function (id) {
_this.currPlayer = id;
console.log(_this.currPlayer); // shows the right thing
// do other stuff here now you have the right player id
});