トップページ > 過去ログ > 記事閲覧
画像の表示が移動時にズレる
名前:PNG人 日時: 2006/11/14 17:37

プログラム中のBIT青とBIT赤という二つの画像が、 右左に動かすと画像がずれて表示され、 移動させていないとずれずに表示されるということになってしまいました。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ////////////////////////////////////////////////////////////// // // // 画面サイズ変更(800×600の16Bitのウインドウモード) // // // ////////////////////////////////////////////////////////////// SetGraphMode( 800 , 600 , 16 ) ; // ウインドウモードに変更 ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先画面を裏にする SetTransColor(0,255,0); //透過色の指定 右からR,G,B int GHandle ; int Bar; int BitA[3]; int BitB[3]; GHandle = LoadGraph( "kyara\\test2.jpg" ) ; Bar = LoadGraph( "kyara\\musicbar.bmp" ) ; LoadDivGraph( "kyara\\musicbitA.bmp" , 3 , 3 , 1 , 15 , 40 , BitA ) ;// BMP画像のメモリへの分割読み込み LoadDivGraph( "kyara\\musicbitB.bmp" , 3 , 3 , 1 , 45 , 60 , BitB ) ;// BMP画像のメモリへの分割読み込み int j , i ; int End = 0; i = 0; j = 650; int Key; int a,b; a = 1; b = -1; int BarKari[3][20]; int BarKariRand; while( End != 1 ){ ClearDrawScreen() ; // 画面を初期化 Key = GetJoypadInputState(DX_INPUT_KEY_PAD1); if(Key & PAD_INPUT_RIGHT) i = i + a , j = j + b; if(Key & PAD_INPUT_LEFT) i = i - a , j = j - b; if(Key & PAD_INPUT_A){ if( a == 10){ }else{ a ++ , b --; } } if(Key & PAD_INPUT_B){ if( a == 1){ }else{ a -- , b ++; } } if(Key & PAD_INPUT_C) End = 1; DrawGraph( 0 , 0 , GHandle , TRUE ) ; DrawGraph( 0 , 0 , Bar , TRUE ) ; DrawGraph( i , 0 , BitA[ 0 ] , TRUE ) ; //BIT赤 DrawGraph( i , 40 , BitA[ 1 ] , TRUE ) ; //BIT青 DrawGraph( i , 80 , BitA[ 2 ] , TRUE ) ; //BIT黄 DrawGraph( i , 120 , BitB[ 0 ] , TRUE ) ; //BIT← DrawGraph( i+45 , 120 , BitB[ 1 ] , TRUE ) ; //BIT→ DrawGraph( i+90 , 120 , BitB[ 2 ] , TRUE ) ; //BIT↑ ScreenFlip() ; // 裏画面の内容を表画面に映す if( ProcessMessage() == -1 ) //これがないとキーが動きません { break ; // エラーが起きたらループから抜ける } } DxLib_End(); // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } いろいろ試しましたが出来ません。 お手数をおかけしますが、よろしくお願いします。

Page: 1 |

Re: 画像の表示が移動時にズレる ( No.1 )
名前:管理人 日時:2006/11/15 13:04

 PNG人さん始めまして、DXライブラリの管理人です。 > プログラム中のBIT青とBIT赤という二つの画像が、 > 右左に動かすと画像がずれて表示され、 > 移動させていないとずれずに表示されるということになってしまいました。  具体的には画像がどのようにずれてしまうのでしょうか?
Re: 画像の表示が移動時にズレる ( No.2 )
名前:PNG人 日時:2006/11/17 01:32

上から赤、青、黄のバーがあり、それらが同時に 右左へとうごくのですが、そのさいに青の中央あたりで二つに割れ、赤と青の上が遅れて移動してしまいます。    ■    ■    □     □     ☆     ☆ ■あか □あお ☆きいろ 移動させるとこんな感じです。 移動させないとずれずに表示されます。
Re: 画像の表示が移動時にズレる ( No.3 )
名前:管理人 日時:2006/11/17 12:24

 PNG人さんどうも、DXライブラリの管理人です。  ご返答有難うございます。  恐らくティアリングという現象だと思います。 ティアリングの説明 http://buffalo.jp/qa/graphic/b0ct0770.html  こちらに書かれている通り、ScreenFlip の処理の最中にVRAMからディスプレイ への映像出力が行われてしまうと、例えば上半分の転送が終わったところで、 というタイミングの場合は、上半分のみ新しいフレームの映像が、下半分は 前のフレームの映像が表示されてしまうことになります。  PNG人さんの場合は、丁度バーが割れている部分まで表画面への画像の転送が 終わった所でVRAMからディスプレイへの映像出力が行われてしまっていて、 割れている部分を境に上下で表示されているフレームが前後しているのだと思います。  この現象を回避するには映像出力がされていない間に裏画面の画像を表画面に 転送する必要があり、フルスクリーンモードでは DirectDraw に映像出力が されていない間に画像を転送する専用の機能が在るのでそれを使うのですが、 ウインドウモードでは映像出力がされていないかどうかを知ることは出来るの ですが、その間に転送し切ることを保証する機能が無いので、どうしても ティアリングが出るときは出てしまいます。  これはウインドウモードでは回避することが出来ない現象ですので、 申し訳ありませんがそういうものだと思ってください。m(_ _)m  と、ここまで説明しておいてなんですが、もしフルスクリーンモードでも 発生してしまうとなりますと、原因はティアリングではないということになります。( ̄▽ ̄;
Re: 画像の表示が移動時にズレる ( No.4 )
名前:PNG人 日時:2006/11/18 01:18

管理人様ありがとうございます。 背景画像を半分消すことで解決しました。 分かりやすいご返答、どうもでした。

Page: 1 |