Я делаю извращенную игру, используя pdcurses в C ++, и сейчас все идет хорошо. Но сейчас я сталкиваюсь с проблемой, которую не знаю, как решить.
Давайте посмотрим на скриншот проблемы для лучшего понимания:
Как вы можете видеть, если вы увеличите верхний красный круг, вы увидите, как персонаж игрока перекрывает вражеского тролля (t) примерно на 2 пикселя с левой стороны. Проблема в том, что если игрок перемещается в другую позицию, вражеский тролль потерял 2 пикселя. навсегда, так что это не то, что происходит, когда игрок находится слева, но это постоянно.
В другом круге игрок переместился справа налево по коридору, и плитки коридора (#) также потеряли свои левые боковые пиксели.
Так вот, где я обновляю все графические вещи:
dungeon_.generate();
while(state_ == State::Running)
{
if(manageInput(windows_[0]) != -1)
{
// Update here monsters behavior
}
dungeon_.draw(windows_[0]);
player_->draw(windows_[0]);
refreshWindows(windows_);
}
Это refreshWindows (std :: vector windows) метод:
void Game::refreshWindows(std::vector<WINDOW *> windows)
{
for(auto w : windows)
{
Curses::wbox(w, 0, 0);
Curses::refresh(w);
}
}
И то и другое методы рисования игрок и подземелье делают это, но подземелье также разные случаи для каждой плитки на карте на чертеже:
void Player::draw(WINDOW *win)
{
Curses::mvwaddch(win, location_.y, location_.x,
static_cast<char>(type_) |
COLOR_PAIR(static_cast<int>(GameObject::Color::White_Green)));
}
А это как int manageInput (WINDOW * win) похоже:
int Game::manageInput(WINDOW *win)
{
int key = Curses::wgetch(win);
if(key != -1)
{
// Player movement
if(key == static_cast<int>(Curses::Key::Up))
{
player_->moveNorth(dungeon_.map());
}
[...]
}
return key;
}
Как видите, это очень простой подход, который я использую в своем игровом цикле, поэтому я не знаю, почему, черт возьми, он не работает. Это те вещи, которые я проверил:
И это все. Я не знаю, что делать, чтобы это исправить. Если вам нужна дополнительная информация, вы можете найти здесь репозиторий git: https://github.com/SantiagoSanchez/Ruoeg
Заранее спасибо.
Хорошо, похоже, что я нашел источник проблемы.
Это не обязательно с библиотекой curses, но растровыми шрифтами в Windows
приставка.
Больше деталей: https://stackoverflow.com/a/9814766/368299
Других решений пока нет …