我在尝试写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
提前致谢。
答案 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)。