スポンサーサイト

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

公式サイトオープン!

大変長らくお待たせしました!
ついにこのアプリのリリース日が決まりましたので、本格的に内容を紹介していこうと思います。
(ぶっちゃけ、こういう記事ってHTMLとかいじって、自作サイトで紹介するのが本来のやり方なんでしょうが、
今更ホムペ作るのめんどくさいので、ひとまずはこの記事でゲームの内容とかを更新していきます。
つまり"ここがこのゲームの公式サイト()"というわけです。…てなわけでよろしく!)

ゲームイラスト
ゲームイラスト

タイトル:      マリオっぽいゲーム(仮)
リリース日:    2015/9/13
DL価格:      完全無料
ジャンル:     ランシューティングアクション
プレイ人数:    1人(オンラインランキング対応予定)
対象年齢:     全年齢A(?)

~概要~
・テーマの異なる4つのワールドを冒険するステージクリアタイプの横スクロールアクションゲームです。
・プレイヤーはひたすら画面右へと走っていき、主な操作はジャンプと攻撃のみとなります。
・コース上に隠されたアイテムをゲットすることでゲームを有利に進めることができ、アイテムの内容はそれぞれ「攻撃アイテム」、「防御アイテム」、「浮遊アイテム」と、能力の異なった3つのアイテムが登場します。
・これらのアクション、及びアイテムをうまく使いながらコースクリアを目指します。
・またワールドの最終面にはボスが待ち構えており、倒すとお宝をゲットできます。
※倒せなくてもクリアは可能。(詳しい内容は後日更新します。)

~ストーリー~
かみんぐそーん…

~紹介動画~
かみんぐそーん…

…以上です。え?内容がカッスカス?
とりあえず、これからリリース日まで少しずつ更新していきますのでご安心ください^^;

ところで肝心なゲームのイラストがないですが、"現在イラストレーター様へ依頼中"ですので、こちらも完成までもうしばらくお待ちくださいね。
(イラストの掲載に基づいて、主人公を含むこのゲームのすべてのドット絵を入れ替えるつもりですので、こちらの方もお楽しみに!)

これからは開発メモ的な使い方も含めて、ちょくちょくと更新する予定ですので、暇が会ったらぜひ見に来てくださいね。
スポンサーサイト

タイトル画面でできること

あけましておでめとうございます!

もう2月に入りましたが今年初の更新ですね。
ゲーム作りにバイトの毎日であっという間に1ヶ月が過ぎてしまいました;

…ところで今回は一部未実装なところがありますが、タイトル画面内のUIを(じゃまな広告を削除するために)一旦完成という形で少し紹介します。

1.ゲームスタートボタン

Screenshot_2015-02-06-00-16-54.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2015-02-06-00-17-07.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2015-02-06-00-17-12.png

文字通りゲームを開始するボタン。タップすることでゲームを始められます。
いきなりゲームがスタートするのではなく、初代マリオと同じように残り人数を表示させるのですが、
その間にSprite用の画像を読み込ませるなど、いわゆる"ロード画面"的な使い方もしていくつもりです。

…現在のコードではロード処理をまったく行わず、配列番号から直接スプライトデータ(オブジェクト用の画像)を読み込んでいるため、タイルや敵キャラなど"画像が存在するオブジェクト"が画面内に出現すると一瞬だけ画面がとまってしまいます…。
Andengineのテキストによると「画像の読み込みの際にはタイミングを考えよう」旨記載されていましたが、
困ったことに「NinjaRun」のサンプルコードはゲーム中に直接画像データを読み込んでいるんですよね…。

IMG_20150206_005702.jpg

…おそらく、主人公含めて6体ほどしかスプライトが登場しないため、いちいちロードする必要がないのでしょう。
とりあえず、ここは独学で学ぶしか方法はなさそうです^^;

2.データボタン

Screenshot_2015-02-06-00-20-25.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2015-02-06-00-19-08.png

