PDCurses窗口在某些区域不打印字母

时间:2017-03-08 14:54:20

标签: c++ ncurses curses pdcurses

我在尝试写roguelike时遇到了一种奇怪的行为。我做了一个简单的循环打印字母填充矩形。使用普通(stdscr)窗口或者来自derwin()的新初始化窗口都可以正常工作。 Loop within stdscr/newly initialised window from derwin().

但是在我从Game类返回窗口指针后,问题就开始出现了。字母似乎没有任何图案印刷,窗口看起来像是覆盖在它的某些部分上。 Loop, when the pointer is returned.

我尝试过调试,但没有成功。光标移动,循环工作,字母打印,但有时它们卡在星体投影水平,并且它们不会显示。

以下是代码:Game.cpp

Game::Game() : m_winMode(WinMode::GameWin) {
[...]
 initscr();
 wresize(stdscr, WIN_HGHT, WIN_WDTH);
 m_gameWin = derwin(stdscr, GAMEWIN_HGHT, GAMEWIN_WDTH, 0, 0);
[...]
}

WINDOW * Game::getWindow(Game::WinMode t_mode) const {
[...]
switch (t_mode) {
case Game::WinMode::GameWin:
    return m_gameWin;
    break;
[...]
}

pdcurses-test.cpp - 这是主文件

#include "stdafx.h"
#include "Game.h"
#include "Map.h"

int main() {
 Game game;
 game.prepareScreen();

 WINDOW * test = game.getWindow(Game::WinMode::GameWin);
 wclear(test);
 for (int i = 0; i <= 48; i++) {
    for (int y = 0; y <= 120; y++) {
        mvwaddch(test, i, y, '%');
    }
 }
 wrefresh(test);

以下是完整代码:github.com/gebirgestein/pdcurses-test/tree/test/pdcurses-test/pdcurses-test

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

调用subwin创建并返回一个指向新窗口的指针,该窗口具有给定数量的行,nlines和列,ncols。窗口位于屏幕上的位置(begin_y,begin_x)。 (此位置相对于屏幕,而不是窗口orig。)窗口位于窗口orig的中间,因此对一个窗口所做的更改将影响两个窗口。子窗口与窗口orig共享内存。使用此例程时,需要在子窗口调用wrefresh之前调用orig上的touchwin或touchline。

     

调用derwin与调用subwin相同,只是begin_y和begin_x是相对于窗口orig的原点而不是屏幕的原点。子窗口和派生窗口之间没有区别。

来自Here。在调用wrefresh(test)之前尝试调用touchwin(stdscr)。