Platforming Game Level Programming

Started by
6 comments, last by Waterlimon 11 years, 9 months ago
Hey Everyone,

I have a question which I believe should be relatively simple for someone with experience. I am planning to make a 2D platformer (like Mario or Super Meat Boy) in Java. Why Java? Well, I'm familiar with graphics in Java and feel comfortable with the language in general. While I know languages like C and C++, I have not done graphics programming in them.

Anyway, for the sake of brevity and hopefully clarity I am leaving out some other possibilities. My platformer world will be made of blocks similar to Terraria, and I was first wondering if it is reasonable to use sprites to represent each block, or if I may come into problems with that method. In other words, each block represented on the screen would be a block sprite. Would that become very taxing if I end up having something like 200 sprites on the screen? I don't have a good concept of how taxing representing sprites repeatedly can be.

Also I want the levels to be relatively large... in other words they won't entirely fit on the screen. Would it be best to keep track of the entire level all the time (or at least reasonable if not the best), or would it be highly advisable that I only worry about sprites in range of the screen?

Alternatives to handling this situation are also appreciated. As a quick recap I'd like to know, is representing many sprites on a screen very taxing and a bad way to design a level, and is keeping track of the entire level (even if it is off screen) a bad method? Also, are there any better alternatives?

Thanks in advance!
Advertisement
With the sake of taxing the system, if you have several of the same sprite drawn to the screen, it shouldn't be very taxing at all. I would say the best bet for drawing these is to keep an array (if you are doing 200 sprites, something like a 10x20 since you have 2 dimensions, it will depend on your width and height of the levels). For the sake of what to keep track of, you can load the full level if you have just an array to fill referencing each sprite that goes there, and then just draw what is within screen view, or screen view with a few off screen sprites surrounding the screen view.
I recently made a platformer using Processing(Java) and for simplicity's sake I rendered each tile individually. It turned out to be too slow so I rendered the static parts of the world into much larger sprites(512x512), which reduced the amount of draw calls from about 800 to 2. I know that you can destroy/build tiles in Terraria, so if you're going for something like that you'll have to update the larger sprites when necessary.

As for keeping track of the entire level, I'd advise you to only render what's on screen. It's fairly easy to implement.
I appreciate both responses, though they seem a bit conflicting. Many of the sprites will be the same. Similar to Terraria, there will only be a few different types of blocks, which will be repeated several times.

It sounds like I can always go back and find more efficient methods of displaying many sprites later on, if it comes down to them causing too much of a problem, so perhaps I can just see what happens when I place all of them, and change it if needed.

Once again thank you for your responses, though I am still open to more opinions... especially if someone feels there is a much more efficient way to solve this problem.

I appreciate both responses, though they seem a bit conflicting. Many of the sprites will be the same. Similar to Terraria, there will only be a few different types of blocks, which will be repeated several times.

They seem conflicting because it's situational. I'm not sure how efficient Processing is in rendering a large amount of tiles, but it wasn't good enough in my situation. You're not using Processing, so you might not run into the same problem. I actually used a tileset from Terraria btw.


It sounds like I can always go back and find more efficient methods of displaying many sprites later on, if it comes down to them causing too much of a problem, so perhaps I can just see what happens when I place all of them, and change it if needed.

I'd suggest you do that, don't need to fix what isn't broken. However, If you do find it to be insufficient, the solution I posted is probably as efficient as it can get.
If you use hardware accelerated rendering (StrategyBuffer or something like that?), a few hundred tiles should be quite easy.

Even better if it has batching.
I tried to make a RPG in C++ and did not have any problems with rendering a large amount of tiles. I used SDL.
You could use RLE/quadtree to render big areas of same type as a repeating texture to reduce draw calls but that wouldnt probably work with texture atlas textures. (unless you somehow do the repeating in a shader???)

o3o

This topic is closed to new replies.

Advertisement