浅谈Java游戏引擎在智能机领域的发展

1.为什么专注于Java而不是C/C++

一、首先,Java人讨厌C/C++

对任何一名忠实的Javaer来说,我们都不会喜欢复杂的C++代码结构,都不会喜欢解决那些因繁琐的指针、引用所衍生的神奇Memory问题,更难以接受代码和资源稍微多些,重新编译一次工程就要耗费数分钟乃至数小时的恐怖煎熬。

尽管Java语法脱胎于C/C++,且现阶段在运行上也离不开C/C++构建的JVM。但我们却真的不喜欢直接用C/C++编程,否则,也不会选择这条与C相似,却不尽相同的道路。

坦率地说,绝大多数Java人对于C/C++有着本能般的排斥,就连JNI开发方式,我们也会尽量少的使用。

强迫我们使用C/C++会让我们非常痛苦,强迫我们在非必要的场合使用C/C++简直让我们想去犯罪

比如,小弟在Libgdx论坛“潜伏”时,就曾看到有Javaer对某C系游戏引擎大声疾呼:I hate it

小弟在此敬告所有专职搞C的女同志:多年后,我若搞Java,你若玩C/C++, 让你闺女还有你在路上注意点(╯^╰)。

二、其次,C/C++在游戏开发上也有其局限性

虽然从运行效率上看,C系语言编写的游戏会比Java语言编写的游戏运行效率为高。然而,这却是以单纯C/C++开发的低兼容性,高难度,漫长开发周期为代价的。

可能有人会说:别扯了,张嘴你丫就胡说!C/C++不是能“一次编写,到处编译”吗?怎么会扯到兼容性问题上呢?

——拜托,有脑子的话,请让它稍微运动一下好吗?

如果C++真的能“一次编写,到处编译”,当年Sun为又凭什么让Java一举成名,最高市值达到2100亿美金的巅峰?如果C++真的能“一次编写,到处编译”,那苹果如今又为什么要搞LLVM这个“特殊的虚拟机”出来(虽然对外仅仅是“资助”关系),补足IOS系统呢?

关键原因就在于,单纯C/C++开发对系统底层的依赖实在太高,太高了。以至于,只要底层稍有变动,单纯的C/C++项目就随时可能瘫痪死掉。

远的不提,就说当初Android 4.1升级那么一次,顷刻便干躺下一片C/C++游戏引擎,他们的作者一直要耗到数周乃至数月后升级引擎代码才勉强解决了兼容问题。然而,基于DalvikJava应用们,则普遍不存在这种困扰,甚至对此事根本毫无觉察。

对Java来说,无论系统底层如何修改,只要上层虚拟机的API不换,应用都可以准确无误的运行下去。退一万步讲,即使部分后台源码被更换了,对我们而言通常也就是换个类,甚至换个函数名的事。然后C/C++却不一样,C/C++在开发上牵一发而动全身,一个指针的错误使用,都可能让你的程序在莫名其妙的时刻莫名其妙的崩掉。更何况是不知牵扯到何处的底层变动了,将遭遇到的种种问题,远比Java用户所能遭遇到的问题要多得多。

或者有人会说,我用的C/C++引擎很高级,是源自YYYYZZZZ,或者山寨自OOOOXXXX,他们有数十人的专业团队,有上千万的资金支持,所有可能的问题都已经被他们解决了,用他们的C/C++引擎——绝对不存在任何兼容性问题。

那么,小弟只反问您一句,就一句话。

就算他们能做到,您确信,您也可以做到吗???

事实上,即便你所使用的C/C++引擎本身没有任何兼容问题,但作为C/C++引擎用户的你,在C/C++开发中,也能做到绝对不产生兼容性问题吗? 

要知道,用C++开发时,只要稍不留神,手轻轻那么一滑,就可能写出在这个平台能用,那个平台不行的代码来,而你书写的代码量越大,这种可能性也就变得越高。

小弟愚见,在这世上号称可以多平台运行的语言中,有两种最为悲剧,一者为C/C++,一者为JavaScpirt

让这两个家伙跨平台运行的代价,在写过一定数量的跨平台代码后恐怕都会印象颇深吧?虽然他们在最终的最终,确实可以实现所谓的“跨平台运行”,但这中间的艰辛困苦,又有几人明了?真是“光看见贼吃肉,没看见贼挨打”啊!

仔细说来,为什么C/C++游戏引擎大多会青睐于LuaAngelScript这些脚本引擎?为什么即使C/C++的功能已经十分完善,还要将它们引入其中,就像生怕你们使用C/C++而非脚本来进行开发一样呢?

这里的潜台词恐怕是“大哥,大姐们,兄弟好不容易才搞定这个C/C++引擎支持多平台运行,你们玩玩脚本就好,可千万别改我的C/C++代码啊!千万别改!你们一改,一改,就该改崩了~”

所以,即使你代码写的再好,只要使用C/C++开发,一旦所在平台底层代码有了变动,就绝对逃不出“一次编写,到处编译,平台升级,编译失败,重新编写,重新编译,平台又改,循环重来……”的变态连锁,这无疑是其低兼容性的体现。

总之水很深,不提也罢(-____-)。

再者,C/C++编译之耗时大家有目共度,而且代码越多耗时越大,对于代码量小的简单项目还好说,您大可以做会眼保健操什么的等待它结束。而一旦处理代码和资源都较多的中等以上规模项目(比如搞个怪物猎人4之类),您又偏偏喜欢按下【重新编译】而非【编译】按钮。那么,您真的可以扭头回家,等明天再来看有啥编译结果吧(结果第二天一看,一万多个编译错误,十几万个警告之类(° ?°)~)

小弟经常在想,如果Windows78是某个人单独负责的项目,而他又将所有开发资源都引入一个Project中,那么他每次按下重新编译,是不是公司都会给他放一次大假呢?\(╯-╰)/

由此可见,C/C++作为游戏开发语言,远非大家想象中那么十全十美。

三、最后,脚本语言才是游戏开发的王道,而Java本身就是很棒的脚本

通过前文的论述,大家可以发现,即便在今天,大多数C/C++开发的游戏引擎若没有像lua这类脚本引擎相配合,也很难制作出多么复杂的游戏来。

也正因为有了LuaAngelScript之类的脚本引擎,才让C/C++的游戏开发周期由【数年】缩短为【数月】,才有效减少了

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 41
    评论
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值