Drawing enemies based on position

Started by
2 comments, last by BeerNutts 11 years, 3 months ago
Hi all, I'm relatively new to game programming and I'm sure there's a nice and easy way to do this so I thought I'd post here and see if I can get a concise reply before I make changes myself. The issue is I have 3 different types of enemies that I render to the screen. Unfortunately the way my code works is each type of enemy object gets stored in its own list. When it's time to draw the enemies to the screen they get rendered in the order of what kind of enemy they are because I simply draw one enemy list, draw the next enemy list and then draw the 3rd enemy list. This is not good because the 3rd enemy types are always "on top of" the first enemy types. I know there must be a way to define and interface or something where I can store the 3 different objects in one big list and sort them neatly depending on how close they are to the screen and update all their positions and so on. I tried putting them all in a list of their parent class but then I don't have access to their update methods. Help appreciated!
Advertisement

Do the update methods override the parent class's method, or does the parent class not have that method? If the parent doesn't have an update method, why not have all of your enemies inherit from an interface that has an update method, and then have a list of that interface (in which you can sort the enemies by render-order)?

I'm not sure what language you're using, so I can't know that these ideas are right for you, but that's what I'd do in your situation.

Inspiration from my tea:

"Never wish life were easier. Wish that you were better" -Jim Rohn

soundcloud.com/herwrathmustbedragons

A separate list that you can sort by render order is the usual way.

But sorting by distance is unusual, unless the objects are transparent. For solid objects you can use a Z buffer so the order doesn't matter.
I think you misunderstand how inheritence works. You can inherit an update and draw function from a parent, like this.


class TEnemy
{
public:
  virtual void Update();
  virtual void Draw ();
}

class TGoblin : public TEnemy
{
public:
  void Update ();
... //other functions or members
}

// Create a list of TEnemy, and when update is called, it will update the specifix enemy type
std::vector <TEnemy> EnemyList;

If I am misunderstanding what you are doing, tb en post some code for us.

My Gamedev Journal: 2D Game Making, the Easy Way

---(Old Blog, still has good info): 2dGameMaking
-----
"No one ever posts on that message board; it's too crowded." - Yoga Berra (sorta)

This topic is closed to new replies.

Advertisement