Does really game development on Java suck? Why are we still here?

Sorry guys. I don’t want to offend anybody.

But it seems that right now we are weaker than other engines :’(
I’ve made a VERY thorough study. I visited all the sites (800+ of them) that are mentioned here on JGo by users. Half of them dead. Only some tiny amount makes me really interested. I’ve looked through the showcase (though most games I have seen on sites). I’ve seen the featured section. So I would say I was pretty much aware about 90% of everything in games written in java. (The only thing I haven’t already done is looking for ALL Java4k entries and all Ludum Dare entries (I did for the best)).
ON THE CONTRARY: I’ve looked just through one single IGF 2012 entries. 550 games is not much. BUT. A considerable amount is REALLY AWESOME. 50-100 were very interesting, technically perfect, visually brilliant with a breath-taking atmosphere. People write games on Flash, Unity, Game Maker, Source, Unreal etc engines. They do it on C++ and C#. They do it for XBOX and Ipad. AND ONLY SELDOM they do it on Java. I have recognised very little amount of Java games on IGF (if any).

So, returning to the original question. Does really game development on Java suck? Why are we still here?

Those games might be breath taking, but look at them again. What made them so awesome? There is only 1 answer: gameplay and graphics. Since most of us are poor indie gamers, we don’t have access to professional artists who can make our games as amazing.

Language has nothing to do with the outcome. Code is easy and cheap to make. Art is not :wink:

Java as a language is a poor fit for game development. It doesn’t help that it is statically typed, which leads to a lot of boilerplate code, especially when you throw generics into the mix.

Java as a platform still suffers from the ‘java is slow’ mantra. It will probably never get rid of it. Even Minecraft suffers from it, as people keep wondering why Notch didn’t code it in a ‘real’ language.

Java as a deployment tool is horrible. First applets were broken for over a decade, then webstart came along, turning out to be even worse. The only way to deploy reliably is to ship your own JVM. Android is surpringly the best deployment platform for java. It is too bad that the CPUs in mobile devices are slow and the interpreter makes performance even worse.

As a result of all of this, there is barely a toolchain for java game developement. This limits the productivity of developers coding a game in java, resulting in the majority being sub-par games.

[quote]Flash, Unity, Game Maker, Source, Unreal etc engines.
[/quote]
They are all specific platforms for creating interactive Media. (Apart from Flash, all are fully specialized on Gamecreation)
Java is a general Language. In pure C/C++ approaches you will also find many sub-par games. But also many great ones.

Java sets limits wich C/C++ can overcome much easier. (The need for a fitting virtual Machine beeing the main point)
Thus getting Javagames deployed has an inherent risk wich large studios would not take.
On Android this is not a problem, as the VM is a fixed part of the package.

In then End, its just a typical set of small Projects mainly by Hobby Developers. Thus the quality cant be expected to reach
the level of prominent c/C++ games.

And Art-centered Projects are done/cooperated by Artists who will naturally prefer a Gameengine such as Unity.

When I told two fellow developers about writing a game in Java, first question from both was: “Really, is it fast enough ?”
Before even getting into details like the kind of game or any other sort of details.
That tells a lot. Myths do survive no matter what.

If Java hadn’t been the language of choice for most business software I’m making a living from, I would’ve probably looked into C# or C++, although I think the latter is a horrible language.

It sucks that you can’t do fancy graphic effects with Java2D for lighting for example. Even more when I see a framerate of 3000-4000 fps for the basic graphic rendering.

We have the year 2012 and there is still no usable HTML renderer component on board.

But you have to do a fair comparison.
Comparing Java with the Unreal Engine is like apples and oranges. Same for Flash. Applets failed. Bundling Java failed.
Apple has its very own magnetic attraction.
Java Community Process.
Early look & feels were ugly to the bone.
Badly written applications built up the myth of slowness.
Many reasons.

All the other successful languages named are also statically typed. Certainly javascript/actionscript counts, given all the “casual games” using it, but the only other “dynamic” language I can think of that’s seen a significant number of games targeting it is python, and the installed base for those games is dwarfed even by java.

I think applets were a boat anchor for a long time, and while I don’t think webstart is worse, it’s certainly half-assed. The toolchain for java is fine – the feature set in the average java IDE is something C++ devs have to shell out hundreds to get if it’s even available at all.

Finally there’s the cultural aspects, such as the “java is slow” canard, java’s association with “enterprisey” apps, and so on. One real concern many game devs have is the ease with which their games can be decompiled from bytecode.

Why are we still here? We like the java language I guess. In my case, I like the languages and libraries for the JVM like Scala and Akka, and hope someday to write a decent game with them instead of enterprisey apps (so count me as one of the “hangers on” rather than a game dev)

[quote]We have the year 2012 and there is still no usable HTML renderer component on board.
[/quote]
you missed javafx2

The maximal speed from c++ is higher than java but thats just useless in reality. Thats also true for assembler over c++ but nobody use assembler. The key point is productivity. The speed/functianality that you can get with limited time/ressource and there imho java win.

I think the above hits the nail on the head. There is nothing wrong with the language itself and it has a solid tool chain for writing code however the tools aimed at creating games and client side distribution are indeed pretty weak.

What little game tools we do have, have been scrapped together by volunteers and the community in their free time and hence are of that quality.

Flash, Unity, Game Maker, Source, Unreal etc engines mentioned above all have dedicated companies behind them that are throwing serious resources at pushing those platforms forward, i’m pretty sure if there was a similar company doing that for Java games, there would be no problem.

Can’t really blame Sun/Oracle here as its is not really their domain or area of focus. Surprisingly though they wasted a ton of resources on the dead end that is JavaFX, which if had been aimed at pure Java and game development would have gone a long way.

you missed javafx2
[/quote]
So did everybody not running Windows. Yeah yeah, they’re working on it, blah blah. Irrelevant to people trying to do a real-world deployment.

Why I use Java using my AllBinary Platform:

Speed of development for a large number of platforms.

I support Android, J2ME/BlackBerry, J2SE, HTML5, and could support Native and Flash.

So the code base is almost always really Assembly and C/C++ while using Java anyways.

In short your full of it if you think UDK/Unity can run on early Android, or many PCs without a good video card.
They can’t run on 1 billion J2ME devices either.
I actually have more points, but I don’t need more.

Creating games for android is really good ecxuse to stick with Java. Now that libGDX support webgl that gives really slick way to create web games and applet is allways fallback possibility if webgl is not avaible. Is there any better way support both these platforms with same code base?

First, Java isn’t an “engine”, it’s a platform. You have engines (like Unreal, Torque, Ogre, etc) on top of the language/platform.

In terms of adoption among the indie dev community, you’re right: C++ is by far number one, and Objective-C and C# are the second tier up and comers. There are a small number of Java games, but a few awesome ones: I love Wakfu and of course Minecraft is big.

The biggest problem with Java is the runtime support. Java only runs natively on Android and runs on workstation computers (Windows/Mac/Linux) with this JRE thing that end users can’t stand. It doesn’t run on consoles, it doesn’t run on iOS smartphones/tablets, and it can’t run on things like Google native client (NaCl). This is fixable: Either Oracle or one of the developers doing an alternate JVM should make a path for JVM apps to run on these popular platforms (and ideally make it easier to hide the JRE piece like with what Wakfu or IntelliJ do with emdedded JREs). On the C# side, Microsoft officially supports C# apps on Windows and on Xbox. But the Mono group really took things further and made paths for C# development on Mac, iOS, Android, Google NaCL, and PlayStation Vita. That’s what game developers really want.

Why stick around? What is worth keeping about Java? Three big reasons: The tools. The flexibility. The community.

What other platform plays host to such a vibrant language community? Scala, Clojure, and Fantom are all on .NET as well, but only the Java community really treats them like first class citizens. Kotlin is also an awesome multi-VM language (JVM, LLVM, JavaScript). JetBrains tries to make IDEs for everything, but their Java IDE is the most embraced and the best. Where did Ant, Maven, and Gradle all spring from? Where is the Hadoop and big data community centralized on? What other platform has such amazing multiple IDEs?

There are a ton of reasons to stick with JVM, even for games. There are also big problems with C++, Objective C, and C#. As musch as I appreciate C++, it is in the dark ages in terms of language design (so is Obj-C). C# is completely under the thumb of Microsoft. If there is an open source tool that doesn’t get full Microsoft support (like jQuery did where all the salaried evangelists recommend it and post tips about it, etc), it’s not treated as a real option. With Java, everyone hates Oracle, but at least the community is open in the sense that libraries, languages, frameworks, and IDEs really sink or swim based on merit rather than the approval of some central company.

The old “Java is slow”… We all realize this isn’t true based on benchmarks, but even the user perception isn’t important. When users play Wakfu, there are no performance problems, they don’t realize or care that it was written in Java, and that’s how they like it (same with Bastion and C#). Users can’t stand the normal JRE that constantly nags them about updates at inopportune times.

Also, Java the language is probably behind the times, but if you are the type who can appreciate advanced languages, Scala is ahead of the pack, and is typically a drop in replacement.

JavaFX 2, is awesome for traditional desktop business GUI apps, like Microsoft WPF, but I don’t think it makes any sense for games at all.

Sadly, this is blatently false: there isn’t a sharp divide between users and (aspiring) developers.
The ‘java is slow’ mantra limits the inflow of users (AKA talent) in the java developer community.
The ‘nagging java update’ annoys people to no end, also strengthening the uninformed ‘java sucks’ mentality, limiting the inflow of those ‘users’ to exploring the java platform.

Alright, I’ll agree that the perception is a definite issue among potential developers.

The nagging Java update and even requiring users to have a system level JRE installed is definitely a huge deal. That’s very fixable though. There are solutions now, like embedding an IDE like Wakfu does, but there should be an even easier way to do that.

No Java on Playstation, XBox, or iOS. That’s the long and the short of it.

Cas :slight_smile:

How much do you give me to prove you wrong for XBox 360 and IOS using Avian?

And it has been worse in my case, to have to have learn C and assembler because there’s no way put java into a microchip (nanoVM also failed).

I remember 3 years ago in my university, nobody did give shit to java (except myself ofc). Then suddenly android became trend of smartphone, promising good future in software bussiness and development. Now everybody throws their visual studio and DLs eclipse like hell.

guy, we are talking about publishing a game commercially like normal.
of course you probably can (theoretically) port the jvm to a console as part of a homebrew project, with a hacked console - but nobody buys homebrew games for hacked consoles obviously

I’m wondering if one of the biggest issues with Java performance is the lack of real-time guarantees. It’s not that Java is so much slower (if at all, if you are counting throughput), but that it is hard to deal with the timing irregularities that come from the variability in thread switching and garbage collection and the like. An article I was reading on “Real Time Audio” in Java brought up these challenges, and certainly they apply to fast, smooth frame rates for graphics as well as audio performance.

I think contests that emphasize “productivity” over “polish” contribute to the perception of Java. Where are contests that promote things like depth and atmosphere and originality? Instead we have “program it in 48 hours” or “program it in 4k”. Maybe it makes sense to emphasize Java productivity strengths, if that is what its programmers are enthused by, and why they are here.

I’m here because I can build from scratch. Chances are a game engine isn’t going to have all the parts or capabilities that I want to use. Java gives me the opportunity to do original work, and post it and have most Users run it.