1

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

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

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

这就是我认为的实现方式:

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

我想到的问题:

  1. 如果我想实现“移动速度”怎么办,例如用户走五个方格的速度有多快。每次移动之间的延迟将在客户端完成。但这会安全吗?因为javascript很容易编辑。

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


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

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

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

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

  1. 客户进入网站
  2. 服务器创建令牌,打开通道,在数据库中存储客户端数据(通道 id)
  3. ....一些逻辑
  4. 当客户端按下箭头键时,它会通知服务器客户端移动了哪个方向以及方向
  5. 服务器接收移动,执行逻辑,循环通过数据库(仅当前在线客户端),向所有客户端广播消息,以 json 格式向所有客户端发送地图上每个客户端的位置。然后客户“移动”。

这有什么问题吗?

4

2 回答 2

2

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

响应时间您可能无能为力,因为网络延迟现在确实是一个问题。也许您可以只在用户体验方面工作。为了让用户“可以接受”延迟,为什么不添加动画呢?

例如,当用户按下箭头键时,马可能看起来像是在缓慢后退并准备跳跃(在幕后您正在通过 Channel API 发送请求)。当您收到服务器的响应时,马就可以完成跳跃并降落在另一个位置。

尽管仍然存在延迟问题,但如果延迟不那么明显,您的用户可能会发现它“可以接受”。

于 2012-04-18T00:48:34.860 回答
1

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

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

我该如何处理延迟?

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

编辑:最初我认为它会像网络套接字一样工作,但看起来你的结果要慢得多。它可能是代码中的某些东西,也可能是技术本身,但对于您正在尝试做的事情来说,它似乎不够快。如果这是一场国际象棋游戏,你会没事的。但是对于这种类型的游戏,您需要更快的往返工作。

这篇文章指的是时间预期

Channel API 发送速度在 100-200ms 量级;

使用新的频道创建限制

那应该比你得到的更快。

于 2012-04-17T20:48:57.360 回答