2017-03-08 1 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을 호출하면 지정된 수의 줄, nlines 및 열 ncols가있는 새 창에 대한 포인터가 만들어지고 반환됩니다. 창은 화면의 위치 (begin_y, begin_x)에 있습니다. (이 위치는 화면의 원래 위치가 아니라 화면과 관련이 있습니다.) 창은 창 orig의 중간에 만들어 지므로 한 창에 대한 변경 사항이 두 창에 모두 적용됩니다. subwindow는 window orig와 메모리를 공유합니다. 이 루틴을 사용할 때 서브 윈 도우에서 wrefresh를 호출하기 전에 origwin에서 touchwin 또는 touchline을 호출해야합니다.

derwin을 호출하는 것은 beginwin과 begin_x가 화면이 아니라 창 orig의 원점을 기준으로한다는 점을 제외하고는 subwin을 호출하는 것과 같습니다. 서브 윈도우와 파생 된 윈도우에는 차이가 없습니다.

. wrefresh (test)를 호출하기 전에 touchwin (stdscr)을 호출 해보십시오.

+1

답변을 주셔서 감사합니다. 문서의 touchwin()을 간과 한 것 같습니다. 어쨌든, 나는 newwin() 함수를 사용할 수 있다는 것을 알아 냈다. –

관련 문제