我想制作一个基于多人浏览器的游戏。使用小程序的好处是,我可以使客户端和服务器使用相同的语言(java / closure / scala / etc)。我知道这里有html5和javascript,但是服务器端的javascript还不如jvm平台成熟,并且浏览器支持仍然不稳定。
Applet似乎并未得到广泛使用(Runescape除外),但是是否有不适合使用Applet的原因,还是仅仅是因为他们在婴儿期就建立了不良的声誉?
我想制作一个基于多人浏览器的游戏。使用小程序的好处是,我可以使客户端和服务器使用相同的语言(java / closure / scala / etc)。我知道这里有html5和javascript,但是服务器端的javascript还不如jvm平台成熟,并且浏览器支持仍然不稳定。
Applet似乎并未得到广泛使用(Runescape除外),但是是否有不适合使用Applet的原因,还是仅仅是因为他们在婴儿期就建立了不良的声誉?
Answers:
如RuneScape和Minecraft以及其他较小的Java applet游戏所示,它们显然并不适合这样做。还有用于硬件加速3D图形的库(LWJGL,JOGL)。它不是游戏开发社区中流行的语言。
不过,您必须考虑支持的平台。Windows和Linux具有出色的Java插件,Mac具有不错的插件(以我的经验,只能在Safari上全速运行),但是很显然,iPad和Google Chrome OS等平台将完全被遗弃,因为它们没有,并且可能不会曾经有过Java VM。
我使用Java编写游戏,并且使用C ++编写游戏,并且发现Java很好,只要您始终牢记Java的优缺点是什么。对我来说,Java编程的两个主要优点是开发速度和可部署性/可移植性。编译时间比VC ++快得多(尚不能说XCode或Clang),这意味着我可以更快地解决问题。另外,由于Eclipse不断地进行编译,因此我会减少打字错误类型的错误。我从未写过可以在其他系统或编译器上“正常工作”的C ++代码。在Java中,这是标准。
另一方面,Java有一些主要缺点。效率通常被认为是不使用Java的原因,但是我发现只要您以某种方式进行编码,Java就能表现良好。问题是,您必须采用某种特定的编码方式,这与许多Java专家认为好的设计背道而驰。
Java的核心是“垃圾收集器”,它是内存管理系统。在编写高效代码时,您要避免以任何一种语言在每个帧中进行动态分配,这在Java中尤其如此。如果由于草率的更新而关闭了垃圾收集器,那么您就可以再接再厉的平稳帧速率了。其次(最烦人的是)Java不支持第一类用户数据类型。Java中的每个用户数据类型实质上都是作为指向分配在堆上的类的指针实例化的。这对高速缓存并发性很糟糕,因为您不能拥有Vector3对象数组之类的东西,而不能让它们在内存中并发-您可以拥有Vector3指针数组,但那根本不是一回事。通常,必须将偏移量改为使用原始类型的大型数组。
网页游戏的Java小程序没有问题。我写了一个开源的roguelike游戏(用Java Tyrant),它可以作为小程序很好地工作。
根据我的经验,Java有一些重要的优点:
出色的可移植性-鉴于Tyrant的复杂性,我获得了完全相同的编译代码以在Windows,Mac和Linux上良好运行,这令人印象深刻。
您不必担心浏览器的怪癖。
稍微聪明一点,您就可以使同一代码既可以作为小程序运行,也可以作为独立的桌面应用程序运行
假设使用现代JVM,性能会很好。
Java的所有常见优点,包括大量的开放源代码库/ API等。
请注意以下几点:
如果要执行诸如在本地文件系统上存储数据或访问本机库之类的操作,则需要签署applet /获得特权。这可能是某些用户的障碍。
启动时间往往比Flash或JavaScript慢一些。另一方面,一旦JVM启动并运行,性能就会更好。
Java是一种垃圾收集语言,因此有时确实会有非常小的GC暂停。对于休闲/角色扮演/策略游戏而言,这并不是一个真正的问题,但是对于高性能3D FPS标题来说,这可能是一个问题,在这种情况下,您试图保持恒定的无抖动120 FP帧速率……
如果您打算使该游戏成为免费软件,或者准备自己处理所有赚钱的事情,那么Java很好。但是,它没有像Flash这样的既定的,广泛分布的游戏赞助模式,因此赚钱会有些困难。