Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7929001
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 3, 20262026-06-03T19:55:37+00:00 2026-06-03T19:55:37+00:00

I am migrating a tile based 2D game to C++, because I am really

  • 0

I am migrating a tile based 2D game to C++, because I am really not a fan of Java (some features are nice, but I just can’t get used to it). I am using TMX tiled maps. This question is concerning how to translate the object definitions into actual game entities. In Java, I used reflection to allocate an object of the specified type (given that it derived from the basic game entity).

This worked fine, but this feature is not available in C++ (I understand why, and I’m not complaining. I find reflection messy, and I was hesitant to use it in Java, haha). I was just wondering what the best way was to translate this data. My idea was a base class from which all entities could derive from (this seems pretty standard), then have the loader allocate the derived types based on the ‘type’ value from the TMX map. I have thought of two ways to do this.

  1. A giant switch-case block. Lengthy and disgusting. I’m doubtful that anyone would suggest this (but it is the obvious).
  2. Use a std::map, which would map arbitrary type names to a function to allocate said classes corresponding to said type names.
  3. Lastly, I had thought of making entities of one base class, and using scripting for different entity types. The scripts themselves would register their entity type with the system, although the game would need to load said entity type scripts upon loading (this could be done via one main entity type declaration script, which would bring the number of edits per entity down to 2: entity creation, and entity registration).

while option two looks pretty good, I don’t like having to change 3 pieces of code for each type (defining the entity class, defining an allocate function, and adding the function to the std::map). Option 3 sounds great except for two things in my mind: I’m afraid of the speed of purely script driven entities. Also, I know that adding scripting to my engine is going to be a big project in itself (adding all the helper functions for interfacing with the library will be interesting).

Does anyone know of a better solution? Maybe not better, but just cleaner. With less code edits per entity type.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-03T19:55:39+00:00Added an answer on June 3, 2026 at 7:55 pm

    You can reduce the number of code changes in solution 2, if you use a self registration to a factory. The drawback is that the entities know this factory (self registration) and this factory has to be a global (e.g. a singleton) instance. If tis is no problem to you, this pattern can be very nice. Each new type requires only compilation an linking of one new file.

    You can implement self registration like this:

    // foo.cpp
    namespace 
    { 
      bool dummy = FactoryInstance().Register("FooKey", FooCreator); 
    }
    

    Abstract Factory, Template Style, by Jim Hyslop and Herb Sutter

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm just migrating my projects from Visual Studio to Eclipse, so I can build
After migrating my whole setup from Java 1.5 to 1.6 (J2EE, Tomcat) a couple
After migrating my app to .NET 4 it's not starting. When i'm trying to
I am migrating some of configurations in my project to Spring beans. I am
Just migrating from PHP 5.2 to 5.3, lot of hard work! Is the following
While migrating some code to the latest version of F#, included in VS2010 b1,
I'm migrating a site from mysql to PostgreSQL (which I really like so far)
I am migrating a scientific code from Java to C++. Please tell me: a)
I am migrating from Java to C++. It seems that C++ makes classes declaration
I have just started migrating my homegrown persistence framework to JPA. Given that the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.