我正在与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
}
});
我了解您可以将集合发布到客户端,但这并不是我想要的功能真正的特定功能,我不想将整个Player对象发布到客户端,我只是想告诉客户端在文本框中写一行,写着“您被怪物击中了12点伤害!”。
我希望有一个类似于SocketIO的功能,如果我愿意的话,我可以向客户端发出一个事件,告诉它更新UI。我想我可以根据需要使用SocketIO,但是人们似乎坚决要求像Meteor这样的事情完全可以在没有SocketIO的情况下实现,我只是不十分了解。
在这种情况下,我看到的唯一结果是:在客户端编写所有游戏逻辑,这似乎是个坏主意;将所有战斗日志都编写到一个看起来非常多余的集合中(但也许不是吗?),或者使用一些一种SocketIO类型工具,仅向客户端发出消息,告诉客户端在文本框中写新行。
使用Meteor,创建战斗日志收集似乎是您最简单的选择。您只能听added
事件,然后在战斗结束后清除集合。应该是这样的:
var cursor = Combat_Log.find();
var handleCombatLog = cursor.observe({
added: function (tmp)
{
// do your stuff
}
});
我在这里问类似的问题,希望这会有所帮助^^
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句