I've start out learning how to develop video games using Java recently, and I've already put together something very basic, but I wanted input from you more experienced folk on how you think is the best way I should continue.

Things I think you should know:

(1) I studied Java in college, so I have a background in Java fundamentals. However, I have only used it sporadically since I started working.

(2) I've already come up with something very basic: a 150-line piece of code that makes a red circle move across a windowed display using a gamepad. It's totally pointless, but it's a start.

(3) I used LWGJL, JInput for handling controls, and Slick-Util for openGL loading/rendering.

Off the top of my head, I was thinking of learning how to manage a tiled map and then go on to read up on 2D Physics... collision detection... axis-aligned bounding box... that sort of stuff.

But I'm creating this thread since I want advice on what my plan of action should be. Should creating tile-based maps and 2D physics really be next on my agenda? Or should I be looking at something else first?

If you've never finished a 'game' (or something like it), then you shouldn't that much studying.

The red circle in your windowed canvas was a very good start. Go on from there, do simple image loading / drawing, then start doing some AABB-collision checks with collision response afterwards, and finally create some simple platformer without ladders, without slopes, without anything like that.You would then move on to loading maps from simple text files, where each character represents a tile type, then you'd go with creating a menu GUI for your game.[...]

Your choice of LWJGL and JInput was very good. You should probably take a look at LibGDX, but you could write plain LWJGL too, of course.

TL;Dr: Don't do so much planning, just start to write. And of course: Have fun!

If you want to stick to LWJGL, your focus should not be to make a game, but instead to learn how graphics programming works. Things like shaders, matrix math, meshes, etc. If you want to learn game programming like physics, collision, tiled maps, etc. you should use a library that handles all the boilerplate for you, like LibGDX.

The red circle in your windowed canvas was a very good start. Go on from there, do simple image loading / drawing, then start doing some AABB-collision checks with collision response afterwards, and finally create some simple platformer without ladders, without slopes, without anything like that.You would then move on to loading maps from simple text files, where each character represents a tile type, then you'd go with creating a menu GUI for your game.[...]

Great, this is just what I had in mind: maps from tiles and AABB-collision checks. Exactly that. Good to see someone giving it a nod, thanks.

TL;Dr: Don't do so much planning, just start to write. And of course: Have fun!

What an intriguing piece of advice! In almost most things, experts would say that planning ahead and having some sort of outline/plan/guide is most beneficial. It's both odd yet refreshing to hear this

If you want to stick to LWJGL, your focus should not be to make a game, but instead to learn how graphics programming works. Things like shaders, matrix math, meshes, etc. If you want to learn game programming like physics, collision, tiled maps, etc. you should use a library that handles all the boilerplate for you, like LibGDX.

Very interesting. Thanks to both of you, I'll definitely check out LibGDX before continuing on.

LibGDX has its own set of input bindings for different platforms (iOS, desktop, Ouya, etc).

Slick-Util is old news, and uses deprecated OpenGL. A more modern alternative would use shaders, and may look like this. It's very easy to write your own texture loaders. (But, of course, even easier to work with textures in LibGDX.)

LWJGL isn't necessary unless you want to go "low level" for some reason, and spend many months basically re-writing what LibGDX already provides for you.

TL;Dr: Don't do so much planning, just start to write. And of course: Have fun!

What an intriguing piece of advice! In almost most things, experts would say that planning ahead and having some sort of outline/plan/guide is most beneficial. It's both odd yet refreshing to hear this

They just mean, you need to finish a game or something similar on each level of your abilities on your learning curve.

The biggest problem for people creating games here is that they either think too big (ala "My first project will be a MMORPG with Crysis like graphics") or they get lost in details (ala "I want to do a top-down scroller... but with 3D background... so need procedual generated terrain... but with dynamic lighting ...so need Shaders... but want Caves... so need Voxels... etc.)

So it is most important, that you finish something with your current abilities before you go on.

Otherwise you either spend all your time on some highly complicated and sophisticated part of your (never-existing) game or you loose interest alltogether, because you never reach your goals.

(...) experts would say that planning ahead and having some sort of outline/plan/guide is most beneficial.

Yeah, experts would plan ahead based on their expertise, but if you are just in the beginning of building it up, you can only plan ahead to your horizon - you can't see any further. But the nice thing is, once you reach your that limit, it will have moved (by approx. 4.8km ) revealing a completely new world to explore...

common starting points are arcade classics like space invaders, pac man or breakout, but you are not limited to them. the important bit is too choose something you can turn into a finished - and hopefully fun - game without learning too much new stuff.

so ideally only once you created a finished (mini-)game for every feature or aspect of your planned game, you should start working on it seriously.

This is made with libgdx and jinput (for gamepad handling, which I was using to control the ball).

Hardest concept I had to grasp up to this point was translating and converting between the physics World and the game screen... you know, the pixels-to-meters/meters-to-pixels conversion that Box2D requires for it to simulate properly... that made my head hurt a bit.

Another question regarding libgdx: Do I have to develop for the different platforms (android,html5)? Because I just set out to make a gamepad/keyboard/mouse controlled 2D platformer, and apparently libgdx requires you to setup projects for the other platforms as well... or at least Android, I think.

My biggest qualm about this is that I don't know how my game will translate to mobile devices and how to implement that and how to handle the differences in coding due to the different gaming platforms/mediums.

If you want to stick to LWJGL, your focus should not be to make a game, but instead to learn how graphics programming works. Things like shaders, matrix math, meshes, etc. If you want to learn game programming like physics, collision, tiled maps, etc. you should use a library that handles all the boilerplate for you, like LibGDX.

I don't think I've seen this written quite as definitively before, there is usually lengthy discussions and debating making it difficult, for a newbie, to see where the focus is in each API. As a result, I decided months ago to pick up LWJGL and slick for making 2D games (I saw libgdx as the API for android...), even though I've barely touched anything in LWJGL to date! I'm now thinking that I should be making the switch to libgdx, as I could be saving myself a lot of time.

LWJGL and LibGDX can both provide you with a framework to make games. The difference is that LWJGL is "low level" -- i.e. giving you only a wrapper around desktop OpenGL, some input, and a window. LibGDX is "high level" in that it integrates with game development tools like Tiled map editor, Spine 2D skeletal animator, Particle Editors, TexturePacker, Box2D physics, dynamic lighting, etc. It also includes image/audio decoding, a 2D scene graph, themable GUI toolkit, advanced vector/matrix utilities, shader and vertex format utilities, etc.

In short: if you want to make a game, LibGDX will save you a lot of time and probably give you better tools than anything you'd be able to write yourself.

Keep in mind, since LibGDX can also be used as a "low level" OpenGL ES wrapper, it is often a wiser framework to use than LWJGL even if you want to build your own OpenGL engine from the ground up. That way, your game distributes to Android, iOS, and WebGL.

I've got temporary textures for the walls and platforms already. Temporary because it's just something I found on the internet and I kind of want to make my own textures... but for the purpose of seeing how the game looks like, it'll do for now.

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org