スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

パワーアップの実装のまえにAnimatedSpriteについて

前回はマリオのパワーアップ状態を変数で管理し、アイテムや敵キャラに当たったら変動するところまで実装しました。
今回はAndEngineを使ってマリオのグラフィック部分を実装していきたいと思います。

player_01_mario_normal (2)

いきなりなが~い画像が出てきました。
これはマリオの全アニメーションをコマ別に表示したものです。
ゲーム内では、実際にこの画像を使用していますが、このまま使うわけにはいきません。
そこで、以下の手順にそって画像を1コマずつ描画していきます。

// 変数の宣言
public AnimatedSprite マリオ;

そういえば、久々にAndEngineが出てきましたね。
この"AnimatedSprite変数"はAndEngine独特の型名で、普通の"Sprite変数"にアニメーションを加えます。
(そういや前に説明した気もしますが…あまり気にせずここでもう一度詳しく解説していきますね。)

// コマ数の指定
マリオ.animate(new long[] { 60, 60, 60, }, 1, 3, true);

この"animate"メソッドで描画するコマを指定してやります。
第一引数の"new long[] { 60, 60, 60, },"は1コマあたりの描画のスピード値で、
値が低いほどコマ送りのスピードも速くなります。
※今回は3コマだけですが、コマ数を増やす場合は必ずここの引数も追加するようにしてくださいね。
(でないと強制停止の原因になりますので…。)

第二引数"1,"と第三引数"3,"は実際にコマを描画する範囲。(どちらも0を含みます。)
第二引数は描画する"始めのコマ"で、第三引数は描画の"終わりのコマ"になります。
コマの数は全部で18コマで割っており、
第二引数の"1,"は(0を含むので正確には)上から2番目のコマを参照し、
第三引数の"3,"は(同じく0を含むので正確には)上から4番目のコマを参照しているということになります。

2~4の間のコマを再生すると…。

player_01_mario_normal (3)

マリオが走りだすアニメーションになります!

第四引数はアニメーションを繰り返し再生するかどうかの設定。
今回は走るアニメーションなのでもちろん(true)繰り返します。

…っとまあこんな感じ。一通り仕組みが分かったと思うので今日はこの辺で切り上げたいと思います。
次回は実際にダッシュやジャンプ時の描画の割り当て方法について紹介していきますね。
スポンサーサイト

パワーアップの実装~その1~

久々の更新ですね。少し詰まり箇所があり更新が遅れました。
今回はマリオがパワーアップ(又はパワーダウン)するにつれて見た目のグラフィックも変更したいと思います。

system_03_title_back (3)

↓↓↓↓↓↓↓↓↓↓

system_03_title_back (4)

今までの段階では、ゲーム開始直後からすでに「ファイアマリオ」にパワーアップしており、アイテムをゲットしても見た目は変わらないままでしたが、
よくよく考えた結果、パワーアップの状態を分かりやすくするためにも、アイテムをゲットしたら同時に見た目も変更したいと思います。
そのほうがゲームも楽しくなりますしね。では解説に入っていきましょう!

まず、このゲームではマリオのパワーアップの段階を"現在のライフ"という変数で管理しています。
現在のライフが"1"の場合は、スーパーマリオ

player_01_mario_normal.png

現在のライフが"2"の場合は、ファイアマリオ

player_01_mario_normal (2)

現在のライフが"3"の場合は、…もっとすごいものに変化します。

player_01_mario_normal (3)

1/2スケールのマリオ「50365.png」は以前は出す予定でしたが、よくよく考えるとパワーアップと同時に当たりの判定も変更しないといけないので今回は登場しません。
(それにこのゲームの主人公は伸び縮みしませんから…。)

さて、ここで問題!
この"現在のライフ"という変数の値はどういう時に変動するでしょうか…?
…はい、そうですね!アイテムをゲットし、マリオがパワーアップしたときです。

NEC_0004.jpg

マリオとパワーアップアイテムが接触すると"itemAndPlayerPowerUpItemDecision()"というくそ長ったらしいメソッドが呼び出されます。
この中で"現在のライフ"の値をインクリメント(プラスに)しているのが分かりますよね。
(実際に効果音やスコアも追加していますがここでは省略します。)
現在のライフが1、すなわち「スーパーマリオ」の状態でアイテムを取ると「ファイアマリオ」にパワーアップするわけですが…、
逆に敵キャラなどに触れてパワーダウンした場合はデクリメント(マイナスに)しないといけないのはもう分かりますよね。

ここまで分かったところで実際にマリオがどのようにして描画されているのか見てみましょう!

…と思ったけど眠くなったので今日はここまでにします^^;
また後日記事の続きを記載していきたいと思います。ではでは~。

このゲームの今後について

ブログを始めてそろそろ半年が経とうとしており、同時にアクセス数も増えてきて少しばかりうれしい気持ちです。
ゲームのほうもだんだんと完成に近づいてきたので今日はこのゲームの今後の内容について少しだけ語ろうと思います。

Screenshot_2014-04-07-21-14-26.png

さて、このゲームを身近な人によくプレイしてもらい感想をいただくのですが、そのときに必ずといっていいほど言われるのが「このままマーケットに出すの?」っていう言葉です。

