トップページ > 過去ログ > 記事閲覧
画面がチラつく
名前:dic 日時: 2007/11/25 11:00

はじめまして、dic といいます。 while(1){ if( ProcessMessage()==-1 ){ break; } game->Draw(); game->Move(); ScreenFlip(); } というメインループなのですが、 画面がちらつく現象が発生しまして、原因がわからないのですが 分かる方いましたら返答をお願いしたいです。

Page: 1 |

Re: 画面がチラつく ( No.1 )
名前:通りすがり 日時:2007/11/25 12:20

これだけでは判断しかねますが、考えられる原因を挙げてみます。 ・SetWaitVSyncFlagがFALSEになっているため、ティアリングが発生している ・game->Draw()の関数内に何らかのバグがある ・描画先が表に切り替わってしまっている。もしくは描画先の切り替えに何らかの問題がある ・ClearDrawScreen()が変な箇所で呼び出されている。もしくは呼び出されていない
Re: 画面がチラつく ( No.2 )
名前:dic 日時:2007/11/25 13:36

>・SetWaitVSyncFlagがFALSEになっているため、ティアリングが発生している デフォルトを使用しているのでFALSEです。 >・game->Draw()の関数内に何らかのバグがある 探したのですが、見当たりません。 >・描画先が表に切り替わってしまっている。もしくは描画先の切り替えに何らかの問題がある SetDrawScreen( DX_SCREEN_BACK ); で描画先を裏画面に設定後 DrawGraph();関数を使用しています。 >・ClearDrawScreen()が変な箇所で呼び出されている。もしくは呼び出されていない 使っていませんでしたが、使用後もチラつきが発生します。 ScreenFlip(); ClearDrawScreen(); の順で呼び出しています。
Re: 画面がチラつく ( No.3 )
名前:TOKEI 日時:2007/11/25 14:20

描画部分のソースを、関数名だけ抜粋したのでいいので、載せてください。
Re: 画面がチラつく ( No.4 )
名前:dic 日時:2007/11/25 14:35

少し複雑なので必要な部分のみ掲載します。 class CGame{ vector<Objbase*> m_vpObj; } void CGame::Draw() { // DrawGraph( 0, 0, m_gBack, TRUE ); int i; for( i=0; i<m_vpObj.size(); i++ ) { m_vpObj.at(i)->Draw(); } } // m_vpObj.at(i)->Draw() の呼び出される先 void CTitle::Draw() { DrawGraph( 0, 0, m_gTitle, TRUE ); int x[2] = { 200, 200 }; int y[2] = { 260, 310 }; int i = m_iSelecter; DrawGraph( x[i], y[i], m_gCur, TRUE ); }
Re: 画面がチラつく ( No.5 )
名前:SweetBlack 日時:2007/11/25 17:44

思いつきですが、 ScreenFlip() が複数回実行されてしまってるとか ないですかね。 あと、単純に、 画像クリア→画像表示→ScreenFlip とするだけのサンプルプログラムを実行してみて ちらつくかどうか確認してみるのもいいかもしれません。
Re: 画面がチラつく ( No.6 )
名前:dic 解決 日時:2007/11/26 17:41

DxLib_Init()の前に SetDrawScreen( DX_SCREEN_BACK )を呼び出して いましたが DxLib_Init()の後に SetDrawScreen( DX_SCREEN_BACK )を呼び出して みたら画面のチラつきがなくなりました。 前者の関数の戻り値を調べたら-1で失敗していました。 SetDrawScreen( DX_SCREEN_BACK )は 関数DxLib_Init()の後にしか有効でないようですね おさがわせしました。 返答くださったかたありがとうございました。

Page: 1 |