java 开发游戏 写游戏

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++开发出来的? - 知乎 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

groovy.lang.GroovyRuntimeException:Ambiguous method

目录 问题 根因及解决 问题 今天线上的计算脚本报了个问题,报警如下是 groovy 运行时异常。调用方法 org.springframework.util.CollectionUtils#isEmpty 出现了异常。异常原因是由于方法重载造成了歧义。无法确定如何调用方法 [null],因为它同时匹配了…

UE4/5 PoseDriver 动画蓝图节点使用

PoseDriver节点可以进行Pose的比对,从而针对不同Pose生成不同权重数值,权重数值可应用至MorphTarget上使动画更加逼真,或应用至角色挂件上,制作出类惯性或弹簧的附加效果。 1.创建Pose 这里创建Box作为演示,下图大Bo…

sudo su - postgres 是什么意思?

解释 PostgreSQL 安装成功之后,会默认创建一个名为 postgres 的 Linux 用户。 从 root 用户切换为 postgres 用户命令为su postgres,但是这样切换用户会导致该用户的权限很低,所以使用sudo su postgres设置 postgres 用户拥有部分 root 用户…

《评论文章-无线纳米技术可以降低脊髓刺激成本和并发症,传统设备与无线刺激设备费用相比的回顾》

SCS治疗可能会出现并发症,并且管理这些并发症的费用很高。 慢性疼痛是促使人们寻求缓解的主要因素,也是阿片类药物研究的主要方向。 SCS治疗取得了突破性进展,在治疗背部手术失败综合征、神经性疼痛障碍、复杂区域疼痛综合征以及血管缺血引…

【数据库】将excel数据导入mysql数据库

环境:Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件,删除表头行并另存为并更改编码方式(由于与数据库的编码不同,会导致导入报错) 通过命令行登录数据库 winr cmd进入 进入装mysql的目录位…

使用深度预测转换器 (DPT) 进行图像深度估计--附源码

介绍 图像深度估计是指计算出图像中物体的距离。这是计算机视觉中的一个重要问题,因为它有助于创建 3D 模型、增强现实和自动驾驶汽车等。过去,人们使用立体视觉或特殊传感器等技术来估计深度。但现在,出现了一种使用深度学习的新方法,称为深度预测变换器 (DPT)。 DPT 是…

记一个有意思的写法

api.js import { request } from fesjs/fes; import { ref, isRef } from vue; import { FMessage } from fesjs/fes-design;const postApiWithBizUrl {// 查询产品productQuery: /product/query,// 添加/修改产品productOperate: /product/operate,// 查询审批链approvalQue…

Kafka3.0.0版本——Broker(总体工作流程)

目录 一、Kafka中Broker总体工作流程图解二、Kafka中Broker总体工作流程步骤解析 一、Kafka中Broker总体工作流程图解 总体工作流程图解 二、Kafka中Broker总体工作流程步骤解析 1、broker启动后在zk中注册,如下图所示: 2、controller谁先注册&…

【leetcode经典简单题】自食用||删除链表中倒数第k个结点

step by step. 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出&a…

怎样在Apipost中设计出实用又好看的API文档

Apipost一直推荐文档先行的API设计理念,在Apipost中可以添加Markdown格式的文本,用以储备文档和API文档设计。 作为一种轻量级标记语言,Markdown在撰写文档、博客文章、README文件以及网站内容上被广泛使用。 如何在Apipost中设计出漂亮的文…

分享低成本非隔离PWM控制AC-DC开关芯片 YB5011

简介: YB5011系列是一款高性能低成本PWM控制功率开关,适用于离线式小功率降 压型应用场合,外围电路简单、器件个数少。同时产品内置高耐压MOSFET可提高 系统浪涌耐受能力,集成有完备的带自恢复功能的保护功能:VDD欠压保护、逐周期…

Flutter InheritedWidget 共享状态管理

InheritedWidget和React中的context功能类似,可以实现跨组件数据的传递。 定义一个共享数据的InheritedWidget,需要继承自InheritedWidget 这里定义了一个of方法,该方法通过context开始去查找祖先的HYDataWidget(可以查看源码查找…

安防视频监控平台EasyCVR修改参数提示database or disk is full的原因排查

EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等能力。视频监控综合管理平台EasyCVR具备视频汇聚融合能力,平台基于云边端一体化架构,具有强大…

SPDK的块设备抽象层,从一个简单的示例程序讲起

最早的SPDK仅仅是一个NVMe驱动,但现在的SPDK已经不是原来的SPDK了,其功能涵盖了整个存储栈。为了能够实现丰富的功能,SPDK实现了一个块设备抽象层,其功能与Linux内核的块设备层类似,这个块设备抽象层称为BDEV。 块设备抽象层BDEV在整个SPDK栈中的位置如图所示,它位于中间…

Win10 拖动文件从文件夹里复制到桌面时出现黑屏资源管理器重启复制失败

环境: Win10 专业版 联想E14笔记本 问题描述: 在文件移动复制时,从文件夹拖拽复制到桌面时,会卡顿,电脑黑屏闪一下,资源管理器重启,复制失败 解决方案: 1.sfc /scannow&#x…

2023年第四届“华数杯”数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&#xff0…

SpringBoot中ErrorPage(错误页面)的使用--【ErrorPage组件】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤–【思维导图知识范围】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具:必要的知识深层一些的知识 上效果图在Spring Boot里使用ErrorPage还要注意的是 配套资源作业&#xff…

逆波兰表达式求值

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数(运算对象)都可以是一个整数或者另一个表达式。两个…

AI绘画| 迪士尼风格|可爱头像【附Midjourney提示词】

Midjourney案例分享 图片预览 迪士尼风格|可爱头像 高清原图及关键词Prompt已经放在文末网盘,需要的自取 在数字艺术的新时代,人工智能绘画已经迅速崭露头角。作为最先进的技术之一,AI绘画结合了艺术和科学,开启了一…

Vue3 element-plus表单嵌套表格实现动态表单验证

Vue3结合element-plus表单项可以动态添加/删除 部分效果图如下: 另表格有添加和删除按钮,点击提交进行表单验证。 首先data格式必须是对象包裹数组 import { ref, reactive } from vue; import { FormInstance } from element-plus const froms re…