Pregunta

estoy aprendiendo C #, y decidió intentar hacer juegos XNA simples para las ventanas usando F # (puro entusiasmo), y tiene una ventana con algunas imágenes a aparecer.

Aquí está el código:

(*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()

Y AddSprite Método:

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

El objeto _list tiene un ContentManager , aquí está la constructor

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

Pero no puedo minimizar la ventana, ya que cuando recupera su enfoque, me sale este error:

ObjectDisposedException

No se puede acceder a un objeto desechado.
Nombre del objeto: 'GraphicsDevice'

.

Lo que está pasando?

¿Fue útil?

Solución

Lo que se está observando es un comportamiento normal, que es por cierto no es específico de F #. Ver http://msdn.microsoft.com/ en-us / library / microsoft.xna.framework.game.loadcontent.aspx

Este método es llamado por Inicializar. Además, se le llama todo momento las necesidades de contenido juego para volver a cargar, por ejemplo, cuando se produce el evento DeviceReset.

¿Está cargando todo su contenido en Game.LoadContent? Si lo hace, usted no debería estar recibiendo estos errores.

Otros consejos

Bien después de luchar durante algún tiempo lo tengo al trabajo. Pero no parece "correcto" (Pensar de esa manera, usando XNA y F # no me parece bien tampoco, pero es divertido.)

(*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()

ajusto el GraphicsDevice siempre que mis necesidades de juego a LoadContent, y en las DrawSprites () método puedo comprobar si la textura está dispuesto, si lo es, se carga de nuevo.

Pero esta cosa me molesta. No sabía que tenía que cargar todo el contenido nuevo cada vez que se minimiza la ventana.

(Y el código hace que parezca que Initialize () carga el contenido y LoadContent () inicializa, pero bueno)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top