2013-04-21 1 views
5

화면 깜박임없이 화면이 새로 고침/지워지는 콘솔 게임을 보았습니다. 여러 가지 해결책을 시도해 보았습니다. 현재로서는 다음과 같습니다.깜박이는 Win32 C++ 콘솔 지우기 화면

while(true) 
{ 
    if(screenChanged) //if something needs to be drawn on new position 
    { 
    COORD coordScreen = { 0, 0 }; 
    DWORD cCharsWritten; 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    DWORD dwConSize; 
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 

    GetConsoleScreenBufferInfo(hConsole, &csbi); 
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y; 
    FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); 
    GetConsoleScreenBufferInfo(hConsole, &csbi); 
    FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten); 
    SetConsoleCursorPosition(hConsole, coordScreen); 
    } 

    ///printf all the time graphics on their right position with SetConsoleCursorPosition 

    Sleep(33.3f); 
} 

그래도 나는 몇 가지 최소한의 깜박임을 얻고 있습니다. 누구든지 아이디어가 있습니까?

+1

그것을 이러한 게임은 Windows 콘솔 응용 프로그램으로 작성되지 않고 다양한 그래픽 모드를 사용하고 그래픽 메모리에 직접 픽셀을 쓰는 DOS 응용 프로그램으로 가능합니다. –

+0

@Captain 첫 번째 문장을 다시 읽습니다. 소스 코드는 그가 본 콘솔 게임이 아니며 소스 코드는 그가 시도한 것입니다. –

+0

@CodyGray 죄송합니다.) –

답변

4

콘솔 화면을 지우고 실제로 끌 때까지 화면이 새로 고침되기 때문입니다. 보통 이것은 너무 빨리 일어날 수 있으므로 결코 보지 못하지만 때때로 당신은 적시에 그것을하고 깜박임을 경험합니다.

위대한 옵션 중 하나는 콘솔 화면과 동일한 크기와 너비의 오프 스크린 버퍼를 만들고 텍스트 출력을 모두 업데이트 한 다음 WriteConsoleOutput을 사용하여 전체 버퍼를 콘솔 화면으로 보냅니다. 화면 버퍼가 콘솔과 동일한 형식 인 텍스트 및 속성 정보를 모두 보유해야한다는 점을 고려해야합니다.

BOOL WINAPI WriteConsoleOutput(
    _In_  HANDLE hConsoleOutput, 
    _In_  const CHAR_INFO *lpBuffer, 
    _In_  COORD dwBufferSize, 
    _In_  COORD dwBufferCoord, 
    _Inout_ PSMALL_RECT lpWriteRegion 
); 
+0

그게 ncurses가하는 일 아닌가요? – user1255410

+1

잘 모르겠다. WinAPI 특정 ncurses를 보지 않았다. –

+4

일반적인 용어는 "이중 버퍼링"이다. 부분적으로 렌더링 된 화면 (이 경우 빈 화면)을 보는 것을 없애는 고전적인 방법입니다. –

3

이중 버퍼링과 동일한 작업을 수행하려고합니다. CreateConsoleScreenBuffer 및 SetConsoleActiveScreenBuffer API 호출을 사용하여, 당신은 오프 스크린 버퍼를 수정할 수 있습니다, 우리는 나쁜 옛날에 예전처럼, 버퍼를 전환 : 다음 방법에 대해 설명 문서입니다 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms685032%28v=vs.85%29.aspx