JAVA能写大型游戏么?
不能 ,首先游戏现在分为手游、端游、页游、VR游戏和AR游戏,而所谓的大型游戏一般都是指端游(例如:英雄联盟、DOTA2、魔兽世界等)。而端游的服务端开发必须是C++,这没办法C++和java的效率还是有很大差距的。
java什么东西基本都能开发,只是java致命的是不能直接操作内存,只能安装虚拟机,这样使java在开发的时候造成很多局 限性,但是java提供了很多API,可以调用c的类库,使得功能进一步提升,又由于java对于垃圾回收机制是自动的,使得 游戏在流畅性上有很大的折扣。所以java不适合开发大型游戏(除非自己实现垃圾回收等一些机制),使java能与c相比 ,又因为java的初衷就不在界面和桌面游戏上,而在企业开发。因此java不适合开发大型游戏,中小型网络游戏还行。
在游戏业Java可以搞什么?
那就是页游和手游的服务端了,页游的前端都是Flash或者WEB,手游的前端是coco2dx(C++),unity3D(C#或JS)、虚幻引擎 ,可以看看现在很多公司像腾讯互娱、网易游戏、英雄互娱、边锋网络、巨人网络、37互娱、掌趣科技等等游戏公司他们都在招Java游戏服务端,一般技术要求也不低。
为什么做页游手游的服务端都是用的JAVA而不用C++?
现在很多页游手游的服务端都用Java了,因为Java的开发效率比C++的要高,开发周期时间也较短,游戏公司每天在游戏的开发和运营上花费较多的财力,使得游戏公司在上一款产品时都是在抢时间,另外c++的要求门槛高 ,而且经验少的代码质量差,服务器很容易挂掉,还有就是做Java的人也比较好找,写的代码只要不是太烂,一般服务也不会有什么问题。
为什么游戏行业以前用c++做手游服务端比较多,现在很多人用Java做手游服务端?
好像在jdk 4.0之前JAVA是没有NIO的,所以那时游戏服务端的天下都是c++/c,后来java出了NIO后,慢慢出现NIO的框架,如 netty、mina等等优秀的框架,慢慢就出现有人用java来做服务端了。 NIO是什么,自己百度吧。 NIO的包,有一些新特性,就是异步非阻塞通讯,大大提高了服务端的性能。
Java现在所用的Tomcat,其实是伪异步阻塞式通讯,就是一个线程池在接受发送,一个线程必须等客户端接受完毕才解除 阻塞,底层还是同步阻塞的。
另外搞C++的人也不愿意转Java,因为需要花费一定的时间和精力,所以现在游戏行业端游的服务端都是c++的天下,而手游和页游的服务端大多数都是java,并且现在拿Java去做页游和手游的服务端也比较轻松,市面上也有很多成功的产品。
假如我是做JAVA的,现在想去做服务端的端游好做吗?
假如你想搞端游,提醒一下,搞端游的公司门槛很高,而且数量极少,现在剩下的端游公司真心不多了,都是些巨头,如果打算搞端游的话,问一问自己第一个你技术达不达到那种水平? 第二,公司太少了,市场上的岗位也太少,风险大。当然了,如果你觉得你是技术大牛对C++/C语言可以很轻松搞定的话,那可以考虑去做做。
所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言。这需要根据自己游戏的类型和要求加以选择。比如C++,Java , Erlang,go等等。目前我用过的只有C++和Java.但是以Java为主。所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系。
Java目前作为游戏服务器开发语言已经很是普遍。但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些。两种语言各有利弊。C++效率高,但是掌握度难些。没有Java易于掌握。而目前对于追求快速上线率的页游和手游来说,Java成了一个不错的选择。
早年开发游戏必须用C++,这没得说,2000-2004年,java还没有nio,其他动态语言不抗重负,只能C/C++能开发出完整可用的游戏服务端。直到2005年,韩国的游戏很多都还是纯C++写服务端,金山之前也开发过很多纯粹C++的游戏服务端,后来大家都切了。
现代选择有很多:java + javascript, c+python, c+lua, scala, go, erlang。我们面向性能的服务器用 java,面向逻辑服务器 python,面向高并发的会选择 scala,次一级高并发或者性能测试程序(机器人)会选择 gevent。那是不是我们就不用C++呢?我们用 C来做网络,不用C++,但是C的比例在所有代码中占比有限。
这是否意味我们可以放弃C/C++了?也不是:C语言是一把锋利的匕首,而现代动态语言是一把长剑。平时匕首可以藏在身上,大部分时候用长剑披荆斩棘就够了,但当你碰到坚硬的石头,长剑不管用了,那么拿出匕首来果断的切碎他。
作者:程序媛阿薇
链接:https://zhuanlan.zhihu.com/p/406101922
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
对于一个成熟领域而言,我的建议是尽量用更高级一点的开发语言,因为游戏开发很多核心技术都有了较为妥当的解决方法。大量的服务端逻辑其实都是在等待,等待网络,等待数据库,这种情况下用C得不偿失。但是服务端有一些地方还是躲不开C/C++,比如当服务器涉及到 3D计算的话(国内很多2D服务端,国外很多3D服务端),大量的矢量矩阵,除了用C++封装出一套好用的数学库外,即便直接用java写,那也是很麻烦的。再比如现在快速动作越来越多,为了让玩家操作更流畅,我需要基于 UDP快速可靠协议,协议开发用 java或者scala,性能上是没办法满足要求的,况且协议实现后要和客户端通信,你没法让所有客户端跟着你一起用java/scala。再比如某些cpu密集的抽象度高的模块,如 aoi或者 ai模块。
对于一个新兴领域而言,C/C++很多情况下是你别无选择的东西。比如移动化浪潮刚起步的时候,还没有啥 cocos或者 unity你真要开发游戏,你必须迅速的使用起 OpenGL ES和 OpenSL,然后再叠加某一脚本,以快制胜,第一批移动浪潮上发财的就是这些游戏。又或者,你可以根本躲开,先不介入,等到几年后cocos和 unity成熟了,你在介入用lua / C#写程序。再比如服务端你如果离开熟悉的游戏和web,去开发一个陌生的领域,如流媒体服务,你会发现这怎么和10年前的游戏一样呀,什么高级工具都不给我用用,这时你可以再等个四五年应该高级工具会出现,异或你想领先别人时,你就果断的拿出 C/C++来解决之,这就是C独有的开拓新领域能力。
大部分答案都是非黑即白,非此即彼。不要只会C不会动态语言,避免成为一个傻逼;也不要只会动态语言不会C,避免离开熟悉的温室就活不下去。对于一个新手而言,如果什么都没学过,我的建议是先用快速开发的东西,把项目弄起来再说,有精力有机会的情况下,也不能完全放弃一些基础的东西,让自己残缺了。
PS:在相同架构下,就纯粹性能而言,各种语言性能差距到底是多少呢?如果只开发回合制这些慢节奏游戏,或者HTTP接口,大部分情况都在等待数据库等待用户消息的话,差别确实不大,的确可能5%都不到。如果cpu密集了,那么可以参考下面的图表,总体来说是10-50倍的性能差别:
有人问,说了半天,这个也不行,那个也不完美,而我时间有限,有没有一个更经济实惠的方法呀?如何才一次性达到彼岸呀?时间有限项目吃紧有没有更好的选择?我说有啊!那就是 java。
这样,我列出一般开发游戏使用的语言。
2D页游:AS3 JS
3D页游:AS3 C#(Unity)
IOS游戏:Obj-C js/lua(Cocos-2d-x) js/C#(Unity) AS3
安卓游戏:java js/lua(Cocos-2d-x) js/C#(Unity) AS3
在线小游戏:AS3 JS
大型单机游戏/客户端MMORPG::C++ C#
JAVA能写大型游戏么?_java游戏开发_viqecel的博客-CSDN博客
JAVA能写大型游戏么?_杰克说互联网的博客-CSDN博客
java能开发游戏吗_百度知道
java可以写游戏吗_百度知道
java游戏服务器开发需要学习的技术_LixiSchool的博客-CSDN博客
为什么主流游戏大部分都是C++开发出来的? - 知乎