从HTML5游戏开发开始 - 非常困惑

时间:2011-10-30 15:24:28

标签: html5 node.js javascript-framework

我想开始用HTML5开发一个“简单”的游戏,我对网上找到的很多资源感到很困惑。我在开发方面有扎实的背景,但在完全不同的环境中(具有讽刺意味的是,我开始编程因为我想成为一名游戏开发人员,而这是我13年来从未做过的唯一事情......)。

混淆源于这样一个事实,虽然我非常了解JavaScript并且我对HTML5有一些了解,但我无法弄清楚如何将我所知道的与所有这些新东西混合在一起。例如,这就是我的想法:

  1. 游戏将是国际象棋的实施。我有一些简单的“现成的”AI算法,我可以重复使用单人游戏;这里的目的是学习HTML5游戏开发,所以这部分目前还不是很重要。
  2. 我想在游戏周围建立一个网站。为此,我会使用“常规”CMS,因为我已经了解了很多这样的CMS,并且提起它会更快。
  3. 然后我会拥有游戏本身,在其“离线”版本中,与网站无关,因为据我所知,它本身就会存在于一个页面中。这是第一个问题:如何让游戏了解用户的会话?登录将由CMS处理(这种方式应该更容易,因为已经实现了User Managememt)。
  4. 作为进一步的步骤,我想将AI移动到服务器。这是第二个问题:如何让游戏将玩家的行动发送到服务器,以及如何获得答案?
  5. 稍后,我想把一个PVP元素带到游戏中,即一对一的多人游戏(就像古老的国际象棋一样)。这是第三个问题:如何将信息从客户端发送到另一个客户端,并保持对话继续进行。为此,人们建议我看看Node.js,但这是另一个我无法弄清楚如何“粘合”其余部分的元素。

    以下是PVP会话中单个动作的示例,这让我头疼:玩家1将他的动作发送到服务器(游戏如何与Node.js交谈?)。我需要识别游戏ID(我应该在哪里以及如何存储它?),并确保玩家没有手动修改它,因此它不会干扰别人的游戏( 如何?)。

  6. 我知道,就像我写的那样,整个事情非常混乱,但这正是我现在的感受。我无法弄清楚从哪里开始,因此非常欢迎任何建议。

2 个答案:

答案 0 :(得分:2)

太多事情,可能是错误的顺序。

在我看来,很多问题在第一时间并不特别与HTML5有关。

从明显的事情开始 - 你想要一个下棋的单个页面(基本上是一个javascript应用程序),所以构建它。如果你不能构建它,那么其余部分基本上是无关紧要的,如果你可以构建(我不怀疑你可以),那么剩下的就是建立在这种能力上。

所以我们得到你的第一个问题 - 在你加载页面的时候你会有会话,它是一个网页,就像任何其他网页一样,这就是你如何得到会话。如果您处于离线状态,那么无论您何时上网,都可以坚持使用 - 大概是本地存储。

您想将AI移动到服务器吗?好的,所以请确保前端用户交互与“界面”对话以记录玩家移动并检索AI移动。鉴于这种分离,您可以使用ajax替换客户端上的AI(尽管我希望x为json!)使用相同的参数调用服务器

这会变得更好,如果你想做播放器到播放器,你只是谈论通过服务器从一个用户/播放器到另一个用户/播放器的路由 - 前端代码不必改变,只是服务器在ajax调用的远端做。

但是对于所有这一切,退后一步,一次解决一个问题 - 如果你这样做,你应该到达你想去的地方,而不要让自己疯狂地试图担心一堆看起来很可怕的问题。你可以轻松地一次解决一个问题,我首先要让你的游戏在浏览器中自行运行。

答案 1 :(得分:1)

关于问题一:您可以给用户一个签名的cookie。例如。创建一个包含他的用户ID左右的cookie以及他的用户ID的SHA2哈希加上一个秘密的长盐(例如大约32字节的盐)。 关于问题二:为了交换东西和调用远程函数,我使用RPC库dnode。 关于问题三:在客户端之间调用方法使用相同的东西。

客户端代码(仅举例):

    DNode.connect(function (remote) {
        this.newPeer = function(peer) {
            peer.sendChatMessage("Hello!");
        };
    });

如果您使用dnode,则不必使用游戏ID - 只需将游戏功能添加到绑定到游戏的浏览器即可。如果由于某种原因需要ID,请使用UUID模块创建长而随机的ID - 它们是不可取的。