The future of online browser games
Oct 2019
AddictingGames.com Is one of the largest libraries of flash games. Featuring such classics as Clear Vision, Age of War and Fancy Pants, AG has been around for a long time. Many millennials fondly remember playing games on AG during class in middle school. Flash is an integral part of early internet culture. That being said, what will happen to websites like AG after Google Chrome, and other major browsers, completely discontinue flash in 2020?
Java allows you to play online games, chat with people around the world, calculate your mortgage interest, and view images in 3D, just to name a few. Java software for your computer, or the Java Runtime Environment, is also referred to as the Java Runtime, Runtime Environment, Runtime, JRE, Java Virtual Machine, Virtual Machine, Java VM, JVM.
Many have asked the question and I’m here to provide answers!
The truth is that we’ve been hard at work at Addicting Games to assure the future of browser gaming. Sure, most of our games library is currently in Flash, but we’ve been attacking the problem from multiple fronts. How do we intend to
What Is Addicting Games Up To?
Jun 2019
Hello, fans, followers, and friends! There has been some talk lately in the news about the casual gaming industry. Whether it’s one announcement or another about new game streaming services coming out, rumors about the shutdown of other beloved flash gaming sites, or the inevitable fate of Flash finally being revealed. There is a lot of movement going on in the casual gaming world right now. So, you might as well add this announcement to the pile: We are updating with all new games on Thursdays again. As of May 24th, 2019 we have begun updating again, every Wednesday at midnight — or Thursdays for you
What are io games?
Mar 2019
What is an io game? What does io even stand for? Am I an io game? Are you an io game?
Look, definitions are tricky. Maybe it’s just me but I’m kind of an “I am not a number, don’t label me with your labels, man” kind of person. But, categories do serve a function and while they sometimes are too claustrophobic or too laissez-faire, it is safe to say that games in general and io games, in particular, can be neatly defined.
To avoid any confusion before we get started, we should be clear that an io game doesn’t need to have the .io domain at the end of its name. The .io domain is just the country code top-level domain for the British Indian Ocean. Much like how Canada uses .ca or India uses .in. The two first and biggest io games --Agar.io and Slither io-- both used .io as their domain of choice, so, it became the de facto standard for similar games and eventually morphed into the name of the genre.
Active5 years ago
I'm not a game developer or anything, but I know that Java is not very widely used for game development. Java should be fast enough for most games, so where's the catch? I can think of some reasons:
- Lack of game developers with expertice in Java
- Lack of good game development frameworks
- Programmers don't want to accept Java as a games programming language. Most only accept C++ as that?
- No support for game consoles (though the PC market still exists)
It could of course be something else. Could someone who knows the business better than me explain why Java isn't getting momentum when it comes to game development?
We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed.
closed as primarily opinion-based by gbjbaanb, user53019, enderland, user40980, durron597Jul 1 '15 at 13:59
Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.
13 Answers
Several reasons:
- In the old days, you needed 'direct access' for performance and UI. This predates VM languages like Java and C#.
- Most consoles (e.g., 360, PS3) do not have a JVM, so you cannot reuse code from the PC version. It is much easier to compile C++ code to support various devices.
- Most mainstream game engines (e.g., Unreal) have C++ bindings. There are some Java connectors (e.g., for OpenGL) but nothing like it.
- For PC gaming, DirectX doesn't really have strong Java support (if at all).
- Web based games run in JavaScript or Flash. You could write them in Java though using things like GWT.
- The iPhone runs an Objective-C variant.
Java is primarily used in Android games these days, simply because it's the primary language for that platform.
Technical reasons:
- Most of the best 3D game engines are written in C/C++. This is a big deal, since most game developers don't want to compromise on their 3D engine, but nor do they want to write one from scratch. Java has jMonkeyEngine which is open source and actually really good but it still can't yet compete with the Unreal Engine.
- For some very rare situation, there are advantages in getting 'close to the metal' in C or assembly language, specifically for access to special hardware features. This is not so important nowadays, but professional game developers still like to have the option.....
- Java has a garbage collected, managed runtime. 99% of the time this is a huge advantage, it certainly makes coding easier and less error-prone and is one of the big reasons why Java is so popular. However it does cause an occasional latency issue for games as garbage collection cycles can cause noticeable pauses. This is getting to be less of an issue with the newer low-latency JVMs, but is still an issue for graphically intensive games where maintaining high FPS is critical.
Non-technical reasons:
- Professional game development houses are heaviliy invested in C/C++ skills and technologies. This creates a huge amount of inertia.
- The largely irrational perception that Java is slow. Possibly true in the 90s, definitely not true now - you can certainly write a profitable, commercial 3D game with Java (Runescape anyone? Or how about Minecraft? )
- A pretty fair perception that Java is more focused on business applications and the web rather than gaming. This might change with the growth of Mobile and the need for more cross-platform development, but is certainly true at present.
Interestingly there are also some good reasons why game developers should consider Java:
- Portability - as the number of target platforms proliferate, Java becomes more and more attractive with it's pretty much unparalleled ability to create genuinely cross-platform binaries
- Library ecosystem - with the very important exception of 3D game engines, Java has the best range of libraries overall of any platform. Networking, sound, AI, image processing, key/value data stores, you name the topic and there's probably an open-source Java library for it.
- Server side development - Java is a great langauge/platform for the server, and as more games incorporate massively multi-player elements the server side will become more and more important. Java on Linux looks pretty compelling here as a platform.
- The JVM - is probably the best engineered VM execution environment in the World, with fantastic garbage collection, JIT compiler, concurrency support etc. It's only going to get better, and as game developers increaingly start to use dynamic languages within their games they will want the best possible runtime environment.
- Other JVM languages - Java is a solid od workhorse, but the real innovation is happening with the new JVM langauges (Scala, Clojure in particular). These languages get all the advantages of the Java/JVM platform, plus they are extremely powerful modern languages.
Okay, theres a lot of misinformation in this thread.
I know the game business extremely well, having been in it for 25 years. I also know Java in games extremely well having been Sun's Java Game technical evangelist and lecturing Java performance programming expert.
In terms of computational speed, Java beats C++ in many scientific computing benchmarks today. You can write pathological code in either language that performs badly if you want to, but over-all, they are at par and have been for a long time.
In terms of memory usage, Java does have some over-head. HelloWorld is a 4K program in java. But that overhead is pretty meaningless in todays multi GB systems. Finally, Java does have more of a startup time. I would not recommend using Java for short run-time utilities like Unix command line commands. In those cases startup will dominate your performance. In a game however, its fairly insiginficant.
Properly written Java game code does not suffer GC pauses. Just like C/C++ code, it does require some active memory management but not to the level C/C++ does. As long as you keep your memory usage to either long lived objects (persist for an entire level or game) and very short lived objects (vectors and such, passed around and quickly destroyed after calculation) gc should not be a visible issue.
In terms of direct memory access, Java has had that for a LONG time; since Java 1.4 in the form of Native Direct Byte Buffers. Bit twiddling in Java can be slightly annoying due to the lack of unsigned integer types but the work rounds are all well known and not terribly onerous.
While its true Java has never had a Direct3D binding, thats because Java technologies strive for portability. It has TWO OpenGL bindings (JOGL and LWJGL) and OpenAL binding (JOAL) and a portable input binding (JInput) that binds under the hood to DirectInput on Windows, HID Manager on OSX, and a Linux binding (I forget which).
Its true that no complete game engines have featured Java the way, say Unity, has featured C# and that is a weakness in the independent space. On the other hand, there were two good Scenegraph level APIS that were totally platform portable across Windows, OSX and Linux. Both written by Josh Slack, the first was called JMonkey engine and the second Ardor3D.
The top poster is correct that the two biggest things that held Java back in game development were prejudice and portability. The latter was the biggest issue. Although you could write a Java game and ship it on Windows, OSX and Linux, there was never a console VM. This was due to total ineptitude in Sun middle management. The few of us working on Java in games actually had deals with Sony no less then 3 times to get a VM on a Playstation and all 3 times Sun middle management killed it.
While Sun flirted with client technologies, the fact of the matter is that Sun management never got consumer products. Thats why Java as a client language from Sun never succeeded in any form, and why it took Google and Dalvik (the Android java-like VM) to make Java a platform success anywhere.
And thats why I code games in C# today. Because Mono went where Sun management refused to.
Java is great for business logic, servers, and platform independent code that has to run reliably. There are several factors why Java isn't often used in games:
- bounds checking & other safety mechanisms (marginal performance difference these days)
- having to convert between C++ data structures and Java data structures (can't just copy memory between buffers)
- many of the books and tutorials follow the crowd so it is hard to find non-C++ game dev information
- the core graphics libraries (DirectX and OpenGL) and many off-the-shelf engines are C/C++ based
- many games try to run as fast as possible so they can add more visually appealing features
It is not easy to work with C++ libraries from bytecode languages like Java (writing a JNI layer) and .net (lots of marshalling/unmarshalling, api/structure attributes). So it adds quite a bit of work for little benefit.
A side note: some game servers use Java.
Similar post here: https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java
Java isn't fast enough for most game development. It's far slower than using C++/Assembly, which is the standard. It's the same reason more game development isn't done using C# or VB. Game developers need and plan every last clock cycle that they can get their hands on for things like physics calculations, AI logic, and environment interactions.
For simpler games, Java could be used quite effectively. If you want to create a Tetris clone or Bejeweled, or something else of that level of detail, then Java would work fine. But Java can't possibly create games like Halo, Medal of Honor, Command & Conquer, and so forth and make it playable. At least as it exists nowadays.
And the reasons you list in your question are valid as well. Except, I think, for the lack of game developers with Java expertise. Many games on phones and other portable devices are written in Java (including most Android games), and some of the games are quite excellent. So I think there is a decent, and growing, base of game developers with Java knowledge.
The thought is changing on the ability to use these higher level languages for some of the more advanced games. For instance, one of my favorite games, Auran's Train Simulator, is written with large portions in C#, and it works quite well. So the base is growing and will continue to evolve.
Modern games are all about 3D graphics happening in special purpose hardware.
Even back in 2002, Jacob Marner found in his report 'Evaluating Java for Game Development' that Java was quite usable for games, except for the most performance dependent parts, and due to the robustness of the language and the underlying JVM that it was cheaper to do it this way.
It is my personal opinion that with the progress that has happened since, especially in 3D-graphics, and with the excellent bindings to OpenGL et al, that this disadvantage is much less pronounced these days.
Hence the problem must be elsewhere. A likely reason is the size of the Java runtime (which is much less an issue these days with multi-DVD games), and another the inertia of existing code. It is notoriously brittle to start working with native code in Java. A third reason is what the star developers doing the games are familiar with. A fourth is whether Java is at all available on the platform.
One thing is certain though - most games are moving into being scriptable instead of having it all burned in C code from the start, and you want the best runtime underneath your scripting language. These days this essentially means either the CLR or the JVM.
Game developers like to be close to the metal and often will write their tight inner loops in assembly. Java doesn't offer the same level of possible performance, both in terms of consistent speed or memory use (running a JIT takes its toll).
I think the limiting factor for most people is the (lack of) availability of good game engines. To get very far, we need to look at why those aren't available.
I would look at that from the other direction for a moment. Developing a game engine (for example) is a lot of work. Who would benefit enough from developing one to invest the time and effort to do so?
Most of the obvious candidates for framework-like development in/for Java (e.g., IBM, Oracle) seem to have zero interest in games. The obvious candidates for game development (e.g., Id, EA) seem to have almost equally little interest in Java.
Nearly the only candidate I can think of that seems at all reasonable would be Google. The primary development language for the Android is Java, and encouraging game development for Android could provide a real advantage for the platform.
As far as I know, they haven't done so (yet?) though, which leaves some pretty severe limits for almost anybody else. Without little in the way of modern, high-performance game engines to use development on Java means quite a bit of extra work, with (what looks to me like) little prospect for producing a lot of benefit in return for that extra work.
The question is on par to asking something in the lines of:
What is better to power your car, a boat engine or jet engine.
It comes down to scalability, bug avoidance, speed, memory signature, modularity and a whole host of things. The question should not be be about what is better as an industry standard, the question should be 'what is better for me' as in what you know or how well you know it. If it does the job then it does the job, if you can actually sell the idea then it works and who knows you might even bend a few spoons.
Java wasn't made with game development in mind, Java was made to be a language 'for the web'.
As for game development, Sun didn't really support Java as a game development language as Microsoft backed C#.
I think the lack of compelling game development frameworks is what really killed Java in this aspect.
It's easier to glue C more directly to brand new unconventional hardware and drivers. The sooner and closer a game programmer can get to the hardware, the better they can outspec competing games. Later game programmers just stick with the same methodology and tools as those prior proven games.
For games where optimizing to the latest hardware is less important, such as casual cell phone games, using C in this way is less important than is Java's greater portability.
For some people reason has nothing to do with speed, libraries, or availability. It is simply because of the language itself. Some people simply do not like Java the language. Other people would rather use their favorite programming language instead of using Java to make games.
It could of course be something else. Could someone who knows the business better than me explain why Java isn't getting momentum when it comes to game development?
It's an interpret language, ie slow. You're dealing with graphic and graphic card which is hardware. What's a good language to deal with hardware? Well C++, it's pretty low, and you deal with pointers and whatever.
Download 3d Games For Pc
If you want to pump out crazy graphic like crysis and whatever you're not going to do Java for it.
Not only that, Oracle owns Java, the thought that a company can sue you doesn't bold well. Especially when you want to build your own interpretor for JAVA to target gaming without getting sue due to fragmentation FUD.