Jump to content

  • Log In with Google      Sign In   
  • Create Account

XNA inherit from model and load


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
9 replies to this topic

#1 Kyle Corver   Members   -  Reputation: 115

Like
0Likes
Like

Posted 02 October 2013 - 01:52 AM

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!



Sponsor:

#2 burnt_casadilla   Members   -  Reputation: 442

Like
0Likes
Like

Posted 02 October 2013 - 02:03 AM

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?

If you see a post from me, you can safely assume its C# and XNA :)


#3 Kyle Corver   Members   -  Reputation: 115

Like
0Likes
Like

Posted 02 October 2013 - 02:11 AM

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.



#4 burnt_casadilla   Members   -  Reputation: 442

Like
0Likes
Like

Posted 02 October 2013 - 02:34 AM

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

If you see a post from me, you can safely assume its C# and XNA :)


#5 NightCreature83   Crossbones+   -  Reputation: 2857

Like
0Likes
Like

Posted 02 October 2013 - 05:47 AM

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.


Worked on titles: CMR:DiRT2, DiRT 3, DiRT: Showdown, GRID 2, Mad Max

#6 unbird   Crossbones+   -  Reputation: 5119

Like
0Likes
Like

Posted 02 October 2013 - 06:05 AM

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: Content.Load<MyModel>(...)) 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, 02 October 2013 - 06:11 AM.


#7 Kyle Corver   Members   -  Reputation: 115

Like
0Likes
Like

Posted 02 October 2013 - 09:47 AM

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.



#8 Dave Hunt   Crossbones+   -  Reputation: 2459

Like
1Likes
Like

Posted 02 October 2013 - 10:21 AM

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).



#9 Dave Hunt   Crossbones+   -  Reputation: 2459

Like
0Likes
Like

Posted 02 October 2013 - 02:22 PM

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;


#10 Kyle Corver   Members   -  Reputation: 115

Like
0Likes
Like

Posted 03 October 2013 - 04:48 AM

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

Okay guys thanks a lot for helping ^^






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