背景スクロールを応用し、キャラクタが移動すると背景がスクロールさせることを考える。
キャラクタは左右のカーソルを押しても動かないようにし、代わりに背景をスクロールさせることにより、移動しているように見せる。
【背景描画処理】
カーソルキーの右を押せば左に、左を押せば右に背景が流れるようにするため、スクロール幅を増やす処理をはずす。
【キャラクタ移動処理】
カーソルキーの右を押したらスクロール幅を−1し、左を押したら+1する。
【初期化処理】
//----------------------------------------------------------------------------- // 関数名 : GameInit() // 機能概要: スタート処理初期化 //----------------------------------------------------------------------------- void GameInit(HWND hWnd) { //------------------------------------------------------- 各変数の初期化/* 背景スクロール */Back_X = 0;/* 自キャラ(カーソルキーで移動) */ StatusInit(&MyChara, 0, 0, 40, 40, 310, 230, 4, 4); /* ゴキブリ(動かない) */ StatusInit(&Goki, 64, 394, 96, 426, 400, 300, 0, 0); //------------------------------------------------------- フレームナンバーセット g_FrameNo = GAME_FRAME; }※10-2と同じ
【背景描画処理】
//----------------------------------------------------------------------------- // 関数名 : BackDraw() // 機能概要: 背景描画処理 //----------------------------------------------------------------------------- static void BackDraw(void) { HRESULT hRet; RECT rcBack; /* 1枚目を描画 */ SetRect(&rcBack, Back_X, 0, 640, 480); // 左側に表示する画像の矩形をセット hRet = g_pDDSBack->BltFast(0, 0, g_pDDSGame, &rcBack, DDBLTFAST_NOCOLORKEY); if (hRet != DD_OK) return; /* 2枚目を描画 */ if (Back_X > 0) { SetRect(&rcBack, 0, 0, Back_X, 480); // 右側に表示する画像の矩形をセット hRet = g_pDDSBack->BltFast((640 - Back_X), 0, g_pDDSGame, &rcBack, DDBLTFAST_NOCOLORKEY); if (hRet != DD_OK) return; } }※背景の移動処理を削除した
【キャラクタ移動処理】
//----------------------------------------------------------------------------- // 関数名 : CharMove() // 機能概要: キャラクタ移動処理 //----------------------------------------------------------------------------- static void CharMove(void) { /* 天使の移動 */ if (KeyTbl[VK_LEFT] & 0x80){Back_X--;if (Back_X <= 0)Back_X = 640;}if (KeyTbl[VK_RIGHT] & 0x80){Back_X++;if (Back_X >= 640)Back_X = 0;}if (KeyTbl[VK_UP] & 0x80) MyChara.y -= MyChara.move_y; if (KeyTbl[VK_DOWN] & 0x80) MyChara.y += MyChara.move_y; }※スクロール幅の増減を行う処理を追加した
※キャラクタは真ん中から動かない(上下は可)
第10章2のプログラムを改造する。上記修正を行い、キャラクタの左右の移動に背景が流れることを確認しなさい。
[ 実行結果サンプル ]
練習問題1のプログラムを修正する。左右の幅100ピクセルまでは通常の移動を行い、それ以降は背景がスクロールするように改造しなさい。
[ 実行結果サンプル ]