Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Platforming Game Level Programming


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
7 replies to this topic

#1 Impervious   Members   -  Reputation: 579

Like
0Likes
Like

Posted 07 July 2012 - 08:48 PM

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!

Sponsor:

#2 Dragonsoulj   Crossbones+   -  Reputation: 2116

Like
2Likes
Like

Posted 07 July 2012 - 09:02 PM

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.

#3 Mussi   Crossbones+   -  Reputation: 2056

Like
4Likes
Like

Posted 07 July 2012 - 09:03 PM

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.

Edited by Mussi, 07 July 2012 - 09:05 PM.


#4 Impervious   Members   -  Reputation: 579

Like
1Likes
Like

Posted 07 July 2012 - 09:36 PM

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.

#5 Mussi   Crossbones+   -  Reputation: 2056

Like
3Likes
Like

Posted 07 July 2012 - 11:53 PM

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.

#6 wolfscaptain   Members   -  Reputation: 200

Like
0Likes
Like

Posted 08 July 2012 - 05:26 AM

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.

#7 Tyonar   Members   -  Reputation: 139

Like
0Likes
Like

Posted 09 July 2012 - 11:45 AM

I tried to make a RPG in C++ and did not have any problems with rendering a large amount of tiles. I used SDL.

#8 Waterlimon   Crossbones+   -  Reputation: 2599

Like
0Likes
Like

Posted 09 July 2012 - 12:00 PM

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





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS