我正在使用C ++中的pdcurses制作一个像游戏一样的流氓,而且目前一切正常。但我现在面临一个问题,我不知道如何解决。
让我们看一下问题的截图,以便更好地理解:
正如你所看到的,如果你放大上面的红色圆圈,你可以看到玩家角色如何与敌人的巨魔(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
提前致谢。
答案 0 :(得分:0)