C# 如何编写基于web浏览器的多人游戏?

C# 如何编写基于web浏览器的多人游戏?,c#,java,flash,xna,online-game,C#,Java,Flash,Xna,Online Game,如果我想编写一个基于桌面的游戏,我可以使用一些XNA代码和UDP套接字来制作一个不错的多人游戏。我会非常清楚如何编写我想要的游戏 但如果我想编写一个基于浏览器的在线多人游戏,我会怎么做?你不能使用XNA…我一直在考虑一些问题,我看到PHP、ASP.NET、Silverlight、Flash和Java作为替代语言…我真的不明白它是如何工作的。我的意思是,对于基于桌面的游戏,你打开一个UDP套接字,接受客户端并传输数据,更新玩家状态,使用XNA绘制结果。但是在浏览器中,如何打开套接字和其他东西呢?这

如果我想编写一个基于桌面的游戏,我可以使用一些XNA代码和UDP套接字来制作一个不错的多人游戏。我会非常清楚如何编写我想要的游戏


但如果我想编写一个基于浏览器的在线多人游戏,我会怎么做?你不能使用XNA…我一直在考虑一些问题,我看到PHP、ASP.NET、Silverlight、Flash和Java作为替代语言…我真的不明白它是如何工作的。我的意思是,对于基于桌面的游戏,你打开一个UDP套接字,接受客户端并传输数据,更新玩家状态,使用XNA绘制结果。但是在浏览器中,如何打开套接字和其他东西呢?这个概念是如何运作的,通过网络浏览器与人们实时沟通。有什么方向吗?我对C#很熟悉,对Java也很熟悉。从未使用过Flash、ASP.NET或Silverlight。

解决方案几乎和基于浏览器的游戏一样多。Flash可以做到这一点,使用php和ajax可能是可行的,您可以随时使用Java。这取决于您已经熟悉的内容。

对于UI,您可能会使用Silverlight或Flash获得最佳效果,其次是Java。就多人交互而言,您可以使用web服务来发送和接收数据,而不是UDP/套接字通信


由于您已经熟悉C#,因此可以在Silverlight和web服务中利用这些知识,因此需要学习的内容会少一些。

范例有点不同。在基于浏览器的游戏中,游戏状态存储并计算在服务器上。用户看到的只是一个用户界面,它从这个单一的游戏状态中提取数据

玩家1在34,29号位置有一艘宇宙飞船。他向前按,到35,30。这将通过类似AJAX的方式发送到服务器。其他玩家在查询web服务器上其他玩家的位置时会看到这种变化。此位置需要存储在该服务器上的某个位置才能发生此情况


想想谷歌文档和微软Word之间的区别。一个将文档保存在您的计算机上,另一个在线存储文档,您只需与某个远程HTTP服务器进行交互。

编写桌面游戏时,游戏就在玩家的计算机上。编写基于web浏览器的游戏时,游戏不在玩家的计算机中,而是在服务器中。玩家在浏览器中只能看到UI。因此,您必须在服务器端编程游戏的所有逻辑,而仅在客户端编程接口

如果你把浏览器想象成一个类固醇监视器,这会有所帮助

关于UDP/套接字。。。web应用程序中没有这样的功能,但您仍然可以通过AJAX或FLASH使用异步请求(我不太确定FLASH是否可以实现异步,我打赌它可以)


因此,您没有使用
键盘->程序->监视器
流,而是使用
键盘->浏览器脚本->AJAX请求->服务器脚本->监视器
流。

因为您熟悉C语言,也不太熟悉Java,所以我最好的猜测是客户端代码(在浏览器中运行)和服务器端代码

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


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

您可能想看看HTML5。根据您想要制作的游戏类型,使用Canvas和一些javascript库(如JQuery)的纯HTML5可能正是您想要的。我将设置一个web服务,让用户查询/修改游戏中对象的状态。用户单击浏览器中的某个对象,它会触发一个UI事件,该事件会触发一些ajax或其他可能影响web服务的事件,并获得一个包含对象当前状态的json响应,然后将其呈现在屏幕上。