ゲムキTOP > ブログTOP

ハルポップの徒然雑記

ためになる話、どうでもいい話など

マリオの完コピvol.34 BMFONTデータ作成

ハルポップ 2016-06-17 23:59:15 pv:1691


画面上部のスコア、コイン、残りタイムのテキストを表示。これらのフォントは画像ファイルとして使用している。

こちらのBitmap Font Generatorを使えばBMFontのデータが作れるのだが、これは元々用意されているフォントファイルがないと無理。
http://www.angelcode.com/products/bmfont/
ドラクエっぽいフォントはあったのだが、8ピクセルサイズにするとどうしても崩れて表示されてしまう。
だからやめて、画像からBMFONTデータを作る方針へ。

こちらの記事にあるShoeBoxというツールを使えば画像から出力できるようだけど、8×8ピクセルのサイズだと判定がうまくできず断念。
http://developer.wonderpla.net/entry/blog/engineer/Cocos2dx_BitmapFont/

だから自分でデータファイルを手打ちして作る事にした。
この記事に書かれているフォーマットも参考に。
http://sarudeki.jp/fernweh/fnt-fntfile/

それでうまくいけた。

ただAndroidの実機でフォントを見ると端のほうにゴミが見えている。もっと間隔を広げて作る必要があるのか。ここは今はスルーで。

マリオの完コピvol.33 リファクタリング

ハルポップ 2016-06-16 23:40:41 pv:1524
メインソースに書き続けているので、機能ごとに分割してみようと思い、マップクラスやプレイヤークラスを作って、ソースを修正。定数用のヘッダーも作った。
挙動が変わらないようにしてソースを変える事をリファクタリングと言う。

ただクラスはメンバ変数をpublicにして構造体のように使っているので美しくはない。
そこで尊敬する中村光一先生のお言葉をお借りする。「文法や作法が間違っていても、結果としてちゃんと動いていたら、ゲームができたら、ゲームが面白かったら、それでOK」

また、速度はint型にして固定小数として使っていたので、float型に修正。
当初は全部int型にしてファミコンと同じように固定小数でやろうと思ってたけど、使う箇所全部で割り算が必要でコードが見辛くなる。使う変数によっては4096で割ったり256で割ったりとバラバラ。
だからfloatに統一した。

マリオの完コピvol.32 リプレイデータ再生とタイトル画面

ハルポップ 2016-06-15 19:32:13 pv:1736


リプレイデータの再生、これを作ってみたかった。
リプレイの仕組みは、コントローラーの操作を再生するというもの。
もしゲーム中に乱数を使っていたらSEED値も同じにする必要がある。

リプレイデータの構造体は意外とシンプルで
・変化があった時のフレーム数
・コントローラーの状態
の2つで良い。

コントローラーの状態の変数はintの変数にしてビット演算を使用すると32個のボタンまで格納できる。

ビットをオンにする式は
フラグ |= A

ビットをオフにする式は
フラグ &= ~A

ボタンを押した瞬間を判定するには、前フレームのボタン変数を保持しておき、今回のフレームと比較して変化のあったビットが押された瞬間のボタンである。
if (!(prevInput & KEY_A) && (nowInput & KEY_A)) {
// Aボタンが押された瞬間
}

マリオの完コピvol.31 敵の角の地形判定

ハルポップ 2016-06-15 00:25:11 pv:1670


敵キャラはマリオと違ってブロックの端で早く落下する。
地形との当たり判定を、上半分は大きい四角で、下半分が小さい四角としてみた。

マリオの完コピvol.30 マップスクロール改

ハルポップ 2016-06-13 23:29:20 pv:1764
実はマップスクロールの速度はマリオと等速ではなく、マリオより若干遅くなっており、マリオが画面の一定の箇所まで来るとそこから等速となる。
何のためにこういう仕様にしたのかが分からないが、マリオの座標と同期しない事により、ゴールすると砦がうまい具合に中央に見えるようにスクロールされる。

その仕様を取り入れてみた。


↑画面上部の固定されたコインの位置と比較すると少しずつスクロール境界線の位置が変わっているのが分かる。
戻らずにダッシュを続けていると先の見える範囲が狭くなるため難易度は高くなる。