Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308

    [C#] !Riferimento a un oggetto non impostato su un'istanza di oggetto! (Xna)

    Ciao a tutti. Ho impostato un progetto Game di Xna in cui, fra le altre cose, mi servo di un array di VertexPositionColor, un array di interi ed una struttura che ha per campi un array di VertexPositionColorTexture, un array di int ed una texture.

    codice:
         public class Game1 : Microsoft.Xna.Framework.Game
        {
    
            ...
    
            VertexPositionColor[] vertices = new VertexPositionColor[8];
    
    #if CPU16
            System.Int16[] indices = new System.Int16[36];
    #elif CPU32
            int[] indices = new int[36];
    #endif
    
            float Lx = 10f, Ly = 7f, Lz = 5f;
            SolidFace face0, face1, face2, face3, face4, face5;
            Texture2D facetex0, facetex1, facetex2, facetex3, facetex4, facetex5;
            ...
    
            public struct SolidFace
            {
                //Vertici della parete (4). 
                public VertexPositionColorTexture[] fvertices;
    
                //Indici da usare per disegnare i triangoli (6).
    #if CPU16
                public System.Int16[] findices;
    #elif CPU32
                public int[] findices;
    #endif
    
                //Immagine da applicare a questa parete
                public Texture2D ftexture;
    
            }
    Ho scritto una sub che imposta l'array vertices

    codice:
    
            public void Set_Vertices()
            {
                vertices[0].Position = new Vector3(-Lx / 2, -Ly / 2, Lz / 2);
                vertices[0].Color = Color.White;
                vertices[1].Position = new Vector3(-Lx / 2, -Ly / 2, -Lz / 2);
                vertices[1].Color = Color.White;
                vertices[2].Position = new Vector3(Lx / 2, -Ly / 2, -Lz / 2);
                vertices[2].Color = Color.White;
                vertices[3].Position = new Vector3(Lx / 2, -Ly / 2, Lz / 2);
                vertices[3].Color = Color.White;
    
                vertices[4].Position = new Vector3(-Lx / 2, Ly / 2, Lz / 2);
                vertices[4].Color = Color.White;
                vertices[5].Position = new Vector3(-Lx / 2, Ly / 2, -Lz / 2);
                vertices[5].Color = Color.White;
                vertices[6].Position = new Vector3(Lx / 2, Ly / 2, -Lz / 2);
                vertices[6].Color = Color.White;
                vertices[7].Position = new Vector3(Lx / 2, Ly / 2, Lz / 2);
                vertices[7].Color = Color.White;
    
    
            }
    ed un'altra che imposta 6 oggetti SolidFace

    codice:
            public void Set_Faces()
            {
                 
                face0 = new SolidFace();
                face1 = new SolidFace();
                face2 = new SolidFace();
                face3 = new SolidFace();
                face4 = new SolidFace();
                face5 = new SolidFace(); 
    
                //FACCIA 0:
                //posizioni e colori
                face0.fvertices[0].Position = vertices[4].Position; <====== 
    !Riferimento a un oggetto non impostato su un'istanza di oggetto!.
                face0.fvertices[1].Position = vertices[5].Position;
                face0.fvertices[2].Position = vertices[6].Position;
                face0.fvertices[3].Position = vertices[7].Position;
                face0.fvertices[0].Color = vertices[4].Color;
                face0.fvertices[1].Color = vertices[5].Color;
                face0.fvertices[2].Color = vertices[6].Color;
                face0.fvertices[3].Color = vertices[7].Color;
    
                //Coordinate texture
                face0.fvertices[0].TextureCoordinate = new Vector2(0f, 0f);
                face0.fvertices[1].TextureCoordinate = new Vector2(1f, 0f);
                face0.fvertices[2].TextureCoordinate = new Vector2(1f, 1f);
                face0.fvertices[3].TextureCoordinate = new Vector2(0f, 1f);
    
                //Indici delle 2 primitive: usiamo 4-5-6 e 4-6-7
                face0.findices[0] = 4;
                face0.findices[1] = 5;
                face0.findices[2] = 6;
                face0.findices[3] = 4;
                face0.findices[4] = 6;
                face0.findices[5] = 7;
    
                //texture
                face0.ftexture = facetex0;
    
                ... (le altre 5 facce)
    
            }
    
    
            ...
    
            protected override void Initialize()
            {
    
                Set_Vertices();
                Set_Faces();     <----- si blocca qui
                
                ...
            }
    Ecco il problema nasce quando nella sub Initialize() viene chiamata Set_Faces. Viene sollevata una NullReference Exception ma non capisco dove. Mi potete aiutare? Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Gli elementi di fvertices non esistono
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Cioè non ho messo l'interfaccia IVertexType, i VertexElement[] e la VertexDeclaration?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... intendo dire che qui

    public VertexPositionColorTexture[] fvertices;

    hai indicato un vettore senza indicare quanti sono i suoi elementi. Quindi questi non esistono ... non esiste fvertices[0] e così via ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Ma poooorca miseeeeria E' VERO! Lo stesso discorso per i findices. Mi ero spaventato...grazie Oregon sei sempre grande (ti prendo col buono perchè di sicuro avrò ancora bisogno...

    codice:
           public void Set_Faces()
            {
                //IMPORTANTE: istanzia le 6 facce
                /*face0 = new SolidFace();
                face1 = new SolidFace();
                face2 = new SolidFace();
                face3 = new SolidFace();
                face4 = new SolidFace();
                face5 = new SolidFace();*/
    
                
                //FACCIA 0: usiamo i vertici 4, 5, 6 e 7
                //Così prendiamo posizioni e colori
                face0.fvertices = new VertexPositionTexture[4];
                face0.fvertices[0].Position = vertices[4].Position;
                face0.fvertices[1].Position = vertices[5].Position;
                face0.fvertices[2].Position = vertices[6].Position;
                face0.fvertices[3].Position = vertices[7].Position;
    
                //Coordinate texture
                face0.fvertices[0].TextureCoordinate = new Vector2(0f, 0f);
                face0.fvertices[1].TextureCoordinate = new Vector2(1f, 0f);
                face0.fvertices[2].TextureCoordinate = new Vector2(1f, 1f);
                face0.fvertices[3].TextureCoordinate = new Vector2(0f, 1f);
    
    
    
                //Indici delle 2 primitive: usiamo 4-5-6 e 4-6-7
    #if CPU16
                face0.findices = new System.Int16[6];
    #elif CPU32
                face0.findices = new int[6];
    #endif
    
                face0.findices[0] = 4;
                face0.findices[1] = 5;
                face0.findices[2] = 6;
                face0.findices[3] = 4;
                face0.findices[4] = 6;
                face0.findices[5] = 7;
    
                //Associamo la sua texture
                face0.ftexture = facetex0;
    
                .... (altre facce)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.