トップページ > 過去ログ > 記事閲覧
表画面の更新が遅すぎます
名前:six 日時: 2006/12/07 15:16

以下のプログラムで、マップ上を横にキャラクタを動かそうとしています。しかしながら、明らかに画面の更新が遅く、ちらつきがみえます。なにがマズイのでしょうか?一つお願いします。 // &#402;}&#402;b&#402;v&#8226;\&#381;&brvbar;&#352;&icirc;&#8211;{ #include "DxLib.h" #include <stdio.h> #include <string.h> #include <fstream> #include <iomanip> #include <iostream> using namespace std; #define MAP_SIZE 32 // &#402;}&#402;b&#402;v&#402;`&#402;b&#402;v&#710;&ecirc;&#8218;&Acirc;&#8218;&Igrave;&#402;h&#402;b&#402;g&#402;T&#402;C&#402;Y #define MAP_WIDTH 20 // &#402;}&#402;b&#402;v&#8218;&Igrave;&#8226;&#157; #define MAP_HEIGHT 16 // &#402;}&#402;b&#402;v&#8218;&Igrave;&#143;c’&middot;&#8218;&sup3; void DrawMap(); void GraphDraw(int image[]); // &#402;}&#402;b&#402;v&#8218;&Igrave;&#402;f&#129;[&#402;^ int MapData[ MAP_HEIGHT ][ MAP_WIDTH ]; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ChangeWindowMode( TRUE ) ; char Key[256]; if( DxLib_Init() == -1 ) // &#8218;c&#8218;w&#402;‰&#402;C&#402;u&#402;‰&#402;&#352;&#143;‰&#352;&uacute;‰&raquo;&#143;&#710;&#8212;&#157; { return -1; // &#402;G&#402;‰&#129;[&#8218;&ordf;&#8249;N&#8218;&laquo;&#8218;&frac12;&#8218;&ccedil;’&frac14;&#8218;&iquest;&#8218;&Eacute;&#143;I&#8212;&sup1; } SetDrawScreen(DX_SCREEN_BACK); SetGraphMode( 640 , 480 , 16 ) ; DrawMap(); int image[480],x=640/2,y=480/2,GMima; LoadDivGraph("dang01_a.bmp",480,30,16,32,32,image); GMima = LoadGraph("GM.bmp"); while(1){ ClearDrawScreen(); //&#8212;&nbsp;‰&aelig;&#8211;&Ecirc;&#8218;&Igrave;&#402;f&#129;[&#402;^&#8218;&eth;‘S&#8218;&Auml;&#141;&iacute;&#143;&#339; GetHitKeyStateAll( Key ) ; if( Key[ KEY_INPUT_RIGHT ] == 1 ) //‰E&#402;{&#402;^&#402;“&#8218;&ordf;‰&#376;&#8218;&sup3;&#8218;&ecirc;&#8218;&frac12;&#8218;&ccedil; x++ ; //x&#8218;&Igrave;’l&#8218;&eth;&#8218;P‘&#157;&#8218;&acirc;&#8218;&middot; else if(x%32!=0) x++; if( Key[ KEY_INPUT_ESCAPE ] == 1 ) break ; if( ProcessMessage() == -1 ) break ; GraphDraw(image); DrawGraph(x,y,GMima,FALSE); ScreenFlip(); } DxLib_End() ; // &#8218;c&#8218;w&#402;‰&#402;C&#402;u&#402;‰&#402;&#352;&#381;g&#8212;p&#8218;&Igrave;&#143;I&#8212;&sup1;&#143;&#710;&#8212;&#157; return 0 ; // &#402;\&#402;t&#402;g&#8218;&Igrave;&#143;I&#8212;&sup1; } void DrawMap(){ int i=0,j=0,temp; ifstream cFStrm( "Data.txt"); while( cFStrm >> temp ){ MapData[i][j] = temp; if(j==MAP_WIDTH-1){ i++; j = 0; } else{ j++; } } cFStrm.close(); } void GraphDraw(int image[]){ int i , j ; // &#402;}&#402;b&#402;v&#8218;&eth;&#8226;`&#8218;&shy; for( i = 0 ; i < MAP_HEIGHT ; i ++ ) { for( j = 0 ; j < MAP_WIDTH ; j ++ ) { if( MapData[ i ][ j ] == 0 ) { DrawGraph(j*MAP_SIZE,i*MAP_SIZE,image[37],TRUE); } else if(MapData[i][j]==1){ DrawGraph(j*MAP_SIZE,i*MAP_SIZE,image[34],TRUE); } else if(MapData[i][j]==2){ DrawGraph(j*MAP_SIZE,i*MAP_SIZE,image[35],TRUE); } else{ DrawGraph(j*MAP_SIZE,i*MAP_SIZE,image[36],TRUE); } } } } 初心なもので、汚いソースについてはご容赦を。

Page: 1 |

Re: 表画面の更新が遅すぎます ( No.1 )
名前:six 日時:2006/12/07 17:50

すみません。上の件については、コピペしてたら何とか解決しました。しかしながら、DrawString()関数やprintfDx関数等文字列を描画する関数を使うとなぜか強制終了してしまいます。コピペしてもちゃんと動きません。たびたびながらお願いします。
Re: 表画面の更新が遅すぎます ( No.2 )
名前:six 日時:2006/12/07 17:54

あ、ソースコードは以下のDixqさんのを使いました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 int White; White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 DrawString( 0, 0, "hello! DX Library!" , White); //文字列表示 DrawString(100,100, "こんにちは! DXライブラリ!" , White);//文字列表示 WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
Re: 表画面の更新が遅すぎます ( No.3 )
名前:six 日時:2006/12/07 19:18

当方の開発環境は、アメリカで買ったemachineセレロン2.8GHzに日本語のWindowsXP sp2が入ってますコンパイラはbcc5.5を使ってます。
Re: 表画面の更新が遅すぎます ( No.4 )
名前:six 日時:2006/12/08 12:49

毎度おさわがせしてます。 本日学校のパソコン(アメリカ製)で試したところ、ちゃんと上のプログラムが動き文字が表示されました。どうにも僕のパソコンがおかしいみたいで、いろいろ調べたいと思います。
Re: 表画面の更新が遅すぎます ( No.5 )
名前:管理人 日時:2006/12/08 13:22

 sixさん始めまして、DXライブラリの管理人です。  DrawString で飛んでしまいますか・・・・ フォント関係で何か処理が上手く行ってないのだと思いますが、細かい点は推測できません・・・  宜しければ DxLib_Init の前に SetScreenMemToVramFlag( FALSE );  という記述を追加して実行しても強制終了してしまうか、試してみて頂けないでしょうか?

Page: 1 |