javascript - 更新客户端 Javascript 游戏视口(viewport)

标签 javascript node.js web-applications

我正在编写一个 3 x 3 视口(viewport)的 javascript 网络游戏,类似于 Urban Dead使用。 “世界地图”存储为 100 x 100 二维数组服务器端(nodejs),每对坐标定义一个“房间”。因此,3 x 3 视口(viewport)显示了 9 个房间的名称和内容。

用户的位置作为坐标存储在服务器端。例如。 Bob = { x : 2, y : 3 }。所以 Bob 的 x 坐标是 Bob.x。客户端(浏览器)可以检索它并计算出其他 8 个房间的坐标,并向服务器询问这些房间的内容。然后这些将显示在视口(viewport)中。这应该看起来像 Urban Dead 中的视口(viewport)(左上角)。

问题

我应该如何考虑使视口(viewport)“刷新”或更新?我正在考虑这样做...

1) 当玩家从坐标 (2,3) 移动到 (1,3) 时。客户端再次向服务器询问 9 个房间的内容,并重新绘制/显示所有内容。

2) 当其中一个房间的内容发生变化时,服务器(nodejs)运行一个客户端函数,告诉它向服务器询问 9 个房间的内容,然后重新绘制/显示所有内容。

作为编程新手,我想知道这种实现是否太幼稚或效率低下?

最佳答案

在我看来,前一个选项是最好的,纯粹是因为随着 map 的扩展,您可以更轻松地设置触发区域,使您的客户端加载 map 的特定区域。您甚至可以只加载他们可以看到或可以访问的房间。

这也会有好处,例如,如果您有多个 Angular 色。想象一下,您的主要 Angular 色在一个位置,而次要 Angular 色在其他位置。客户端最好知道他们在哪里并了解每个 Angular 色可以看到什么并且只从服务器请求此信息。与让服务器不断向正在收听的任何人广播所有房间信息相比,这是一个更具扩展性的解决方案。

关于房间内容的变化,这可以被标记为从服务器到所有客户端的事件 - 但纯粹基于房间坐标和最少的数据。如果此事件涵盖客户当前可以看到的房间之一,则可能会发生该客户对房间信息的请求。因此,这在某种程度上涉及您的选项二,但不应广播太多。

打个比方,这更类似于让客户/用户在他们需要的时候只从网站请求他们想要的资源,并可能注册关于他们感兴趣的内容的邮件提醒。而不是让用户注册 RSS 提要并在网站发生任何变化时得到通知。前者更优,可以通过特定方式控制,如果您的用户有兴趣概览网站的全部内容,则后者更好(这在游戏中通常不是这种情况 - 除非您正在设计机器人必须作弊)

总的来说,在通过实现这两种方法的一部分进行讨论之后会很有用。但如果它是一个选择,第一个会给你更多的控制权。

关于javascript - 更新客户端 Javascript 游戏视口(viewport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765069/

相关文章:

javascript - 在 ELM 中解码嵌套的可变长度 JSON

javascript - Angular JS - 如何将 JSON 值转换为 JSON 键?

node.js - MongoDB/ Mongoose :Getting incorrect distance with geoNear method using geoJSON

c# - 从上传的 Excel 文件中获取数据而不保存到文件系统

javascript - 如何用表单提交时的数据属性替换值? jQuery

javascript - 需要一个正则表达式来确保数字以 01 02 或 08 开头并且长度为 10 或 11 位

node.js - 快速 URL 生成

javascript - async/await 不会将构建的数组返回到父 array.map()

javascript - Ajax 启用浏览器加载栏

Python Dash Basic Auth - 在应用程序中获取用户名