我试图制作一款简单的游戏。这是代码:
Template.my_player.player = function(){
var players = Players.find({ userId: Meteor.userId() });
Session.set("this_x", 5); // WORKS
Session.set("this_x", players.my_x); // DOESNT WORK
return players;
};
我试图找到并记住玩家的位置。后来,我试图找到其他人在同一个X和Y平方上,并且它不会工作。
// ==============
// PLAYERS IN AREA
// ==============
Template.players.players = function(data){
var my_player = Players.find({ userId: Meteor.userId() });
var players = Players.find({ my_x: my_player.my_x });
return players;
};
在这两种情况下,我都无法使用我刚刚搜索过的数据。提前谢谢。
答案 0 :(得分:0)
那是因为
var players = Players.find({ userId: Meteor.userId() });
返回一个游标。所以如果你试着这样做:
var players = Players.find({ userId: Meteor.userId() });
console.log(players.my_x); //undefined
players.my_x为您提供了undefined,因为您尝试访问未定义的游标属性。
您需要使用findOne:
var player = Players.findOne({ userId: Meteor.userId() });
if (player) {
console.log(player.my_x); //logs player position
}
上面的代码将找到登录用户。如果用户未登录,则播放器变量将不确定。使用console.log()进行调试。这很容易。
答案 1 :(得分:0)
原来我必须使用IF语句!在我可以使用它之前,我必须检查数据是否存在。我不确定为什么,但我希望这会对某人有所帮助!
// ==============
// PLAYERS IN AREA
// ==============
Template.players.players = function(){
var player = Players.findOne({ userId: Meteor.userId() });
if(player){
console.log(player.my_x);
var players = Players.find({ my_x: player.my_x});
}
return players;
};
注意是否(玩家){
一旦我将代码包装在其中,它就神奇地起作用了。男孩这与PHP不同......