これは前の記事で紹介したデータ画面です。
ここではゲーム内で獲得したスコアをランキング形式で保存し、ボタン一つでいつでも確認できるようにします。
また、スコアだけではなくクリアの記録(ゲーム本編のクリアの実装が完了後)もここで確認できるようにしていきたいと思います。

…ところで、今回の実装で画面中央に「Online Ranking」と書かれた見慣れないボタンが追加されているのに気がつきましたか?

これは文字通り、タップすることでオンラインランキング画面へ遷移し、全世界のプレーヤーとスコアを共用することができる夢のようなボタンです。
早速スコアを登録!といきたいのですが、まだゲーム本編が完成していないのでとりあえずここは後回しにしました。
頭にも書いたとおり、オンライン関係のUIは一通りゲームが完成してからテキストを参考に実装してみようかと思います。

3.オプションボタン

Screenshot_2015-02-06-00-20-28.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2015-02-06-00-19-18 (2)

オプションは全てのゲームに必ずといっていいほどある機能ですね。
このゲームのオプションには大きく分けて三つの機能があり、
それぞれ「ボタンコンフィグ」、「マニュアル表示」、「データの削除」です。

「ボタンコンフィグ」はゲーム内で使う攻撃ボタンの位置変更をさします。
位置を変更するだけで果たして"コンフィグ機能"といって良いのか分かりませんが;

4.メールボタン

Screenshot_2015-02-07-16-46-48.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2015-02-06-00-20-49.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2015-02-06-00-20-04.png

これはこのゲームの作者である俺にファンレター()を送れるボタンです。
プレイの感想やそのほかにもゲーム内で発生した不具合などの報告をいち早く受信することで、すぐに対応できるよう心がけております。

…もちろん、バグのないゲームを目指すのがベストですが、スマートフォンの機種はさまざまで、特定の機種にしか発生しない不具合なども数多く眠っていることも確かなので、報告をいただければできるだけ修正できるようにします。
※メールのボタン自体はテキストのサンプルをそのまま持ってきました。

…最後にボタンに使っているフォントは下記のサイト様からいただきました。

文字画メーカー::無料【画像加工サイト】もじまる - MOJIMARU.COM
入力できる文字数はあまり多くありませんが、入力した文字を簡単かつ手軽に画像に出来るのでとてもお勧めです。

ちなみに起動時の"Okamotodo"ロゴは下記のリンクからです。

http://logo54.com/game/nintendo/
これは任天堂のロゴだけですが"ロゴ メーカー"でググると、色んなメーカーサイトがヒットし実に面白いです。

レベルデザインについて

1-1 (2)

早速ですが、ゲームを作るのに必要な"材料(素材)"って何だと思いますか?

・まず、"プログラム"これは基本ですよね。これが無ければゲームは動きません。
・他にも2Dゲームならドット絵、3DならCGデザインなど、"絵"も必要不可欠です。
・そして、イラストの演出等を強化するために"音楽(効果音)"も欠かせませんよね。

…大きくまとめるとこの3つの素材が必要になりますが、本当にそれだけでいいのでしょうか?
俺が今作ってる2Dゲームでは"レベルデザイン(マップデザイン)"も必要で、これが無ければいつまでたってもゲームが完成しません。

レベルデザインとは、簡潔にまとめるとプレイヤーがゴールするまでの"道のりやルートを作成する作業"のことで、
これはゲームのジャンルによって使い方が若干異なります。

では、このレベルデザインが一体どういうものなのかというと…。

----------
みんな大好きRPGではフィールドや町、お城の中までを設計する作業のことを指します。
(ちょっと海外のクリエイターさんの画像をお借りしました。少し覗いてみましょう。)

salotomountains11.jpg

こんな画面どこかで見たことありませんか?…まるで「RPGツクール」みたいですよね。
マップは配列で一マスごとに分けられており、そこに水や木などのオブジェクトを配置していきます。

----------
そしてこちらは3Dゲームのレベデザ。

wold6.jpg

これはFPSでしょうか。

