I’ve programmed small 2d RPGs in Java before. They weren’t anything special, but they drew just as much art to the screen as any other RPG would.
I had to use an option for the JVM to make the last one run fast enough while scrolling the screen with the mouse. In particular, I had to use “-Dsun.java2d.d3d=false”. I think what that flag does is use Direct3D for Java2D when it’s set to true. Apparently, Direct3D was too slow for my purposes, but switching to whatever it used instead (probably OpenGL) fixed it.
If I had written the program in C++, that would have been difficult to do. If the graphics routines were all properly encapsulated, it would have been possible to switch. But Java does that for you.
I don’t know precisely what caused the problem, but I haven’t encountered it in the game I’m working on now (not an RPG). I was drawing alot more images to the screen than I really had to, or I wouldn’t have had the problem at all.
A potentially smarter solution would have been to only draw the parts of the screen that need to be updated. When scrolling, I could just shift the image of the last screen over and draw only the new area. Various aspects of the code made this complicated, so I just didn’t bother. Since I could just change that flag anyways, it didn’t matter.
The biggest problem people seem to have is getting their images to be hardware accelerated, but that’s pretty easy once you know what’s going on. There’s lots of topics about this in the forum.
Java can do anything any other programming language can do. It is approximately as powerful as any other modern programming language (personal preferences determine who uses what). The standard library that comes with Java gives you alot to work with. It’s harder to interact directly with the hardware, but I would rather deal with the Java API than worry about all the different possible hardware configurations.