以下のプログラムで、マップ上を横にキャラクタを動かそうとしています。しかしながら、明らかに画面の更新が遅く、ちらつきがみえます。なにがマズイのでしょうか?一つお願いします。
// ƒ}ƒbƒv•\Ž¦Šî–{
#include "DxLib.h"
#include <stdio.h>
#include <string.h>
#include <fstream>
#include <iomanip>
#include <iostream>
using namespace std;
#define MAP_SIZE 32 // ƒ}ƒbƒvƒ`ƒbƒvˆê‚‚̃hƒbƒgƒTƒCƒY
#define MAP_WIDTH 20 // ƒ}ƒbƒv‚Ì•
#define MAP_HEIGHT 16 // ƒ}ƒbƒv‚̏c’·‚³
void DrawMap();
void GraphDraw(int image[]);
// ƒ}ƒbƒv‚̃f[ƒ^
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 ) // ‚c‚wƒ‰ƒCƒuƒ‰ƒŠ‰Šú‰»ˆ—
{
return -1; // ƒGƒ‰[‚ª‹N‚«‚½‚ç’¼‚¿‚ɏI—¹
}
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(); //— ‰æ–ʂ̃f[ƒ^‚ð‘S‚č폜
GetHitKeyStateAll( Key ) ;
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //‰Eƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽ‚ç
x++ ; //x‚Ì’l‚ð‚P‘‚â‚·
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() ; // ‚c‚wƒ‰ƒCƒuƒ‰ƒŠŽg—p‚̏I—¹ˆ—
return 0 ; // ƒ\ƒtƒg‚̏I—¹
}
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 ;
// ƒ}ƒbƒv‚ð•`‚­
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);
}
}
}
}
初心なもので、汚いソースについてはご容赦を。