2013-04-21 36 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 Oops;) –

答えて

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

関連する問題