如何编写基于Web浏览器的多人在线游戏?

3
如果我想编写一个桌面游戏,我可以使用XNA代码和UDP套接字制作一个不错的多人游戏。我会非常清楚如何编写我想要的游戏。
但如果我想编写一个基于浏览器的在线多人游戏,该怎么做呢?你不能使用XNA……我一直在看一些问题,看到PHP、ASP.NET、Silverlight和Flash以及Java作为替代语言……我真的不明白它是如何工作的。我的意思是,对于桌面游戏,您打开一个UDP套接字并接受客户端并传输数据,更新玩家状态,使用XNA绘制结果。但在浏览器中,您如何打开套接字等?这个概念是如何工作的,在网页浏览器中实时与人们进行通信。有任何指导吗?我熟悉C#,对Java有一定了解,从未尝试过Flash、ASP.NET或Silverlight。
6个回答

5
范式有些不同。在基于浏览器的游戏中,游戏状态存储和计算在服务器上。用户看到的只是一个用户界面,该界面从这个单一的游戏状态中提取数据。
玩家1在34,29位置有一艘宇宙飞船。他向前按下并移动到35,30位置。这将通过类似AJAX的方式发送到服务器。其他玩家查询Web服务器以获取其他玩家的位置时,会看到此更改。为了实现这一点,需要在服务器上存储此位置。
想想Google文档和Microsoft Word之间的区别。其中一个文档在您的计算机上,另一个文档在线存储,并且您只是与某个远程HTTP服务器进行交互。

3

对于用户界面,最好的结果可能是使用Silverlight或Flash,其次是Java。至于多人互动方面,您可以使用Web服务来发送和接收数据,而不是使用UDP/套接字通信。

由于您已经熟悉C#,因此可以利用这些知识来处理Silverlight和Web服务,因此需要学习的内容相对较少。


1
我会建立一个网络服务,让用户查询/修改游戏中对象的状态。用户在浏览器中点击某个东西,它会触发一个UI事件,然后触发一些ajax或其他能够访问你的网络服务并获取一个JSON响应来保存对象当前状态的内容,并将其呈现在屏幕上。 - user12345613

1

由于您熟悉C#并对Java有一定了解,我最好的猜测是使用Unity3D作为客户端代码(在浏览器中运行),并使用SmartfoxServer作为服务器端代码。

Unity3D是一个强大的游戏引擎,可用于制作在浏览器中运行的游戏。您可以使用JavaScript或C#编写游戏。SmartfoxServer是一个用Java编写的多人游戏服务器,提供简单灵活的通信API。

结合两者,您可以创建惊人的2D/3D多人游戏。


0

几乎每个基于浏览器的游戏都有不同的解决方案。Flash 可以做到,使用 php 和 ajax 也可能实现,你也可以使用 Java。这取决于你已经熟悉哪种语言。


0
当你编写桌面游戏时,游戏代码存储在玩家计算机上。但是当你编写基于Web浏览器的游戏时,游戏不存储在玩家计算机中,而是存储在你的服务器上。玩家在浏览器中看到的只有用户界面,因此你必须在服务器端编写游戏的所有逻辑,并且只在客户端编写接口。
把浏览器想象成一个功能非常强大的显示器会有所帮助。
关于UDP / sockets... Web应用程序中没有这样的东西,但仍然可以通过AJAX或FLASH(我不确定flash是否支持异步,但我敢打赌它可以)使用异步请求。
因此,与其有一个键盘 -> 程序 -> 显示器的流程,你现在有一个键盘 -> 浏览器脚本 -> AJAX请求 -> 服务器脚本 -> 显示器的流程。

0
你可能想要了解一下HTML5中的web sockets。根据你想制作的游戏类型,纯HTML5使用Canvas和一些JavaScript库(如JQuery)可能正是你所需要的。

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