player_02_mario_normal_level_2.png     enemy_02_koopa_paratroopa_green.png

今はマリオで作っていますが、リリースの際にはオリジナルの画像と音楽に差し替えるつもりです。
(その際、主人公の外見を大工(配管工)っぽくしたり、カメっぽい敵を出すなど著作権に引っかかりそうなことはしません。もっとも別の意味でのパロディ要素を入れるつもりですが…それは後のお楽しみということで;)

一部の敵キャラやメインテーマは大体完成したので、ゲームが一通り完成したら当ブログで紹介していくつもりです。

Screenshot_2014-04-07-21-15-14.png

完成までまだ少し時間がかかりますが、必ずマーケットにアップするので是非遊んでみてくださいね!

それでは!

すり抜け床の実装

前回使用したマリオの高さを固定化するコードを使用すれば、簡単にすり抜け床を実装することができます。

Screenshot_2014-04-06-08-14-47.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2014-04-06-08-24-27.png

アスレチック面などに登場するキノコ柄のブロックは下からのジャンプ時のみすり抜けることが可能なブロック。
すり抜けブロック自体は2Dのアクションゲームでは必ずといっていいほど登場し、もちろんこのゲームにも取り入れていきたいと思います。

すり抜け床の概念は非常にシンプルで、上からの衝突判定(コードで言うと"赤いライン"の判定)をスルーし、着地の衝突判定(コードで言うと"青いライン"の判定)のみを行います。
(ちなみに上図のキノコブロックは本家のマリオでは"すり抜け判定はない"のですが、このゲームではすり抜けることが可能なブロックとして登場します。)

文頭ですり抜け床の実装には"マリオの高さを固定化するコード"追加すると記載しましたが、高さの固定とすり抜け床がどう関係しているのかちょこっとだけ解説しますね。

Screenshot_2014-04-05-19-03-07.png

上図はまだ高さを固定化するコードを入力していない状態のゲーム画面。着地を判定する青いラインがブロックに衝突したらマリオのY座標移動をストップするのですが…。
その前にマリオがブロックにめり込んでいるのが分かりますよね;

これは青いラインと赤い四角で囲った"キノコの傘の部分全体"が衝突範囲とみなしているからです。
つまりマリオがすり抜け床を飛びきれていなくても、青いラインとキノコの傘の部分が重なった時点で着地とみなされて中途半端な位置でストップしてしまいます。

この時点で何が言いたいのか分かってきたと思いますが…高さを固定化するコードを追加すれば、すり抜け床を飛びきれていなくても、1ブロックごとに決まった位置に移動で修正されるのでマリオが中途半端な位置にストップすることがなくなる、というわけです。ここまでの解説分かりましたか?

Screenshot_2014-04-06-09-42-03.png

マリオのY座標を固定する

以前行った当たり判定"下"の実装で少しだけやり残したことがあったので解説を追加します。

Screenshot_2014-04-05-18-29-52.png

当たり判定シリーズを閲覧くださった方ならお分かりかと思うのですが、矢印先の青いラインとブロックがぶつかったら「ダッシュフラグをtrue」にし、マリオのY座標移動をストップさせます。
これが前回までの段階で、今回はきっちりと1ブロックごとに"高さを固定化"するコードを追加したいと思います。

Screenshot_2014-04-05-18-50-25.png

なぜそれをするのかというと、マリオのY座標移動をストップさせるだけではマリオが高いところから落ちると上図のように若干ブロックにめり込むことがあるのです。
青いラインは常にマリオを尾行するようにしているのですがマリオのスピードが速いとラインのスピードが追いつきません。
マリオが地面に着地してもまだラインはブロックと接触していないので、結果マリオが若干ブロックにめり込んでしまうのです。非常に困りものですよね;

というわけで追加したコードを見てみましょう。

IMG_20140405_202132.jpg

ここではif文でブロックに少しめり込んだ場合、決まった位置に固定化されるように記述しています。

マリオが着地する高さは決まっており、それぞれ「384」、「352」、「320」、「288」、…などの「32の値」で割れるように調整しています。これはちょうどブロック1つ分の高さですね。
少しキッチリと固定しすぎな気もしますが、このゲームではブロックなどのオブジェクト(タイル)の出現位置は32*32の大きさで固定されているのでこれで問題ありません。

さっそく上図のコードを実行してみました。

Screenshot_2014-04-05-20-31-04.png

しっかりと(マリオの高さも含めて)4ブロック分の高さで固定されているのが分かりますよね。
マリオの大きさと、ラインの長さが違うのは気にしないでください。

次回の記事ではすり抜け床についても解説します。

プロフィール

岡本 賢治

Author:岡本 賢治
 
☆☆☆☆☆☆☆☆☆☆☆☆
 
Android専用アクションゲーム
「スーパーけんじラン」好評配信中!
 
↓↓↓↓↓↓↓↓↓↓↓↓

 
・公式サイトはこちらから
http://okamotodo.jimdo.com/

最新トラックバック

アクセスカウンター

オンラインカウンター

現在の閲覧者数:

検索フォーム

ブロとも申請フォーム

QRコード

QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。