Frage

Ich lerne F# und beschloss, einfache XNA -Spiele für Windows mit F# (reiner Begeisterung) zu machen, und bekam ein Fenster mit einigen Bildern.

Hier ist der Code:

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

Und die Fühesprite Methode:

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

Das _list -Objekt hat a ContentManager, hier ist die Konstrukteur:

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

Aber ich kann das Fenster nicht minimieren, da ich diesen Fehler erhalte, wenn es seinen Fokus wiedererlangt:

ObjectDisposedException

Kann nicht auf ein entsorgendes Objekt zugreifen.
Objektname: 'GraphicsDevice'.

Was ist los?

War es hilfreich?

Lösung

Was Sie beobachten, ist ein normales Verhalten, es ist übrigens nicht spezifisch für F#. Sehen http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.loadcontent.aspx

Diese Methode wird durch Initialize aufgerufen. Außerdem wird jederzeit bezeichnet, wenn der Spielinhalt neu geladen werden muss, z. B. wenn das Devicereset -Ereignis auftritt.

Laden Sie alle Ihre Inhalte in Game.loadContent? Wenn Sie dies tun, sollten Sie diese Fehler nicht bekommen.

Andere Tipps

Nun, nachdem ich einige Zeit gekämpft hatte, habe ich es zum Laufen gebracht. Aber es scheint nicht "richtig" zu sein (so zu denken, mit Xna und F# zu denken, scheint auch nicht richtig zu sein, aber es macht Spaß.)

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

Ich passe den Grafikdevice an, wenn mein Spiel geladen werden muss, und in der Methode Drawsprites () prüfe ich, ob die Textur angeordnet ist, falls dies der Fall ist, es erneut laden.

Aber dieses Ding nervt mich. Ich wusste nicht, dass ich jedes Mal, wenn das Fenster minimiert ist, wieder alle Inhalte laden musste.

(Und der Code sieht so aus, als ob initialize () Inhalte lädt und loadContent () initialisiert, aber na ja)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top