トップページ > 過去ログ > 記事閲覧
タイトル画面ではじめから等の項目を選択する処理について
名前:ルギア 日時: 2008/08/22 16:26

VC++2008ExpressEditionを使用しています。 タイトル画面で はじめから つづきから おわる を選択するというプログラムを書きました。 これは実行した時 はじめからが黄色で表示されており、 つづきからとおわるは白で表示されています。 それで方向キー↓を押すと 次はつづきからが黄色になり はじめからとおわるは、白になる というものです。 そして方向キーを押すとサウンドがなるように考えました。 エラーはでませんでした。 しかし、方向キーの↑キーや↓キーを押しても 画像が全く変化せず、音もなりませんでした。 どなたかアドヴァイスいただければありがたいです。 どうかよろしくお願いいたします。 #include "DxLib.h" int GetHitKeyStateAll_2(int KeyStateBuf[]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++; else KeyStateBuf[i]=0; } return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; //ウィンドウモードに変更 if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 int SERECT[6]; char Key[256]; int point; SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定 LoadDivGraph( "title/titleserect.png" , 6 , 1 , 6 , 130 , 25 , SERECT );//画像を分割してSERECT配列に保存 //画像表示 DrawGraph( 450 , 200 , SERECT[3] , TRUE ) ;//はじめから(黄色)の画像を描画 DrawGraph( 450 , 230 , SERECT[1] , TRUE ) ;//つづきから(白)の画像を描画 DrawGraph( 450 , 260 , SERECT[2] , TRUE ) ;//おわり(白)の画像を描画 // キー入力処理 point == 0; while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){ //↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない switch(point){ case 0: ClearDrawScreen(); // 画面に描画したデータを消す DrawGraph( 450 , 200 , SERECT[3] , TRUE ) ;//はじめから(黄色)の画像を描画 DrawGraph( 450 , 230 , SERECT[1] , TRUE ) ;//つづきから(白)の画像を描画 DrawGraph( 450 , 260 , SERECT[2] , TRUE ) ;//おわり(白)の画像を描画 break; case 1: ClearDrawScreen(); // 画面に描画したデータを消す DrawGraph( 450 , 200 , SERECT[0] , TRUE ) ;//はじめから(白)の画像を描画 DrawGraph( 450 , 230 , SERECT[4] , TRUE ) ;//つづきから(黄色)の画像を描画 DrawGraph( 450 , 260 , SERECT[2] , TRUE ) ;//おわり(白)の画像を描画 break; case 2: ClearDrawScreen(); // 画面に描画したデータを消す DrawGraph( 450 , 200 , SERECT[0] , TRUE ) ;//はじめから(白)の画像を描画 DrawGraph( 450 , 230 , SERECT[1] , TRUE ) ;//つづきから(白)の画像を描画 DrawGraph( 450 , 260 , SERECT[5] , TRUE ) ;//おわり(黄色)の画像を描画 break; } if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){ // たった今押したか、30カウンター以上押しっぱなしかつ5回に一度 PlaySound( "title/serect.wav" , DX_PLAYTYPE_BACK ) ; point++; if(point>=3) point == 0; } if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){ // たった今押したか、30カウンター以上押しっぱなしかつ5回に一度 PlaySound( "title/serect.wav" , DX_PLAYTYPE_BACK ) ; point--; if(point<=-1) point == 2; } // キー入力待ち WaitKey() ; // ループから抜ける break ; } ScreenFlip(); } WaitKey(); //何かキー入力があるまで待つ DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } /////画像////// 画像の名前 titleserect.png titleフォルダに入っています。 サウンドもタイトルフォルダに入っています。 サイズ ワイド:130 ハイト:150 ----------------- |はじめから(白) |[0] |つづきから(白) |[1] |おわる(白)   |[2] |はじめから(黄色)|[3] |つづきから(黄色)|[4] |おわる(黄色)  |[5] ------------------

Page: 1 |

Re: タイトル画面ではじめから等の項目を選択する処理について ( No.1 )
名前:レッサ 日時:2008/08/22 19:27

