HTML5游戏,用户运动概念

时间:2012-04-17 20:41:38

标签: html5 google-app-engine canvas channel-api

我刚开始学习HTML5画布和Google App Engine的Channel API。

我基于等距地图构建了一个简单的游戏演示。现在我想实现角色移动,但我想知道我应该如何实现它。

当前演示:http://cheukalex.appspot.com

我认为这是如何实施的:

客户将处理此动作。按下箭头键后,客户端将执行移动,然后将新协调发送到服务器,然后服务器将广播给服务器上的其他用户以更新角色的位置。

我想到的问题:

  1. 如果我想实现“移动速度”怎么办? 用户走五个方块。每次运动之间的延迟 将在客户端完成。但那会安全吗?以来 javascripts很容易编辑。

  2. 如何处理延迟?如果我构建了一个简单的追逐标记游戏,我将如何同步用户,以便一个人看起来像“标记”另一个用户,但另一个用户看到他后面1-2个方格,不会发生?


  3. 编辑: @nycynik,你是对的,延迟大约是200毫秒。我在这里测试了它。

    延迟测试:http://cheukalex.appspot.com/latency

    这是它将获得的最小延迟。 200ms非常快。那么可能是我的代码很慢?

    我是如何实施整个游戏的。

    1. 客户进入网站
    2. 服务器在DB
    3. 中创建令牌,开放频道,存储客户端数据(频道ID)
    4. ....一些逻辑
    5. 当客户端按箭头键时,它会通知服务器哪个客户端移动了哪个方向
    6. 服务器接收移动,执行逻辑,循环通过数据库(仅当前在线客户端),向所有客户端广播消息json中地图上每个客户端的位置。客户然后“移动”。
    7. 这有什么不对吗?

2 个答案:

答案 0 :(得分:2)

这应该是对第一个答案的评论,但它不合适。

响应时间可能没什么用,因为网络延迟现在确实是一个问题。也许你可以在用户体验方面工作。要使延迟“对用户”可接受,为什么不添加动画?

例如,当用户点击箭头键时,马看起来像是慢慢拉回来并准备跳跃(在幕后你通过Channel API发送请求)。当你从服务器得到响应时,马可以完成跳跃并降落在另一个位置。

虽然仍会存在延迟问题,但如果延迟不那么明显,您的用户可能会觉得“可接受”。

答案 1 :(得分:1)

  

如果我想实现“移动速度”

,该怎么办?

我建议将您的移动发送到服务器,并让服务器刷新电路板。这将使每个玩家保持同步。

  

如何处理延迟?

如果您愿意,您可以要求所有客户端报告,在服务器发出刷新位置之前,这将强制执行一致性,但这将是一种LCD方法。我认为对于这种类型的游戏,应该可以正常工作。

编辑: 最初我认为它会像网络套接字一样工作,但看起来你的结果要慢得多。它可能是代码中的某些东西,或者它可能是技术本身,但它似乎并不足以满足您的要求。如果这是一盘棋,你会没事的。但是对于这种类型的游戏,你需要更快的往返工作。

这篇文章指的是时间期望

  

渠道API提供速度大约为100-200ms;

working with new channel creation limits

这应该比你得到的更快。