DirectXで、キーボードを押しているときしか画面が更新されない?ようなのですが
Posted: 2015年3月07日(土) 03:47
DirectX9とwin32APIでゲーム作りをしています。
画像を表示して、自動で右にスクロールさせようと思ったのですが、
キーボードを押しているときやマウスをウィンドウ上で動かしているときしかスクロールしてくれません…
下がループの部分と描画の関数のプログラムです(http://ppp-lab.sakura.ne.jp/win32c/002.html←ほぼこのサイトのコピペ)。
書きながら思ったのですが、「メッセージループ」と言うだけあって、なんらかのメッセージを受け取った時だけループする仕組みなのでしょうか?
/////////////ループ/////////////
while( 1 )
{
BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // メッセージを取得する
if( ret == 0 || ret == -1 )
{
// アプリケーションを終了させるメッセージが来ていたら、
// あるいは GetMessage() が失敗したら( -1 が返されたら )、ループを抜ける
break;
}
else
{
// メッセージを処理する
TranslateMessage( &msg );
DispatchMessage( &msg );
Render(); //これが描画の関数です。
ValidateRect(hWnd,NULL);
UpdateFrame(hWnd);
}
}
/////////////描画/////////////
VOID Render()
{
if( NULL == g_pd3dDevice )
return;
RECT rc;
D3DXVECTOR3 center , position;
// Clear the backbuffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0f, 0 );
// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Rendering of scene objects can happen here
g_pSprite->Begin( NULL );
static int time = 0;
rc.left = 0;
rc.top = 0;
rc.right = 64;
rc.bottom = 64;
center.x = 0;
center.y = 0;
position.x = ++time; //自動で右に動かしたい
position.y = y;
g_pSprite->Draw( g_pTexture , &rc , ¢er , &position , 0xFFFFFFFF );
g_pSprite->End();
// End the scene
g_pd3dDevice->EndScene();
}
どうしたら良いのか、教えてください。
画像を表示して、自動で右にスクロールさせようと思ったのですが、
キーボードを押しているときやマウスをウィンドウ上で動かしているときしかスクロールしてくれません…
下がループの部分と描画の関数のプログラムです(http://ppp-lab.sakura.ne.jp/win32c/002.html←ほぼこのサイトのコピペ)。
書きながら思ったのですが、「メッセージループ」と言うだけあって、なんらかのメッセージを受け取った時だけループする仕組みなのでしょうか?
/////////////ループ/////////////
while( 1 )
{
BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // メッセージを取得する
if( ret == 0 || ret == -1 )
{
// アプリケーションを終了させるメッセージが来ていたら、
// あるいは GetMessage() が失敗したら( -1 が返されたら )、ループを抜ける
break;
}
else
{
// メッセージを処理する
TranslateMessage( &msg );
DispatchMessage( &msg );
Render(); //これが描画の関数です。
ValidateRect(hWnd,NULL);
UpdateFrame(hWnd);
}
}
/////////////描画/////////////
VOID Render()
{
if( NULL == g_pd3dDevice )
return;
RECT rc;
D3DXVECTOR3 center , position;
// Clear the backbuffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0f, 0 );
// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Rendering of scene objects can happen here
g_pSprite->Begin( NULL );
static int time = 0;
rc.left = 0;
rc.top = 0;
rc.right = 64;
rc.bottom = 64;
center.x = 0;
center.y = 0;
position.x = ++time; //自動で右に動かしたい
position.y = y;
g_pSprite->Draw( g_pTexture , &rc , ¢er , &position , 0xFFFFFFFF );
g_pSprite->End();
// End the scene
g_pd3dDevice->EndScene();
}
どうしたら良いのか、教えてください。