2013-04-23 108 views
2

我正在使用C++中的pdcurses制作游戏等流氓游戏,并且此刻所有游戏都会正常进行。但我现在面临一个问题,我不知道如何解决。玩家角色的背景颜色(@)与其他瓷砖重叠

让我们看到了问题的一个屏幕截图更好的理解:

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(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

在此先感谢。

回答