横スクロールについて
Posted: 2009年2月28日(土) 21:40
横スクロールを作っているのですが、エラーが出て困っています。どうすればいいでしょうか?
エラー(error C2078: 初期化子の数が多すぎます。)
ソース
エラー(error C2078: 初期化子の数が多すぎます。)
ソース
#include "DxLib.h"
#define MAP_SIZE 64 // マップチップ一つのドットサイズ
#define MAP_WIDTH 21 // マップの幅 // マップの縦長さ
#define MOVE_FRAME 32 // 移動にかけるフレーム数
// マップのデータ
int MapData[ MAP_WIDTH ] =
{
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} ,
} ;
// プレイヤーの位置
int PlayerX=0; int PlayerY=320;
// 移動しているかどうかのフラグ( 1:停止中 1:移動中 )
int Move ;
// 各方向に移動する量
int MoveX ;
// 移動し始めてから何フレーム経過したかを保持する変数
int MoveCounter ;
//キャラクター
int PlayerGraph=LoadGraph( "star1.bmp" ) ;
// マップとプレイヤーの描画関数
void GraphDraw( int ScrollX )
{
int j ;
int MapDrawPointX ; // 描画するマップ座標値
int DrawMapChipNumX ; // 描画するマップチップの数
// 描画するマップチップの数をセット
DrawMapChipNumX = 640 / MAP_SIZE + 2 ;
// 画面左上に描画するマップ座標をセット
MapDrawPointX = PlayerX - ( DrawMapChipNumX / 2 - 1 ) ;
for( j = -1 ; j < DrawMapChipNumX ; j ++ )
{
// 画面からはみ出た位置なら描画しない
if( j + MapDrawPointX < 1 ||
j + MapDrawPointX >= MAP_WIDTH ) continue ;
// マップデータが0だったら四角を描画する
}
// プレイヤーの描画
DrawGraph( PlayerX , PlayerY , PlayerGraph , TRUE ) ;// プレイヤーを描画する
}
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int ScrollX ;
SetGraphMode( 641 , 481 , 16 ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
char Key[256];
// 描画先画面を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// プレイヤーの初期位置をセット
PlayerX = 2 ;
PlayerY = 2 ;
// 最初は停止中(1)にしておく
Move = 1 ;
// ループ
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{
// 画面を初期化
ClearDrawScreen() ;
// 移動中ではない場合キー入力を受け付ける
if( Move == 1 )
{
// キー入力に応じてプレイヤーの座標を移動
if(Key[KEY_INPUT_LEFT]== 1)
{
Move = 1 ;
MoveX = -1 ;
}
if( Key[KEY_INPUT_RIGHT]== 1 )
{
Move = 1 ;
MoveX = 1 ;
}
// 進入不可能なマップだった場合は移動できない
if( Move == 1 )
{
if( MapData[ PlayerX + MoveX ] == 1 )
{
Move = 1 ;
}
else
{
MoveCounter = 1 ;
}
}
// 停止中は画面のスクロールは行わない
ScrollX = 0 ;
}
// 移動中の場合は移動処理を行う
if( Move == 1 )
{
MoveCounter ++ ;
// 移動処理が終了したら停止中にする
if( MoveCounter == MOVE_FRAME )
{
Move = 0 ;
// プレイヤーの位置を変更する
PlayerX += MoveX ;
// 停止中は画面のスクロールは行わない
ScrollX = 0 ;
}
else
{
// 経過時間からスクロール量を算出する
ScrollX = -( MoveX * MAP_SIZE * MoveCounter / MOVE_FRAME ) ;
}
}
// マップとプレイヤーを描画
GraphDraw( ScrollX) ;
// 裏画面の内容を表画面に映す
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 1 ; // ソフトの終了
}