@mike_bike_kite
[quote]I’m not sure why this should improve things but I’ve done it and it works fine. I’ve yet to try doing it all in just one call but I’ll try this later. I should of kept records of frame rates etc so I could see what improved things and what doesn’t.
[/quote]
Less draw calls the better. I don’t have any specific implementation details behind the scenes with where accelerated Java2D is at these days, but I’d gather the fillPolygon method is generally expensive in regard to setting up the data and drawing (via Direct3D, etc.). Doing it once versus a 100 or 1000 times should make a difference.
You are correct to measure and only accept a change if things improve. Just be careful what you are measuring at times as micro-benchmarks are not always accurate.
[quote]I tried to call drawPolyLine but ran into a compiler error I didn’t understand (it was late though)
[/quote]
No capital L… drawPolyline – http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html#drawPolyline(int[],%20int[],%20int)
[quote]So it compiled fine but blew up at run time in main() where I call TinySound.init(); If I can get it to work will TinySound offer volume and panning?
[/quote]
You need to include it on the classpath when using javac and when running the main jar file. Not the system classpath ala %CLASSPATH%, but the runtime classpath when invoking javac and java. It’s the command line option -cp or -classpath. If you have the tinysound.jar in the same directory as the base of your source code you might be able to use:
javac -cp ./tinysound.jar neptune.java
java -cp ./tinysound.jar -jar neptune.jar
It might need to be:
java -cp ./neptune.jar;./tinysound.jar neptune
BTW instead of using javac perhaps use an IDE. My long time favorite is IntelliJ Idea and there is a free community edition: https://www.jetbrains.com/idea/download/
I know your code is all in a single file (we can talk about that later… ;P), but always compiling and running by command line is no fun… There are so many useful aspects of using an IDE for development especially when we get to refactoring your code… 
As far as the peanut gallery at JGO goes here re: volatile images I don’t think other folks were looking at the decompiled source code, but will give opinions… RE: here is the line in your init method…
this.og = this.OffscreenImage.getGraphics();
right after you create a BufferedImage for OffscreenImage. More or less the general advice you get around JGO is often “defensive” in nature. Last time I heavily worked with Java2D was from '02 to '08 and back then the VolatileImage API was the way to go. It’s not clear at which point, re: JDK 6/7/8, BufferedImages get accelerated more or what exactly is the promotion strategy or how translucent images are handled. Using VolatileImage API was very important for translucent images back in the day. If you are trying to support older computers with older versions of Java even Java 5 (1.5) then VolatileImages may be a win. Again measure. The code needed to load and verify VolatileImages is in the tutorial I linked to previously. It’s going to add a slightly finicky aspect to your render loop, but one worth measuring especially on any older machines you are testing on…
[quote]I don’t understand why bufferedImages are better or what a volatile Image is. I’m afraid there were too many acronyms and not enough simple words for me to make sense of things. I’m happy to try both but I’d prefer to know why I’m doing it. Is the idea to use BufferedImage’s for the sprites and VolatileImage’s for the sea and sky?
[/quote]
BufferedImages are better in general because there is less hand holding involved as a developer. By creating a volatile image you are explicitly creating an accelerated image on the GPU that isn’t managed. On some platforms like Windows this image can get stale and you need to reload it; all of this is described in the tutorial I linked to.