XNA 4.0 - Что происходит, когда окно минимизируется?

StackOverflow https://stackoverflow.com/questions/4564394

  •  14-10-2019
  •  | 
  •  

Вопрос

Я изучаю F# и решил попробовать сделать простые игры XNA для Windows, используя F# (чистый энтузиазм), и получил окно с появлением некоторых изображений.

Вот код:

(*Methods*)     
member self.DrawSprites() = 
    _spriteBatch.Begin()
    for i = 0 to _list.Length-1 do
        let spentity = _list.List.ElementAt(i)
        _spriteBatch.Draw(spentity.ImageTexture,new Rectangle(100,100,(int)spentity.Width,(int)spentity.Height),Color.White)      
    _spriteBatch.End()

(*Overriding*)   
override self.Initialize() =
    ChangeGraphicsProfile()                              
    _graphicsDevice <- _graphics.GraphicsDevice
    _list.AddSprite(0,"NagatoYuki",992.0,990.0)
    base.Initialize() 

override self.LoadContent() =         
    _spriteBatch <- new SpriteBatch(_graphicsDevice)
    base.LoadContent()

override self.Draw(gameTime : GameTime) =
    base.Draw(gameTime)
    _graphics.GraphicsDevice.Clear(Color.CornflowerBlue)
    self.DrawSprites()

И Добавить Метод:

   member self.AddSprite(ID : int,imageTexture : string , width : float, height : float) = 
      let texture = content.Load<Texture2D>(imageTexture)
      list <- list @ [new SpriteEntity(ID,list.Length, texture,Vector2.Zero,width,height)]

У объекта _list есть Контент менеджер, вот конструктор:

   type SpriteList(_content : ContentManager byref) =
      let mutable content = _content
      let mutable list = []

Но я не могу минимизировать окно, с тех пор, как оно восстанавливает свое внимание, я получаю эту ошибку:

ObjectDisposedException

Не может получить доступ к расположенному объекту.
Имя объекта: 'GraphicsDevice'.

Что случилось?

Это было полезно?

Решение

То, что вы наблюдаете, - это нормальное поведение, это, кстати, не специфично для F#. Видеть http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.loadcontent.aspx

Этот метод вызывается с помощью инициализации. Кроме того, это называется в любое время, когда игровой контент должен быть перезагружен, например, когда происходит событие Devicereset.

Вы загружаете весь свой контент в game.loadcontent? Если вы это сделаете, вы не должны получать эти ошибки.

Другие советы

Хорошо, после некоторого времени я заставил его работать. Но это не кажется «правильным» (так думает, использование XNA и F# также не кажется правильным, но это весело.)

(*Methods*)     
member self.DrawSprites() = 
    _spriteBatch.Begin()
    for i = 0 to _list.Length-1 do
        let spentity = _list.List.ElementAt(i)
        if spentity.ImageTexture.IsDisposed then
            spentity.ImageTexture <- _list.Content.Load<Texture2D>(spentity.Name)
        _spriteBatch.Draw(spentity.ImageTexture,new Rectangle(100,100,(int)spentity.Width,(int)spentity.Height),Color.White)      
    _spriteBatch.End()

(*Overriding*)   
override self.Initialize() =
    ChangeGraphicsProfile()           
    _list.AddSprite(0,"NagatoYuki",992.0,990.0)
    base.Initialize() 

override self.LoadContent() =   
    ChangeGraphicsProfile()           
    _graphicsDevice <- _graphics.GraphicsDevice
    _spriteBatch <- new SpriteBatch(_graphicsDevice)
    base.LoadContent()

Я корректирую GraphicsDevice всякий раз, когда моя игра должна загружать контент, и в методе DrawSprites () я проверяю, если текстура утилизирована, если она есть, загрузите его снова.

Но эта штука меня беспокоит. Я не знал, что мне пришлось снова загружать весь контент каждый раз, когда окно минимизируется.

(И код делает его выглядельным как инициализированное () загружает содержание, а загрузкаконтент () инициализируется, но хорошо)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top