Сдвиг плитки вправо

Я работаю над редактором карт, чтобы сопровождать игру, над которой я работал в течение некоторого времени; однако, когда я пытаюсь загрузить карту в игру, все смещается на две или три плитки вправо.

Мой друг предположил, что это может быть ошибка адресации, хотя я никогда не видел никаких доказательств такого.

Вот функция загрузки (она вызывается непосредственно перед основным циклом):

const int SAVEGAME_VERSION=0x1100;

void Engine::load(bool pause) {
TCODZip zip;
engine.gui->menu.clear();
engine.gui->menu.addItem(Menu::NEW_GAME,"New map");
if ( TCODSystem::fileExists("map.atm")) {
zip.loadFromFile("map.atm");
int version = zip.getInt();
if ( version == SAVEGAME_VERSION ) {
engine.gui->menu.addItem(Menu::CONTINUE,"Load");
}
}
engine.gui->menu.addItem(Menu::EXIT,"Exit");

Menu::MenuItemCode menuItem=engine.gui->menu.pick(
pause ? Menu::PAUSE : Menu::MAIN);
if ( menuItem == Menu::EXIT || menuItem == Menu::NONE ) {
// Exit or window closed
exit(0);
} else if ( menuItem == Menu::NEW_GAME ) {
// New game
engine.term();
engine.init();
} else {
// continue a saved game
engine.term();
// load the map
level=zip.getInt();
int width=zip.getInt();
int height=zip.getInt();
map = new Map(width,height);
map->load(zip);
// then the player
player=new Actor(0,0,0,NULL,TCODColor::white);
actors.push(player);
player->load(zip);
// then all other actors
int nbActors=zip.getInt();
while ( nbActors > 0 ) {
Actor *actor = new Actor(0,0,0,NULL,TCODColor::white);
actor->load(zip);
actors.push(actor);
nbActors--;
}
// finally the message log
gui->load(zip);
}
}

И это функция map-> init (которая вызывается из Engine :: init и устанавливает размеры карты для новой игры):

void Map::init(bool withActors) {
TCODZip zip;
if ( TCODSystem::fileExists("map.atm")) {
zip.loadFromFile("map.atm");
//rng = new TCODRandom(seed, TCOD_RNG_CMWC);
tiles=new Tile[width*height];
map=new TCODMap(width,height);
for (int i=0; i < width*height; i++) {
tiles[i].canWalk=zip.getInt();
//TCODBsp bsp(0,0,width,height);
//bsp.splitRecursive(rng,8,ROOM_MAX_SIZE,ROOM_MAX_SIZE,1.5f,1.5f);
//BspListener listener(*this);
//bsp.traverseInvertedLevelOrder(&listener,(void *)withActors);
}
}
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]