玩家角色 (@) 的背景颜色与其他图块重叠
Posted
技术标签:
【中文标题】玩家角色 (@) 的背景颜色与其他图块重叠【英文标题】:Background colour of player character (@) overlapping other tiles 【发布时间】:2013-04-23 23:22:28 【问题描述】:我正在使用 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;
如您所见,这是我在游戏循环中使用的一种非常简单的方法,所以我不知道为什么它不起作用。这些是我测试过的东西:
移除颜色支持:这是游戏正常运行的唯一方法,但我当然想使用颜色。 如果在玩家和地牢都绘制并放置 wclear(windows_[0]) 之后移动 manageInput;在 manageInput() if 内(否则它不起作用)。这种方式似乎窗口被清除,地图重新从头开始绘制。这种方式也可以,但是窗口会闪烁,这并不是很酷。仅此而已。我不知道该怎么做才能修复它。如果您需要更多信息,可以在这里找到 git 存储库:https://github.com/SantiagoSanchez/Ruoeg
提前致谢。
【问题讨论】:
【参考方案1】:好的,看来我找到了问题的根源。
不一定要使用 curses 库,而是 Windows 上的位图字体 控制台。
更多详情:https://***.com/a/9814766/368299
【讨论】:
以上是关于玩家角色 (@) 的背景颜色与其他图块重叠的主要内容,如果未能解决你的问题,请参考以下文章