Skip to content
This repository has been archived by the owner on Oct 30, 2019. It is now read-only.

Initialization order mishap #317

Closed
renaudbedard opened this issue Aug 13, 2015 · 3 comments
Closed

Initialization order mishap #317

renaudbedard opened this issue Aug 13, 2015 · 3 comments

Comments

@renaudbedard
Copy link

If you do in your Game inheritor :

protected override void Initialize()
{
    // add some components
    Components.Add(new MyEarlyComponent());

    base.Initialize();

    // add some more components
    Components.Add(new MyLateComponent());
}

The MyLateComponent never gets initialized.

@renaudbedard
Copy link
Author

Can be fixed by putting the

            _components.ComponentAdded += Components_ComponentAdded;
            _components.ComponentRemoved += Components_ComponentRemoved;

calls to the very end of Initialize() in Game.cs

@flibitijibibo
Copy link
Owner

This will need an XNA4 accuracy check - I won't be able to do this for a while, so if someone wants to nab this before me you've got plenty of time to beat me to it.

@flibitijibibo
Copy link
Owner

I just checked this with XNA4 and it appears we're doing the accurate behavior as-is. Components not in the list by base.Initialize() will NOT be automatically initialized. The documentation seems to indicate that this is intentional, too:

https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.gamecomponent.initialize.aspx

If this GameComponent has been added to the Game.Components collection, this method will be called automatically if you call base.Initialize in your Game.Initialize method.

In classes that derive from Game, it is necessary to call base.Initialize in Game.Initialize, which will automatically enumerate through any game components that have been added to Game.Components and call their Initialize method.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants