gpt4 book ai didi

c++ - 玩家角色的背景颜色 (@) 与其他方 block 重叠

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:31 24 4
gpt4 key购买 nike

我正在使用 C++ 中的 pdcurses 制作一款类似 rogue 的游戏,目前一切正常。但是我现在面临一个不知道如何解决的问题。

让我们看一下问题的屏幕截图以便更好地理解:

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

如您所见,如果放大上方的红色圆圈,您可以看到玩家角色如何与敌方巨魔 (t) 左侧重叠约 2 像素。问题是,如果玩家移动到另一个位置,敌人的巨魔就会永远失去那 2 个像素,所以这不是玩家在左侧时才会发生的事情,而是永久性的.

在另一个圆圈中,玩家在走廊上从右向左移动,走廊方 block (#) 的左侧像素也丢失了。

所以这里是我更新所有图形内容的地方:

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

玩家和地牢的绘制方法都是这样做的,但是地牢在绘制 map 上的每个方 block 时也有不同的情况:

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

如您所见,这是我在游戏循环中使用的一种非常简单的方法,所以我不知道为什么它不起作用。这些是我测试过的东西:

  • 移除颜色支持:这是游戏正常运行的唯一方法,但我当然想使用颜色。
  • 移动 manageInput if 在玩家和地牢都绘制并放置 wclear(windows_[0]) 之后;在 manageInput() if 内部(否则它不起作用)。这种方式似乎窗口被清除并且 map 从头开始重新绘制。这种方式也有效,但是窗口闪烁,这不是很酷。

仅此而已。我不知道该怎么做才能解决它。如果您需要更多信息,可以在此处找到 git 存储库:https://github.com/SantiagoSanchez/Ruoeg

提前致谢。

最佳答案

好的,看来我找到问题的根源了。

It doesn't have to be with curses library, but bitmap fonts at Windows console.

更多详情:https://stackoverflow.com/a/9814766/368299

关于c++ - 玩家角色的背景颜色 (@) 与其他方 block 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com