Umieszczałem tu parę dni temu ten sam problem bez kodu, teraz udostępniam cały projekt:
http://www.speedyshare.com/Xe5Wa/RPG.rar
Kompilowany na VS 2012
Błąd występuję podczas wczytywania mapy. Gdy jest mało elementów do wczytania, program działa poprawnie, natomiast przy większej liczbie elementów mapy do wczytania, program ma problem z wczytaniem pliku Player.txt, gdzie umieszczona jest np. ścieżka do grafiki, no i program crashuje bo nie może wyświetlić grafiki, której nie wczytał. Nie mam pojęcia co może powodować te zamazywanie ścieżek.
Metoda klasy layer, każdy kafelek jest wysyłany tutaj tiles[tiles.size()-1].SetContent(tileImage, tempState, position);
void Layer::LoadContent(std::string layerID, std::string mapID)
{
std::string filename = "Load/Maps/"+mapID+".txt";
fileManager.LoadContent(filename.c_str(),attributes, contents, layerID);
int indexY = 0;
for(int i =0; i < attributes.size(); i++)
{
for(int j =0; j < attributes[i].size(); j++)
{
if(attributes[i][j] == "SolidTiles")
solidTiles.push_back(SetTiles(contents[i][j]));
else if(attributes[i][j] == "TileSheet")
tileSheet = al_load_bitmap(contents[i][j].c_str());
else if(attributes[i][j] == "StartLayer")
{
for(int k = 0; k < contents[i].size(); k++)
{
if(contents[i][k] != "---")
{
ALLEGRO_BITMAP *tileImage;
Tile::State tempState = Tile::State::Passive;
std::pair<int,int> tile = SetTiles(contents[i][k]);
if(std::find(solidTiles.begin(), solidTiles.end(), tile)
!= solidTiles.end())
{
tempState = Tile::State::Solid;
}
tileImage = al_create_sub_bitmap(tileSheet, tile.first * 32, tile.second * 32,
32,32);
std::pair<float,float> position(k*32, indexY * 32);
Tile tileInstance;
tiles.push_back(tileInstance);
tiles[tiles.size()-1].SetContent(tileImage, tempState, position);
}
}
indexY++;
}
}
}
}
Przechodzi wtedy do metody klasy Tile, po usunięciu linijki tileAnimation.LoadContent(tileImage, "", position);
Program nie crashuje.
void Tile::SetContent(ALLEGRO_BITMAP *tileImage, State state, std::pair<float,float> position)
{
image = tileImage;
this->state = state;
tileAnimation.LoadContent(tileImage, "", position);
}
No a tak wygląda ta metoda klasy Animation
void Animation::LoadContent(ALLEGRO_BITMAP *image,std::string text, std::pair<float, float> position)
{
this->image = image;
this->text = text;
this->position = position;
alpha = 255;
font = al_load_font("font1.ttf", 30, NULL);
sourceRect = image;
isActive = false;
ammountOfFrames = std::pair<int,int>(3,4);
currentFrame = std::pair<int,int>(1,0);
}
Przypominam że program działa poprawnie gdy wczytuje się mniejszą ilość danych. Ścieżki zamazuje jak wczytał z 480 elementów mapy.
dodanie znaczników '____' oraz załącznika do posta - furious programming