/// <summary> /// Initializes a new instance of the <see cref="Game" /> class. /// </summary> public Game() { // Internals drawableGameSystems = new List <IDrawable>(); currentlyContentGameSystems = new List <IContentable>(); currentlyDrawingGameSystems = new List <IDrawable>(); pendingGameSystems = new List <IGameSystem>(); updateableGameSystems = new List <IUpdateable>(); currentlyUpdatingGameSystems = new List <IUpdateable>(); contentableGameSystems = new List <IContentable>(); contentCollector = new DisposeCollector(); gameTime = new GameTime(); totalGameTime = new TimeSpan(); timer = new TimerTick(); IsFixedTimeStep = false; maximumElapsedTime = TimeSpan.FromMilliseconds(500.0); TargetElapsedTime = TimeSpan.FromTicks(10000000 / 60); // target elapsed time is by default 60Hz lastUpdateCount = new int[4]; nextLastUpdateCountIndex = 0; // Calculate the updateCountAverageSlowLimit (assuming moving average is >=3 ) // Example for a moving average of 4: // updateCountAverageSlowLimit = (2 * 2 + (4 - 2)) / 4 = 1.5f const int BadUpdateCountTime = 2; // number of bad frame (a bad frame is a frame that has at least 2 updates) var maxLastCount = 2 * Math.Min(BadUpdateCountTime, lastUpdateCount.Length); updateCountAverageSlowLimit = (float)(maxLastCount + (lastUpdateCount.Length - maxLastCount)) / lastUpdateCount.Length; // Externals Services = new GameServiceRegistry(); Content = new ContentManager(Services); LaunchParameters = new LaunchParameters(); GameSystems = new GameSystemCollection(); // Create Platform gamePlatform = GamePlatform.Create(this); gamePlatform.Activated += gamePlatform_Activated; gamePlatform.Deactivated += gamePlatform_Deactivated; gamePlatform.Exiting += gamePlatform_Exiting; gamePlatform.WindowCreated += GamePlatformOnWindowCreated; // By default, add a FileResolver for the ContentManager Content.Resolvers.Add(new FileSystemContentResolver(gamePlatform.DefaultAppDirectory)); // Setup registry Services.AddService(typeof(IServiceRegistry), Services); Services.AddService(typeof(IContentManager), Content); Services.AddService(typeof(IGamePlatform), gamePlatform); // Register events on GameSystems. GameSystems.ItemAdded += GameSystems_ItemAdded; GameSystems.ItemRemoved += GameSystems_ItemRemoved; IsActive = true; }
private void DXControl_Loaded(object sender, EventArgs args) { _services = new GameServiceRegistry(); if (!DesignerProperties.GetIsInDesignMode(this)) { InitializeGraphicsDevice(); InitializeContentManager(); if (LoadContent != null) LoadContent(this, new DXGraphicsDeviceEventArgs(GraphicsDevice)); } _imageSourcePresenter = new RenderTargetGraphicsPresenter(GraphicsDevice, _imageSource.RenderTarget); CompositionTarget.Rendering += CompositionTarget_Rendering; _ready = true; }