戻る 06. 画像の部分表示 次へ


さて,前回で画像の表示は出来ましたね。
しかし,いざゲームで使おうと思うと画像の部分表示が必要です。
それでは今回は画像の一部分だけを表示する方法です。

これはメモリにデータが連続して格納されている事を利用します。

GBAでは8*8を一つのキャラとして使うのが画面サイズ的に多いと思うので
8*8を表示するとして説明します。

//=============================================================================
//	関数  :GrPtn (X座標,Y座標,パターン番号)
//	機能  :横128ドットの画像ファイルから8*8パターンの画像をx,yに描画
//=============================================================================
void GrPtn(int x,int y,int ptn)
{
	int PtnX,PtnY;
	int yy;
	if(ptn<16){PtnX=ptn*8;PtnY=0;}
	else{PtnX=(ptn-16)*8;PtnY=8;}
	for(yy=y;yy<y+8;yy++){
		memcpy(Back + (x + yy * 240) ,sprite+(PtnY*128+PtnX), 16);
		if(ptn<16){PtnX=ptn*8;}else{PtnX=(ptn-16)*8;}
		PtnY++;
	}
}
//============================================================================
ざっと載せましたがこれが画像表示ルーチンです。
何をしてるかと言うと画像データから指定領域をVRAMに転送しています。
変数ptnは8*8で分割された画像データに通し番号を打っていって
それの何番か?をあらわしています。

メモリに連続して格納されている事を利用してドット単位でコピーなんかせず
横は8ドットずつ転送しています。
これをドット単位にするとかなり遅くなってしまうので気をつけてください。
特に描画に関する部分は一番速度に影響します。

これでゲームを作る準備は整ったと思いますので色々と表示してみましょう。

スクリーンショット

以後執筆中