RPGと違い対戦が本編のゲームでは対戦マップを作成するのがメインになります。
この場合は建物間の調整など全体のバランスを考えて組み立てないといけないため、
それこそ専門のデザイナーさんでないと完璧なマップを作り上げるのは難しいでしょうね。

後ほど記述する海外ではレベルデザインが重宝される理由はここにあるのかもしれません。

ちなみに3Dゲームのマップデザインでは一マスごとに配置する2Dゲームのマップデザインと違い、慣れれば自由に高低差をつけることが出来ます。

…さて、これらを設計する人のことを海外では「level designer」と呼ばれ、プログラマーやサウンドクリエイターと同じ開発スタッフの一員としてゲームを作っていくことが多いようですね。

しかしながらレベルデザインは日本ではあまり聞きなれない言葉だと思います。
それもそうで色々なゲームの開発内容を見てみたところ、レベルデザインは"プログラマー(もしくは3Dデザイナー)"が同時に設計してることが多く、レベルデザインだけのスタッフというのはあまりいないみたいです;

海外に比べて国内ではレベルデザイン単体のスタッフはあまり重宝されていないということなのでしょうか…。

少なからずですがレベルデザインのコツなどを記載した書籍もあるみたいで、気になった方は一度調べてみてもいいかも…。

話がそれちゃいましたね^^;すみません。
それでは、話を戻しまして…。

今回俺が作っているのはご存知2Dの横スクロールアクションゲーム。
さて、これのレベルデザインといえば…?

そうです!
コースやステージを作成する作業のことを指します。
(分かりやすいようにこれからは"コース作成"で統一します。)

----------
こちらが今作っているゲームのコース作成画面。
(特別に2面をちょっとだけお見せします。)

無題

俺が使っているのは「Tiled Map Editor」といって海外のレベルデザイナー御用達のフリーソフトです。

使わせてもらってる身分でこんなこと言うのもなんですが、少し機能不足と感じられる面があり、一つのコースを作るのに結構時間がかかったり;
それでも無料と日本語対応はうれしいですけどね^^

ちなみにプログラムの方はぜんぜんやっていませんが、一通りコースや音楽が出来上がって落ち着いたら(ゴールやミスした時の挙動も含めて)実装できていない箇所を紹介していこうかと思います。

以上、"レベルデザインについて"でした!

無敵マリオの実装

さて、ゲーム作りもいよいよ終盤(マリオでいうと7-1くらい)に差し掛かってきましたよ。
今回はマリオシリーズでおなじみの"マリオが無敵になるプログラム"を組んでみました。

Screenshot_2014-07-12-02-24-07.png

↓↓↓↓↓↓↓↓↓↓

Screenshot_2014-07-12-02-25-22.png

このゲームでは(☆取得以外の)"とある条件"を満たすとプレイヤーが無敵になります。
無敵中は敵や針もなんのその!おまけに攻撃力がUPしたりで良いこと尽くめです!

でも無敵だからといって油断してると…。

Screenshot_2014-07-12-02-39-19.png

穴に落ちてしまうこともあるので気をつけて!
穴に落ちた場合は本家マリオ同様"ミス扱い"となります。

プログラムコードの内容は「無敵フラグがONのときに敵に触れるとやっつける」という処理を行うだけのシンプルな内容ですが、その前に一つやらなければいけないことがあります。

"プレイヤーの変化"ですね。

「いやっふー!今の僕は無敵状態だぞ!」とアピールするために現在のプレイヤーであるマリオのグラフィックを輝かせましょう!

player_01_mario_normal.png

これはマリオの全てのグラフィックが収録された画像データで、ここから走る動作やジャンプ時の動作など、使いたい画像だけを切り取って表示しています。
そうです。以前勉強したAnimatedSprite(Animatedスプライトについての解説を開く)ですね。

…それにしてもこの画像長すぎゃしやせんか^^;
縦だけじゃなく横にも同じ大きさの画像を並べて使いたい部分だけを抜き出すプログラム(それこそマップチップのように)が組めたらいいのに。今のコードでは無理みたいですね。

