[C#/XNA] Problem z zapisem listy do pliku 5641 8

O temacie

Autor Remix

Zaczęty 2.04.2013 roku

Wyświetleń 5641

Odpowiedzi 8

Remix

Remix

Użytkownicy
Murzyn Internetów :O
posty291
Propsy41
ProfesjaProgramista
  • Użytkownicy
  • Murzyn Internetów :O
Siemka!! Pisze ostatnio sobie malutką gre w XNA i robie do niej narzędzie do budowania plansz. Jednak gdy zapisuje nazwy tekstur i recangle do listy a potem chcę je wpisać w plik wyskakuje mi błąd "Indeks był spoza zakresu. Musi mieć wartość nieujemną i mniejszą niż rozmiar kolekcji.". Nie wiem o czym w tym chodzi, ponieważ wszystko powinno działać poprawnie, kawałek kodu:
 protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
            if (Keyboard.GetState().IsKeyDown(Keys.A))
            {
                if (lwieza <= 6)
                {
                    lwieza++;
                }
                else
                {
                    lwieza = 1;
                }
            }
           
            switch(lwieza)
            {
                case(1):
                    tekstura = Content.Load<Texture2D>("wieza 1");
                    break;

                case(2):
                    tekstura = Content.Load<Texture2D>("wieza 2");
                    break;

                case(3):
                    tekstura = Content.Load<Texture2D>("wieza 3");
                    break;

                case(4):
                    tekstura = Content.Load<Texture2D>("wieza 4");
                    break;

                case(5):
                    tekstura = Content.Load<Texture2D>("droga");
                    break;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Left))
            {
                rec.X -= 2;
            }
            else if (Keyboard.GetState().IsKeyDown(Keys.Right))
            {
                rec.X += 2;
            }
            else if (Keyboard.GetState().IsKeyDown(Keys.Down))
            {
                rec.Y += 2;
            }
            else if (Keyboard.GetState().IsKeyDown(Keys.Up))
            {
                rec.Y -= 2;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Enter))
            {
                if (!File.Exists(@"C:\\WB-TD\zapismapy.txt"))
                {
                     File.Create(@"C:\\WB-TD\zapismapy.txt");
                }

                lista_rec.Add(rec);
                if (lwieza != 5)
                {
                    nazwy_wiez.Add("wieza " + lwieza);
                }
                else
                {
                    nazwy_wiez.Add("droga");
                }
            }

            if (Keyboard.GetState().IsKeyDown(Keys.S))
            {
                FileStream zapis = new FileStream(@"C:\\WB-TD\zapismapy.txt", FileMode.Open);
                StreamWriter pisz = new StreamWriter(zapis);

                for (int i = 0; i <= nazwy_wiez.Count;)
                {
                    pisz.WriteLine(Convert.ToString(nazwy_wiez.ElementAt<string>(i)) + " " + Convert.ToString(lista_rec.ElementAt<Rectangle>(i)));
                    i++;
                }

                pisz.Close();
                zapis.Close();
            }

            base.Update(gameTime);
        }
 
https://www.youtube.com/watch?v=TNdy0ea6gc4

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

[C#/XNA] Problem z zapisem listy do pliku
#1 2013-04-02, 20:40(Ostatnia zmiana: 2013-04-02, 20:42)
Tu raczej powinien być znak <, a nie <=.
for (int i = 0; i <= nazwy_wiez.Count;)
{
   pisz.WriteLine(Convert.ToString(nazwy_wiez.ElementAt<string>(i)) + " " + Convert.ToString(lista_rec.ElementAt<Rectangle>(i)));
   i++;
}
Poza tym zwiększanie zmiennej i powinno być tu for (int i = 0; i < nazwy_wiez.Count;i++), bo to nie while ;)
Można jeszcze zamiast pętli for wykorzystać pętlę foreach.


Remix

Remix

Użytkownicy
Murzyn Internetów :O
posty291
Propsy41
ProfesjaProgramista
  • Użytkownicy
  • Murzyn Internetów :O
Cóż, pół biedy że ja czysty zapaleniec do programowania a nie programista bo studiach bo tak bym się spalił ze wstydu :D , tak czy siak dzięki bardzo.
 
https://www.youtube.com/watch?v=TNdy0ea6gc4

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Ale się tu napisałeś ;d
           switch(lwieza)
            {
                case(1):
                    tekstura = Content.Load<Texture2D>("wieza 1");
                    break;

                case(2):
                    tekstura = Content.Load<Texture2D>("wieza 2");
                    break;

                case(3):
                    tekstura = Content.Load<Texture2D>("wieza 3");
                    break;

                case(4):
                    tekstura = Content.Load<Texture2D>("wieza 4");
                    break;

                case(5):
                    tekstura = Content.Load<Texture2D>("droga");
                    break;
            }

ja bym to zrobił tak

           switch(lwieza)
            {
                case(5):
                    tekstura = Content.Load<Texture2D>("droga");
                    break;
                default:
                    tekstura = Content.Load<Texture2D>("wieza " + lwieza.ToString());
                    break;
            }

staraj się pisać mniej ;)

do tego mam pytanie dlaczego ładujesz tekstury w
 protected override void Update(GameTime gameTime)
??
wtedy co klatkę gra musi pobrać dane z dysku tekstury się ładuje w LoadContent ;)

Remix

Remix

Użytkownicy
Murzyn Internetów :O
posty291
Propsy41
ProfesjaProgramista
  • Użytkownicy
  • Murzyn Internetów :O
Cóz, a gdybym to zrobił w loadcontent a później zmieniłbym wartość zmiennej to tekstura by mi się zmieniła?

PS: Ten blok switch to rzeczywiście troszkę popierdoliłem XD
 
https://www.youtube.com/watch?v=TNdy0ea6gc4


RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Cóz, a gdybym to zrobił w loadcontent a później zmieniłbym wartość zmiennej to tekstura by mi się zmieniła?
Ja bym zrobił to tak
robisz sobie tablice z teksturami

Texture2D teksturki[] = new Texture2D[5];w load content dajesz tekturki
teksturki[0] = Content.Load<Texture2D>("wieza 1");
teksturki[1] = Content.Load<Texture2D>("wieza 2");
teksturki[2] = Content.Load<Texture2D>("wieza 3");
teksturki[3] = Content.Load<Texture2D>("wieza 4");
teksturki[4] = Content.Load<Texture2D>("droga");

wywalił bym całego switch(lwieza)

a w wyświetlaniu dajesz

Sprite.Draw(teksturki[lwieza-1], ....

Remix

Remix

Użytkownicy
Murzyn Internetów :O
posty291
Propsy41
ProfesjaProgramista
  • Użytkownicy
  • Murzyn Internetów :O
Cóż, dzięki wszystkim za rady... :)
 
https://www.youtube.com/watch?v=TNdy0ea6gc4


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry