我正在使用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的窗户)方法:
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;
}
正如你可以看到,这是一个非常简单的方法,我用我的游戏环路,所以我不不知道为什么它不工作。这些都是我测试过的东西:
- 删除颜色支持:这是游戏正常工作的唯一方式,但我当然想要使用颜色。
- 移动manageInput,如果玩家和地下城都吸引并放置了wclear(windows_ [0]); manageInput()if里面(否则不起作用)。这种方式看起来像窗口被清除,地图再次从头开始绘制。这种方式也可以,但是窗口弹出,这不是很酷。
而就是这样。我不知道该如何解决它。如果你需要更多的信息,你可以在这里找到git仓库:https://github.com/SantiagoSanchez/Ruoeg
在此先感谢。