前回・前々回はドモ m_ _m
早速ですが…
以下のPRG参照
曲を鳴らしながら「青四角」を動かすPRGですが
フルスクリーンモード・ウインドウモードの切り替えも同時に行っています。
この切り替えを一回でも行っただけで…
「青四角」がちらついたり,
音楽の音程やリズムが変になったりとしてしまいます。
対象法をお願いします
(って毎度ながら自分のPRGミスの可能性が高い気がしますが^^;)
#include "DxLib.h"
#define WINDOW_X 800 //ウインドウ表示の大きさ
#define WINDOW_Y 600 //
int Full_Window(void) //フルスクリーンモード・ウインドウモード切り替え
{
static int change_Windowflag=0;
char KeyBuf[ 256 ] ;
GetHitKeyStateAll( KeyBuf ) ;
//「TABキーと左Ctrlキー同時押し」による,フルスクリーン・ウインドウの、常時切り替え
//
if(ProcessMessage() == 0 && KeyBuf[KEY_INPUT_LCONTROL] == 1 &&
KeyBuf[KEY_INPUT_TAB] == 1)
{
if(change_Windowflag == 1)
{
ChangeWindowMode( FALSE ) ; //フルスクリーンモード
change_Windowflag=0;
}
else
if(change_Windowflag == 0)
{
ChangeWindowMode( TRUE ) ; //ウインドウモード
change_Windowflag=1;
}
}
return 0;
}
int player(int x,int y,int Cr)//キャラクター表示
{
DrawBox( 0+x , 0+y , 31+x ,31+y , Cr , TRUE) ;
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
//ウインドウ管理
SetGraphMode( WINDOW_X,WINDOW_Y, 32 ) ; //
ChangeWindowMode( FALSE ) ; //フルスクリーンモードに初期化初期化
SetMainWindowText( "テスト" ) ;
SetWindowSizeChangeEnableFlag( TRUE ) ;
if( DxLib_Init() == -1 )return -1 ;// DXライブラリ初期化処理
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先画面を裏画面にする
//データ管理()
int Cr,x=0,y=0,z=0;
int SHandle;
//大容量の曲データによるストリーム再生(MEMPRESSを使ってます)
// SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ); //読み込み速度:速い 再生負荷:重い 必要メモリ領域:軽い
SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS ) ; //読み込み速度:普通 再生負荷:少し重い 必要メモリ領域:普通
// SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMNOPRESS ) ;//読み込み速度:遅い 再生負荷:速い 必要メモリ領域:大きい
SHandle = LoadSoundMem( 曲名パス ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;//バックグラウンド再生
Start = GetNowCount() ;//スタートタイムを取得
Cr=GetColor(0,0,255);//カラーデータを取得
//ゲームループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0)
{
Full_Window() ; //画面切り替え
ClearDrawScreen() ;//画面を初期化
if( CheckHitKey( KEY_INPUT_LEFT) == 1 )x -= 16 ;
if( CheckHitKey( KEY_INPUT_RIGHT) == 1 )x += 16 ;
if( CheckHitKey( KEY_INPUT_UP) == 1 )y -= 16 ;
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )y += 16 ;
if( CheckHitKey( KEY_INPUT_SPACE )== 1 )z += 1 ;
if(x >WINDOW_X-32)
x=768;
else
if(x < 0)
x=0;
if(y >WINDOW_Y-32)
y=568;
else
if(y < 0)
y=0;
player(x,y,Cr);
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
if(CheckSoundMem( SHandle ) == 0) break;//曲が終了したら終了
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}