更新客户端Javascript游戏视口

3
我正在编写一个 JavaScript 网页游戏,它具有类似 Urban Dead 的 3 x 3 视窗。 "世界地图" 存储为 100 x 100 的二维数组(nodejs)在服务器端,每对坐标定义了一个 "房间"。因此,3 x 3 视口显示了 9 个房间的名称和内容。
用户的位置以坐标形式存储在服务器端。例如:Bob = { x : 2, y : 3 }。所以 Bob 的 x 坐标是 Bob.x。客户端(浏览器)可以检索此信息并计算出其他 8 个房间的坐标,并请求服务器提供这些房间的内容。然后在视口中显示这些内容。这应该看起来像 Urban Dead 中的视口(左上角)。
问题:如何考虑使视口 "刷新" 或更新?我的想法是这样的...

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

2) 当一个房间的内容发生变化时,服务器(nodejs)运行一个客户端函数,告诉它请求服务器获取9个房间的内容并重新绘制/显示所有内容。

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

3个回答

1

不必担心过于天真或低效的解决方案。困难的部分是使游戏可玩和有趣 - 以后再进行优化。

从这个例子来看,要传输的数据量似乎不是很大。您应该能够获取完整的9个房间集以进行更新。

您是通过间隔(轮询)从服务器拉取数据,还是以某种方式从服务器向客户端推送更改?


1
问题是你是否关心AFK被通知,以及下一个房间的信息有多重要。
如果你认为策略会因为房间更新而改变?在这种情况下,每次更新都要进行更新。
如果玩家不在意,则在进入下一个房间时进行更改。
一种中间的解决方案是每10秒或30秒询问“增量”更新(只有已修改的元素)。在这种情况下,使用中央时钟可能很有趣(多个玩家将同时更新),并且这会创建一种轮流游戏方式。
作为RPG玩家(纸质RPG),我认为第三种方法是好的。你甚至可以混合解决方案:当前房间的短时间更新,基于感知的时间(闪烁和聋哑人只会在重大事件发生时更新外部房间)。

1

在我看来,前一种选择是最好的,纯粹是因为随着地图的扩大,您将更容易设置触发区域,使客户端加载地图的特定区域。您甚至可以仅加载他们可以看到或可以访问的房间。

例如,如果您有多个角色,这也会带来好处。想象一下,您的主要角色在一个位置,而另一个角色在其他地方。对于客户端来说,了解他们所在的位置并理解每个角色可以看到什么,并仅从服务器请求此信息,会更好。这比让服务器不断向所有正在监听的人广播所有房间信息更具可扩展性。

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

作为类比,这更类似于客户/用户只在他们想要的时间从网站请求他们想要的资源,并可能注册邮件提醒有关感兴趣的内容。 而不是让用户注册RSS订阅并在网站上发生任何更改时收到通知。 前者更为优化,可以以特定方式进行控制;如果您的用户对整个站点的内容感兴趣(除非您正在设计必须欺骗的机器人),则后者更好。
总体而言,在讨论过后实施两种方法的一部分将会很有用。 但是,如果有选择,第一个选项将给您更多控制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接