// キー入力処理 point == 0; ↑の部分ではないでしょうか。 point = 0; ですね。 同様に、もうちょっと下の方の、pointを0〜2に収めるようにループさせる部分も、 point == xxx; となってます。
Re: タイトル画面ではじめから等の項目を選択する処理について ( No.2 )
名前:ルギア 日時:2008/08/23 01:01

解答有難うございます。 修正してみましたが動きませんでした。他にも はじめから(白)  つづきから(白)  おわる(白)    はじめから(黄色) つづきから(黄色) おわる(黄色)   のうち、なぜか白しか表示されないままでした。
Re: タイトル画面ではじめから等の項目を選択する処理について ( No.3 )
名前:maki 日時:2008/08/23 02:45

// キー入力待ち WaitKey() ; // ループから抜ける break ; は何のための処理なんでしょうか? 必要ないと思います。 上記コードを消して、そこにScreenFlip();を移動させれば動くと思います。
Re: タイトル画面ではじめから等の項目を選択する処理について ( No.4 )
名前:ルギア 日時:2008/08/24 03:20

解答有難うございます。 消してみましたができなかったです。
Re: タイトル画面ではじめから等の項目を選択する処理について ( No.5 )
名前:maki 日時:2008/08/24 04:14

私の場合は下記のコードで、おそらくルギアさんが望んでいるであろう動作をしています。 これをそのままコピペして試してみてください。 #include "DxLib.h" int GetHitKeyStateAll_2(int KeyStateBuf[]) { char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++) { if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++; else KeyStateBuf[i]=0; } return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; //ウィンドウモードに変更 if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化処理 エラーが起きたら終了 int SERECT[6]; int Key[256]; int point; SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定 LoadDivGraph( "title/titleserect.png" , 6 , 1 , 6 , 130 , 25 , SERECT );//画像を分割してSERECT配列に保存 // キー入力処理 point = 0; while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0) { switch(point) { case 0: DrawGraph( 450 , 200 , SERECT[3] , TRUE ) ;//はじめから(黄色)の画像を描画 DrawGraph( 450 , 230 , SERECT[1] , TRUE ) ;//つづきから(白)の画像を描画 DrawGraph( 450 , 260 , SERECT[2] , TRUE ) ;//おわり(白)の画像を描画 break; case 1: DrawGraph( 450 , 200 , SERECT[0] , TRUE ) ;//はじめから(白)の画像を描画 DrawGraph( 450 , 230 , SERECT[4] , TRUE ) ;//つづきから(黄色)の画像を描画 DrawGraph( 450 , 260 , SERECT[2] , TRUE ) ;//おわり(白)の画像を描画 break; case 2: DrawGraph( 450 , 200 , SERECT[0] , TRUE ) ;//はじめから(白)の画像を描画 DrawGraph( 450 , 230 , SERECT[1] , TRUE ) ;//つづきから(白)の画像を描画 DrawGraph( 450 , 260 , SERECT[5] , TRUE ) ;//おわり(黄色)の画像を描画 break; } if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){ // たった今押したか、30カウンター以上押しっぱなしかつ5回に一度 PlaySound( "title/serect.wav" , DX_PLAYTYPE_BACK ) ; point++; if(point>=3) point = 0; } if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){ // たった今押したか、30カウンター以上押しっぱなしかつ5回に一度 PlaySound( "title/serect.wav" , DX_PLAYTYPE_BACK ) ; point--; if(point<=-1) point = 2; } ScreenFlip(); } DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
Re: タイトル画面ではじめから等の項目を選択する処理について ( No.6 )
名前:ルギア 日時:2008/08/24 14:46

あ、できました!なるほど。この↓の //画像表示 DrawGraph( 450 , 200 , SERECT[3] , TRUE ) ;//はじめから(黄色)の画像を描画 DrawGraph( 450 , 230 , SERECT[1] , TRUE ) ;//つづきから(白)の画像を描画 DrawGraph( 450 , 260 , SERECT[2] , TRUE ) ;//おわり(白)の画像を描画 これも必要なかったということですね! makiさんどうもありがとうございます。

Page: 1 |