GameCorder.net

7.マリオを描画する

今回はマリオを描画して、キー操作で動かそうとおもいます。
そのためには、マリオの画像と、描画する関数が必要です。
では、描画関数をmario.jsに書きましょう。

/*
	描画
*/
cMario.prototype.Draw = function(img,tex,offsetX,offSetY){
	if(this.Dir == LEFT_DIR)
	{
		img.save();		// canvas状態を保存
		img.transform(-1, 0, 0, 1, 0, 0);	// 画像を左右反転させる
		img.drawImage(tex, this.AnimX, 0, 32, 32, -this.PosX - 32, this.PosY, 32, 32);
		img.restore();	// canvasの状態をsaveされた状態に戻す
	}
	else
	{
		img.drawImage(tex, this.AnimX, 0, 32, 32, this.PosX, this.PosY, 32, 32);
	}
}
		

引数は、
img = すでに作られたcanvas
tex = マリオのテクスチャ
です。

今回の画像は、右方向のマリオの画像しか用意していないので、
マリオが左に向いたときは、画像を左右に反転させないといけません。
その為にimg.save()以下でcanvas状態を変えています。
ただ、ある程度の遅延が発生すると思うので、左右の画像を用意したほうがいいですよね。

次は、canvasのdrawImageです。
ここでは、ちびマリオを描画します。サイズは32×32なので、32が切り取るサイズになります。
this.AnimXはアニメーションさせる為の変数です。どこから画像を切り取るかの範囲になります。
では、次にキーでマリオを動かす関数を見ていきます。

/*
	動き
*/
cMario.prototype.Move = function(bRight,bLeft){
	// 右キーが押された
	if(bRight)
	{
		this.Dir = RIGHT_DIR;
		this.PosX += this.AddNumX;
		// 何回でアニメーションを変えるか
		if(this.AnimCnt++ >= ANIM_CHANGE)
		{
			if(this.AnimX == 0)
			{	
				this.AnimX = 32;	// 次のコマへ
			}
			else
			{
				this.AnimX = 0;
			}
			this.AnimCnt = 0;
		}
	}
	// 左キーが押された
	else if(bLeft)
	{
		this.Dir = LEFT_DIR;
		this.PosX -= this.AddNumX;
		// 何回でアニメーションを変えるか
		if(this.AnimCnt++ >= ANIM_CHANGE)
		{
			if(this.AnimX == 0)
			{	
				this.AnimX = 32;	// 次のコマへ
			}
			else
			{
				this.AnimX = 0;
			}
			this.AnimCnt = 0;
		}
	}
}
		

ここでは、アニメーションをさせる為に変数、AnimCntとAnimXを使っています。
一定回数動いたら、次にアニメーションに移るためにAnimXを次のコマ文移動して、
同じ回数動いたら、またもとのコマに戻しています。
今回アニメーションがフタコマなので、0,32の範囲でOKです。
これで、アニメーションができるようになりました。
後は、これらの関数をメインループに入れれば実行できます。

今回のサンプル