我正在使用Meteor开发基于文本的冒险游戏,我遇到了如何处理某些元素的问题.即,如何在没有客户端任何输入的情况下将数据从服务器发送到客户端.
这个想法是,当玩家与怪物进行战斗时,战斗损坏和更新玩家和怪物对象将在服务器上循环发生.当玩家受到伤害时,它应相应地更新客户端UI.发布/订阅是否可以这样?
我基本上想要一些东西,并且从服务器监听事件以相应地更新战斗日志.
在伪代码中,这是我正在寻找的东西:
// Client Side:
Meteor.call("runCommand", "attack monster");
// Server Side
Meteor.methods({
runCommand: function(input) {
// Take input, run the loop to begin combat,
// whenever the user takes damage update the
// client UI and output a line saying how much
// damage the player just received and by who
}
});
Run Code Online (Sandbox Code Playgroud)
我知道你可以将一个集合发布到客户端,但这并不是我正在寻找的函数的特定内容,我不想将整个Player对象发布到客户端,我只是想告诉客户端在文本框中写一行,上面写着"你被怪物击中了12点伤害!".
我希望有一个类似于SocketIO的功能,如果我愿意的话,只需向客户端发出一个事件,告诉它更新UI.如果我需要的话,我想我可以使用SocketIO,但人们似乎坚持认为这样的事情完全没有SocketIO就可以使用Meteor,我只是不明白怎么做.
我在这种情况下看到的唯一出局是:编写所有游戏逻辑客户端,感觉这是一个坏主意,将所有战斗日志写入一个似乎非常过分的集合(但可能不是?),或使用一些一种SocketIO类型工具,只是向客户端发出消息,告诉它写一个新行到文本框.