Ładowanie tekstur w pętli - program wykrzacza się

0

Mam w folderze kilkadziesiąt tekstur i chcę je wszystkie załadować w pętli.
Tekstury nazywają się "0.png","1.png", itd.
Moja pętla wygląda następująco:

for(unsigned int File = 0; File < 64; File++)
{
    FontTextures[42]=File; // <-- Tu mam błąd
    if(LoadTexture(BraxtonFont[File],FontTextures)!= NO_ERROR_FUNC)exit(0);
}

Jednak program 'wykrzacza' się.
Czy ktoś pomoże mi to napisać i proszę o wyrozumiałość bo po raz pierwszy robię takie coś z teksturami.

PS: Kiedyś widziałem podobny przykład z funkcją scanf - może jej powinienem użyć?

zamiana znacznika <a href> na <url> - fp

0

Podejrzewam, że FontTextures jest typu char* lub std::string?
Jaki błąd wywala i jakie typy zmiennych prezentujesz?

0

Definicja tablicy ze ścieżką:

char *FontTextures = new char[];

W funkcji nadaje wartość tablicy - ścieżkę:

void LoadTextures()
{
        FontTextures = ".\\Game'sFile\\Graphics\\Fonts\\Braxton\\0.png"; //<-- ścieżka
	if(LoadTexture(N,".\\Graphics\\N.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(S,".\\Graphics\\S.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(E,".\\Graphics\\E.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(W,".\\Graphics\\W.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(NE,".\\Graphics\\NE.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(SE,".\\Graphics\\SE.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(SW,".\\Graphics\\SW.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(NW,".\\Graphics\\NW.png") != NO_ERROR_FUNC)exit(0);
	if(LoadTexture(Grass,".\\Graphics\\Grass.png") != NO_ERROR_FUNC)exit(0);
	//if(LoadTexture(Ą,".\\Game'sFile\\Graphics\\Fonts\\Braxton\\Ą.png") != IL_NO_ERROR)exit(0);
	FontTextures = ".\\Game'sFile\\Graphics\\Fonts\\Braxton\\";//i.png
	for(unsigned int File = 0; File < 64; File++)
	{
	   FontTextures[43]=File; <-- Tutaj mnie wywala
           if(LoadTexture(BraxtonFont[File],FontTextures)!= NO_ERROR_FUNC)exit(0);
	}
}

Ja chcę 42 element tabilicy zmieniać na liczbę; z każdym obiegiem pętli na większą.

http://i.imgur.com/RRCIJMS.png

0
void LoadTextures()
{
        if(LoadTexture(N,".\\Graphics\\N.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(S,".\\Graphics\\S.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(E,".\\Graphics\\E.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(W,".\\Graphics\\W.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(NE,".\\Graphics\\NE.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(SE,".\\Graphics\\SE.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(SW,".\\Graphics\\SW.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(NW,".\\Graphics\\NW.png") != NO_ERROR_FUNC)exit(0);
        if(LoadTexture(Grass,".\\Graphics\\Grass.png") != NO_ERROR_FUNC)exit(0);
        //if(LoadTexture(Ą,".\\Game'sFile\\Graphics\\Fonts\\Braxton\\Ą.png") != IL_NO_ERROR)exit(0);
        FontTextures = ".\\Game'sFile\\Graphics\\Fonts\\Braxton\\";//i.png
        FontTextures = new char[MAX_PATH];
        memcpy( FontTextures, ".\\Game'sFile\\Graphics\\Fonts\\Braxton\\", 42 ); //nie liczyłem znaków - zakładam, że są 42.
        for(unsigned int File = 0; File < 64; File++)
        {
           sprintf( FontTextures + 42, "%d.png", i);
           if(LoadTexture(BraxtonFont[File],FontTextures)!= NO_ERROR_FUNC)exit(0);
        }
}
0

Skasowałem wszystko i napisałem jeszcze raz tylko przy użyciu std::string i w końcu mi działa.
Czy da się ten kod uprościć czy 'ładniej' napisać?
Oto moja funkcja:

void LoadTextures()
{
    FontTextures = ".\\Game'sFile\\Graphics\\Fonts\\Braxton\\";
    for(size_t File = 0; File < 64; File++){
        FontTextures = FontTextures + std::to_string(File) +".png";
        if(LoadTexture(BraxtonFont[File],FontTextures.c_str()) != NO_ERROR_FUNC)exit(0);
        FontTextures = ".\\Game'sFile\\Graphics\\Fonts\\Braxton\\";
    }
}

PS: Dzięki za pomoc.

0
void LoadTextures(const size_t howManyFiles)
{
    std::string path = ".\\Game'sFile\\Graphics\\Fonts\\Braxton\\";
    for(size_t File = 0; File < howManyFiles; File++)
    {
        FontTextures = path + std::to_string(File) +".png";
        if (LoadTexture(BraxtonFont[File],FontTextures.c_str()) != NO_ERROR_FUNC)
        {
           exit(0);
        }
    }
}

a lepiej by bylo (bo widze ze ten fontTextures to jakies globalne cos

void LoadTextures(const std::string path ,const size_t howManyFiles)
{
    std::string fullPath = "";
    for(size_t File = 0; File < howManyFiles; File++)
    {
        fullPath = path + std::to_string(File) +".png";
        if (LoadTexture(BraxtonFont[File],fullPath.c_str()) != NO_ERROR_FUNC)
        {
           throw new ExceptionLoadTextureFunc("bad loading texture in file " + std::to_string(__FILE__) + 
                                              " and in line "+std::to_string( __LINE__) + 
                                              " full path of loading texture is " + fullPath);
        }
    }
}

pisane z palucha wiec moze nie dzialac (a nawet nie bedzie bo potrzebujesz miec klase ExceptionLoadTextureFunc . Ale bardziej chodzilo mi o zarys co powinno byc

1 użytkowników online, w tym zalogowanych: 0, gości: 1