まあ「俺は長くても気にならないぜっ!」って方ならいいのですが…。
でも、困ったことにこれ以上長くしたい場合など、画像の長さが2000ピクセル(本当はもうちょいあるけど目安としてはこのくらい)を超えてしまうと、問答無用で"真っ黒な画像"に切り替わってしまうので注意が必要です。

Screenshot_2014-07-12-02-50-25.png

※長くしすぎると上図のようにプレイヤーが真っ黒になります。

これでも色々と画像の不要な部分(以前あったマリオの棒立ちのコマとか、無敵の点滅のコマの一つ目)を削り、何とか画像が表示されるまでに収まりました;

ちなみにこれ以上アニメーションを増やしたい場合は、無理せず複数のマリオ変数を作ると良いかもしれませんね。
無敵でないいわゆる"ノーマル状態"のマリオのAnimatedSprite変数と、無敵状態のマリオの輝く姿のみを描画した"無敵状態"のマリオのAnimatedSpriteの二つを管理するなど、探せば色々と方法はあるはずです。(ただ、この場合処理がめんどくさそうですが…。)
もっとも、プログラムは楽をしてなんぼなので出来るだけ簡単な方法でゲームを動かしたいですね。

…では気を取り直してプログラムコードの中身を見てみましょう!

// 敵キャラとプレイヤーの接触処理
public void enemyAndPlayerContact() {
// 点滅状態でない場合のみ接触
if (状態フラグ点滅 == false ||
プレイヤーの上昇移動フラグ == false && プレイヤーの下降移動フラグ == true) {
// マリオと敵キャラの衝突判定
if (((Sprite) getChildByIndex(敵キャラ)).collidesWith(
marios.playerMarioNormal)) {
float 判定遊び = 0;
float 接触距離 = Math.abs((getChildByIndex(敵キャラ)
.getY() + ((Sprite) getChildByIndex(敵キャラ))
.getHeight() / 2) - (marios.playerMarioNormal
.getY() + (marios.playerMarioNormal
.getHeight() / 2)));
// クリボー!
if (getChildByIndex(敵キャラ).getTag() ==
Goomba.TAG_ENEMY_01_GOOMBA) {
判定遊び = 0;
if (接触距離 < marios.playerMarioNormal.getHeight()
/ 2 + ((Sprite) getChildByIndex(敵キャラ)).getHeight()
/ 2 - 判定遊び) {
// 無敵の場合、問答無用でやっつけ
if (状態フラグ無敵 == true) {
SoundPlay.seDefeat.stop();
SoundPlay.seDefeat.play();
enemyAndPlayerJumpAttackDecision(getChildByIndex(敵キャラ).getTag());
// 無敵でない場合、フラグ分岐
} else {
// プレイヤーが何もしない場合、敵キャラのこうげき
if (プレイヤーのダッシュフラグ == true || プレイヤーの上昇移動フラグ == true) {
enemyAndPlayerNormalDecision();
// プレイヤーが落下中の場合、プレイヤーのジャンプこうげきが炸裂
} else if (プレイヤーのダッシュフラグ == false && プレイヤーの上昇移動フラグ == false) {
SoundPlay.seTap.stop();
SoundPlay.seTap.play();
// 敵キャラとかを踏んだことを証明する
連続で踏んだか否か = true;
// 画面を放すと小ジャンプ
if (タッチフラグジャンプ == false) {
踏み台ジャンプの上昇移動値 = 24;
踏み台ジャンプの下降移動値 = 4.8f;
// 画面を押すと大ジャンプ
} else {
踏み台ジャンプの上昇移動値 = 48;
踏み台ジャンプの下降移動値 = 9.6f;
}
enemyAndPlayerJumpAttackDecision(getChildByIndex(敵キャラ).getTag());
}
}
}

// 省略…

// プクプク!
} else if (getChildByIndex(敵キャラ).getTag() ==
CheepCheep.TAG_ENEMY_13_CHEEP_CHEEP) {
判定遊び = 0;
if (接触距離 < marios.playerMarioNormal.getHeight()
/ 2 + ((Sprite) getChildByIndex(敵キャラ)).getHeight()
/ 2 - 判定遊び) {
// 無敵の場合、問答無用でやっつけ
if (状態フラグ無敵 == true) {
SoundPlay.seDefeat.stop();
SoundPlay.seDefeat.play();
enemyAndPlayerJumpAttackDecision(getChildByIndex(敵キャラ).getTag());
// 無敵でない場合、フラグ分岐
} else {
// プレイヤーが何もしない場合、敵キャラのこうげき
if (プレイヤーのダッシュフラグ == true || プレイヤーの上昇移動フラグ == true) {
enemyAndPlayerNormalDecision();
// プレイヤーが落下中の場合、プレイヤーのジャンプこうげきが炸裂
} else if (プレイヤーのダッシュフラグ == false && プレイヤーの上昇移動フラグ == false) {
SoundPlay.seTap.stop();
SoundPlay.seTap.play();
// 敵キャラとかを踏んだことを証明する
連続で踏んだか否か = true;
// 画面を放すと小ジャンプ
if (タッチフラグジャンプ == false) {
踏み台ジャンプの上昇移動値 = 24;
踏み台ジャンプの下降移動値 = 4.8f;
// 画面を押すと大ジャンプ
} else {
踏み台ジャンプの上昇移動値 = 48;
踏み台ジャンプの下降移動値 = 9.6f;
}
enemyAndPlayerJumpAttackDecision(getChildByIndex(敵キャラ).getTag());
}
}
}
}
}
}
}


