2017-03-08 62 views
0

我在尝试写入roguelike时遇到了奇怪的行为。我做了一个简单的循环打印填充矩形形状的字母。使用正常(stdscr)窗口或从derwin()新近初始化的窗口都可以正常工作。 Loop within stdscr/newly initialised window from derwin().PDCurses窗口不会在某些区域打印字母

但是,从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

在此先感谢。

回答

0

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

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

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

+1

感谢您的回答,我一定忽略了文档中的touchwin()。无论如何,我发现我可以使用newwin()函数。 –