0

我在尝试编写 roguelike 时遇到了一个奇怪的行为。我做了一个简单的循环打印填充矩形形状的字母。使用普通(stdscr)窗口或从 derwin() 新初始化的窗口都可以正常工作。 在 derwin() 的 stdscr/新初始化窗口内循环。

但是在我从 Game 类返回窗口指针后,问题开始出现。字母似乎没有任何图案地打印出来,并且窗口看起来像是覆盖在它的某些部分上。 循环,当指针返回时。

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

这是代码: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

提前致谢。

4

1 回答 1

0

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

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

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

于 2017-03-08T15:09:54.507 回答