enemyAndPlayerContact()メソッドは全ての敵キャラとの接触判定を見るメソッド、つまりプレイヤーと敵キャラが接触したときに呼び出されるメソッドです。
ここではクリボーとプクプクしか紹介していませんが、「// 省略…」の中に他の敵キャラの処理も書いています。
全部載せると非常にコードが長くなってしまうので省略させていただきました。

それでは、まずクリボーの接触コードを見てみてください。
敵キャラに触れたときプレイヤーが無敵状態であるか否かを判断していますね。
ここで無敵状態だった場合は敵キャラをやっつける"enemyAndPlayerJumpAttackDecision(getChildByIndex(敵キャラ).getTag())"という長ったらしいメソッドが呼び出されます。
このメソッド内では触れた敵キャラを削除し、得点をプラスするなどの処理が行われております。

次にプレイヤーが無敵状態ではない場合、さらに分岐が行われるのですが、これは単にプレイヤーが落下中か否かを確かめてるだけです。
プレイヤーが落下中ではなく地面を走っている場合は敵キャラの攻撃が行われミスになりますが、落下中の場合は踏んだとみなされ無敵状態で使ったものと同じ"enemyAndPlayerJumpAttackDecision(getChildByIndex(敵キャラ).getTag())"メソッドが呼び出されるというわけです。

「でもこれだとプレイヤーがどこから触れても踏んだことになるじゃん!」って思った方もおられると思いますが、実はこれでいいのです。
初代マリオをやりこんでらっしゃる方ならお分かりだと思いますが、マリオ1と2はプレイヤーが落下中の場合、マリオの全ての部分に踏みつけ判定があるんですよ!
(このテクをいかせばにっくきハンマーブロスも頭突きでイチゲキコロリですがそれはまた別のお話…。)

…とまあ、一応無敵のプログラムはこんな感じです。
だんだんとゲームの雛形が完成に近づいてきたので、コースやBGMも作っていかないといけませんね。
これからはあまり更新出来ないかもしれませんが、また暇があったら見てやってください。では!



~おまけ~

Screenshot_2014-07-12-02-57-52.png

ドット絵を差し替えてみました。

ではでは^^;(本当の本当に終わり)

トラップの紹介

アイテムと敵キャラも紹介し終わり、最後にこのゲームに登場するトラップ(仕掛け)を紹介したいと思います。

1.ドカン

Screenshot_2014-06-26-03-21-45.png

