2013-04-23 4 views
2

Я делаю игру-изгоев, используя pdcurses на C++, и все это нормально. Но сейчас я столкнулся с проблемой, когда я не знаю, как ее решить.Цвет фона персонажа игрока (@), перекрывающий другие плитки

Давайте посмотрим скриншот проблемы для лучшего понимания:

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

Как вы можете видеть, если увеличить в верхнем красном круге, вы можете увидеть, как персонаж игрока накладывается на противника тролля (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 (станд :: вектор окно) метода:

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 * выигрыш) выглядит следующим образом:

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; 
} 

Как вы можете видеть, это очень простой подход, который я использую в моей игровой цикл, так что я не Не знаю, почему, черт возьми, он не работает. Это те вещи, которые я тестировал:

  • Удалить поддержку цвета: Это единственный способ, которым игра работает правильно, но, конечно, я хочу использовать цвета.
  • Перемещение управляющего входа, если после того, как игрок и подземелье рисуют и помещают wclear (windows_ [0]); внутри manageInput() if (иначе это не сработает). Этот способ кажется, что окно очищено, и карта снова нарисована с нуля. Этот способ тоже работает, , но окно щелкает, и это не очень круто.

И все. Я не знаю, что делать, чтобы исправить это. Если вам нужна дополнительная информация, вы можете найти здесь репозиторий git: https://github.com/SantiagoSanchez/Ruoeg

Заранее спасибо.

ответ

0

Хорошо, похоже, что я нашел источник проблемы.

Это не должно быть с библиотекой curses, но растровые шрифты в Windows консоли.

Подробнее: https://stackoverflow.com/a/9814766/368299

Смежные вопросы