Sign in to follow this  

XNA inherit from model and load

This topic is 1567 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hey guys,

 

just started programming with XNA an already the first Problem appeared:

I wrote my own Model class MyModel that inherits from XNA Model class.

class MyModel : Model

The next Step is to load that Model from Content:

private MyModel Model1;
...

Model1 = (MyModel)Content.Load<Model>("leuchtturm");

Unfortunately that Code doesn't work. I just don't know why.

Is there any chance to get that Code running? Otherwise I have to put the Model inside the MyModel class.

 

Thanks 4 Help!

Share this post


Link to post
Share on other sites
You don't need to inherit anything. Just use the Model object to create a new model to use in your class.

What about the code doesn't work? Does it nit draw? Does it not compile?

Share this post


Link to post
Share on other sites

I want some extra Attributes for My personal modelclass ^^ and trying to do it that way.

 

Yeah sorry forgot to describe the Error: It's a System.InvalidCastException that appears when I start the program.

Share this post


Link to post
Share on other sites
Ah gotcha.

In order to load a model from your MyModel class, i would assume you need to add a Load method to that class and just call that method.

What kind of attributes are you adding? Unless you're changing the way the model is loaded or drawn, i think you're making more work for yourself. Have you looked at the model example on msdn?

as For your problem, i would change <Model> to <Model1> since it is inheriting the Model class

Share this post


Link to post
Share on other sites

Generally constructing things with composition is easier than using inheritance and will also make it easier to debug for you, it does mean writing a few more interface functions but that shouldn't matter too much.

 

In my own programs I think my own deepest inheritance structure is 3 or 4, generally it is 1 or 2 at maximum if it gets more I try to decomposs it into a composition structure.

Share this post


Link to post
Share on other sites
In this case composition is advisable for an additional reason. To make the content loader spit out custom types (the load call would then look this way: [tt]Content.Load<MyModel>(...)[/tt]) one needs to provide a custom content processor. If this is too much work for little or no gain, then don't do it. Edited by unbird

Share this post


Link to post
Share on other sites

Hmm okay writing a custom importer would probably be too much :D

 

But I'm confused: Is it generally in c# not porrible to cast from the inheritor to the base class?

Just:

class Base {...}
class Inheritor : Base {....}

int main()
{
      Inheritor val = new Inheritor();
      Base b = (Base)val;
}

That's the thing I'm trying to do.

Share this post


Link to post
Share on other sites

No, you're trying to go the other way, turning a Base object into an Inheritor object. You can't do that because, while all Inheritors are Bases, not all Bases are Inheritors.

 

Your model loading code is letting the content importer create a Model instance and then trying to cast it to a MyModel instance. That is not allowed since a Model is NOT a MyModel (though a MyModel IS a Model).

Share this post


Link to post
Share on other sites

To clarify -

 

This will NOT work:

Model model = new Model();
MyModel myModel = (MyModel)model; // the instance pointed to by model is NOT an instance of MyModel.

This will work:

MyModel myModel = new MyModel();
...
Model model = myModel; // this always works because MyModel is derived from Model
...
MyModel theModel = (MyModel)model; // this works because the instance pointed to by model is an instance of MyModel;

Share this post


Link to post
Share on other sites

Oh how embarassing ... finally I see it. Just turned around the logic ^^

Okay guys thanks a lot for helping ^^

Share this post


Link to post
Share on other sites
Sign in to follow this