マリオではお約束といって良いほど登場し、また隠しエリアへいけることでも有名なオブジェクトですよね。
しかし、このゲームでは残念ながら隠しエリアへワープするといった要素は入れないつもりです。
(よって本家マリオでもあった空中ボーナスへいける仕掛け(豆の木など)も一切登場しません。)

…ではこのドカン、何に使用されるのかというと、隠れていた敵キャラが出現する仕掛け、といえば…?

Screenshot_2014-06-26-03-01-09.png

そう、パックンフラワーですね。こいつが登場するのみの仕掛けになるというわけです。

2.ジャンプ台

Screenshot_2014-06-26-03-04-25.png

本家のマリオにもあった仕掛けです。
通常のジャンプでは届かない箇所もこれがあればご覧のように…。

Screenshot_2014-06-26-03-05-01.png

ひとっ飛び!

ジャンプ台と地面の接触を判定する"青いライン"が触れたとき、通常のジャンプ時よりも多くY座標に数値を代入してやります。要はジャンプの処理コードを使いまわしてる、ということですね。

3.リフト

Screenshot_2014-06-26-03-12-48.png

これも本家マリオにあった仕掛けですが、こちらの仕掛けは色によって効果が異なります。

黄色いリフトは"ただのすり抜け床"で乗っても動きませんが、厄介なのは赤と青いリフトです。

Screenshot_2014-06-26-03-13-45.png

赤いリフトはマリオが飛び乗ると上へとスクロールするようになっています。
ただ、これはマリオが飛び乗っている間だけなので、ジャンプなどしてマリオが一旦リフトから離れるとリフトも停止します。

青いリフトは赤とは逆で、マリオが乗っかると落下するようにプログラムされています。
どちらのリフトもジャンプ次第で動きを変えられるというわけですね。

…ちなみに本家のマリオであった下から上へ(また左右へ)スクロールするリフトを覚えておりますでしょうか。

Alejandro_4_89.jpg

※画像は本家「Super Mario Bros.」のものです。

ワープゾーンへ行くために皆さんが使用した馴染み深いリフトですね。
ちなみに俺はこのリフトを使わなくてもドカンのハマリを利用して、ワープゾーンへ行くことができますよ!

…オホンッ!

で、このゲームには上記リフトのように最初から動いている足場の仕掛けは出さないつもりです。

理由は自動スクロールのゲームで動かす仕掛けを出したところでも、常に移動や回避のパターンが一緒になってしまうからです。
本家のマリオのようにプレイヤーを自由に動かせるのであれば一旦停止した後、タイミングを見計らって飛び渡るといったこともできるのですが、
先ほども解説したとおり、このゲームは自動スクロールなので動かす仕掛けを出したところでも、
常に飛び渡るタイミングは同じわけで、壮大なプログラムを組んでもあまり意味のない仕掛けになってしまうのが目に見えているからです。(ただ、本家マリオ2の7-4(C-4)のようにスクロールリフトを連続で出すと攻略パターンが変わって面白そうですが、とりあえずこれは次回作のネタとしてとっておきます^^;)

…では次へ行きましょう!

4.はり

Screenshot_2014-06-26-03-14-07.png

これは本家マリオ(1)には登場しない仕掛けですね。
上、右、下の3種類の方向があり、どれもマリオが触れるとミスになります。
ただ、カプコンさんの鬼畜アクションゲームみたいに
触れたら問答無用で「テュンテュンテュンテュン…」にはならないのでご安心を!(…わからない人は良いです;)
キノコを取っている状態や、後ほど実装する無敵状態では触れても平気ですから。

…とりあえず代表的な仕掛けは一通り紹介しましたが、

tile_39_brick_block_small.png tile_58_change_block_red.png tile_59_change_block_green.png tile_63_goal_ring_left.png

このほかにもまだ紹介していない仕掛けが登場するかもしれませんね。

プロフィール

岡本 賢治

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

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

最新トラックバック

アクセスカウンター

オンラインカウンター

現在の閲覧者数:

検索フォーム

ブロとも申請フォーム

QRコード

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