2012-12-07 58 views
3

我正在写一个JavaScript网页游戏,它具有类似于一个Urban Dead用途的3 x 3视口。 “世界地图”存储为100 x 100二维数组服务器端(nodejs),每对坐标定义一个“房间”。因此,3 x 3视口显示了9个房间的名称和内容。更新客户端Javascript游戏视口

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

问题

我应该如何去想使得视“刷新”或更新?我想这样做...

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

2)当的客房的变化之一的内容,所述服务器(的NodeJS)运行的客户端侧功能告诉它向服务器请求的9个室和重新绘制内容/显示一切。

作为编程新手,我想知道这个实现过于幼稚或效率低下吗?

回答

1

前一个选项将是最好的imo,纯粹是因为您的地图展开后,您将更容易设置触发区域,从而导致客户端加载地图的特定区域。您甚至可以只加载他们可以看到或有权访问的房间。

例如,如果您有多个字符,这也是有好处的。想象一下,你在一个地方有你的主角,而在其他地方有一个副角色。客户知道他们的位置并理解每个角色可以看到的内容并仅从服务器请求这些信息会更好。这是一个更加可扩展的解决方案,而不是让服务器不断向所有正在收听的人播放所有房间信息。

关于房间内容的变化,这可能会被标记为从服务器到所有客户端的事件 - 但完全基于房间坐标和最小数据。如果此事件涵盖了客户当前可以看到的其中一个房间,那么该客户可能会请求该房间信息。所以这部分涉及到你的选择二,但不应该广播太多。

作为一个比喻,这更类似于让客户/用户在他们想要的时间只从网站请求他们想要的资源,并且可能注册邮件提醒他们对他们感兴趣的内容。而不是让用户注册RSS提要,并在网站发生任何变化时收到通知。前者更为优化,可以通过特定的方式进行控制,如果用户有兴趣浏览网站的全部内容(通常情况下不适用于游戏 - 除非您设计的机器人具有以作弊)。总体而言,在通过实施这两种方法的一部分来谈论它之后,这将是有用的。但如果这是一个选择,第一个会给你更多的控制权。

+0

感谢您的漫长解释。 +1并接受。 – Legendre

1

我不担心太天真或效率低下的解决方案。困难的部分是让游戏可玩性和乐趣 - 后期优化。

看一下这个例子,传输的数据量看起来不是很大。你应该能够获取完整的9套房间进行更新。

你是否正在从服务器以间隔(轮询)方式提取数据,或者你是否推动了从服务器到客户端的更改?

+0

感谢您的帮助。 +1 – Legendre

1

问题是你关心AFK被通知,以及关于隔壁房间的信息有多重要。

如果您认为一个策略可以改变,如果一个房间更新?在这种情况下,每次更新完成时都会进行更新。

如果一个玩家不在乎,那么当传递到下一个房间时就完成了改变。

一种中间解决方案是根据游戏每10或30秒询问一次“增量”更新(只是修改过的元素)。在这种情况下,我们的中央时钟可能很有趣(多个玩家将同时更新),并且这会创建一个转身式的游戏。

作为RPG玩家(纸本角色扮演游戏),我会认为第三个是一个好方法。您甚至可以混合使用解决方案:当前房间的短时间更新和基于感知的时间(只有在重大活动时,金光闪闪才会更新室外空间)。

+0

感谢您的意见。 +1 – Legendre