0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ゲーム制作16日目!!

Posted at

今日のメニュー

・リザルト画面について
・ポーズ画面について
・マウス従属オブジェクト消去
・敵について

リザルト画面について

リザルト画面を整え、記録が表示されるようになりました。
sceneを作成する関数にゲームの結果の引数を与え、その値を表示します。
表示方法はゲーム中に表示する方法と同じく、画像として表示します。
この方法についてはゲーム制作13日目!!を参照。

ポーズ画面について

ゲーム中に一時停止が可能になりました。
ゲーム中に上ボタンを押すことでゲームを一時停止することができます。
一時停止状態からの復帰には開始時と同様に上ボタンを押します。

一時停止の画面は新しいシーンとして作成しました。
このシーンは、背景を透過しゲーム画面が見えるようにするために、
pushScene関数を使用して、元のゲーム画面にかぶせています。
他のシーンがかぶせられている間、もとのシーンの処理は進行しないため、
popScene関数を使用して、元のシーンを復帰させない限り、一時停止状態を維持することができます。

一時停止シーンの作成で注意した点は、
上ボタンの長押しによりシーンの切り替えが連続で起こらないようにすることです。
判定条件を単に「上ボタンが押されている」とすると、
上ボタンが押されシーンが移ったとしても、ボタンを離す前に新しいのシーンの判定が行われ、
すぐにもとのシーンに戻ってしまうことがあります。
これを防ぐため、一度上ボタンを離した上で、再びボタンを押さないとシーンは移り変わらないようになっています。
これは、「ボタンが押されていない」という条件によって真となるフラグを用意することによって実現しています。

以下がシーンのソースコードです。

		var createPauseScene=function(){
			game.fps=24;
			var scene=new Scene;
			var backFlag=false;
			scene.backgroundColor='rgba(0,0,0,0.9)';
			scene.onenterframe=function(){
				if(!game.input.up)backFlag=true;
				if(backFlag&&game.input.up)game.popScene();
			}

			return scene;
		};

マウス従属オブジェクトについて

すでに実装されていた機能、マウス従属オブジェクトは、使用しないことにしました。

敵について

敵を実装しました。

動き方について

とくに頭の良い追いかけ方はせず、ランダムに動きます。

ランダムの詳細について説明します。
オブジェクトの作成時に次のことが乱数によって決定されます。
・速度
・出発辺
・出発位置
・角度変化

敵は画面の見えない位置で生成され、画面中心に向かって進みます。
画面のどの辺から登場するかを決定する変数が「出発辺」です。
一辺のどの位置から登場するかが「出発位置」で決定されます。

敵オブジェクトは毎フレームごとに以下の処理を行います。
・角度変化に応じて、現在角度を修正。
・速度、現在角度に応じて、現在位置を修正。
・画面からはみ出たら消去。

敵オブジェクトは一定フレームごとに以下の処理を行います。
・乱数を使用して角度変化の変更。

以上の処理から、敵オブジェクトは、弧を描いて進みます。
この弧は一定歩数ごとに変化します。

討伐について

敵は倒すことができます。
敵をマウスで10回クリックすると倒すことができます。
これは、ボタンの処理の応用で行うことができます。

Spriteオブジェクトはontouchstartというプロパティに関数を代入することで、
クリックされた時の処理を定義することができます。
このイベントが発生するごとにカウンタを進め、10回になった時点でオブジェクトの消去処理を行います。

消去時、簡単なエフェクトを用意しました。
小さくなりながら、透明になり、大きさが0になった時点でオブジェクトが消去されます。
これは、scaleX,scaleY,opacityの値を操作することで実現します。
エフェクト中、衝突判定が行われないようにします。

敵の発生について

敵の発生はエネミーゲートとというオブジェクトを用意し管理します。
エネミーゲートは敵の管理と発生を行います。

敵の管理は配列を使用して行います。
要素数は有限です。

発生について説明します。
ゲーム開始時、一体の敵が作成されます。
敵が作成されるたびに、ゲートは次の敵が発生するまでの時間を決定します。
この時間は乱数を使用します。
具体的な計算式は次の通り。単位はフレームです。
(待ち時間)=200+(0から1の乱数)×200-5×(子供の数)
これは、初項が一定時間の定数、第二項が乱数によって伸びる時間、第三項が成長による難易度変化です。
この数値は毎フレームデクリメントされ、0以下になると次の敵が発生します。
計算時、運悪く0以下の値が出た場合、即時次の敵が発生します。
ただし、配列に空きがない場合、敵の発生は行われません。

todo

画面からはみ出したときに、敵がステータス画面よりも上に描画されてしまい、
見えては行けない部分が見えてしまう状況になっています。
以下のサイトを参考にさせていただき、
今日中に改善しようと思います。

Spriteの表示順について参考にさせていただくサイト。
416番地【enchant.js】Nodeの表示順 v0.6対応版【Advent Calendar】

ソースコード

GitHubからどうぞ

今日の成果

ゲーム画面へ飛びます

今日の感想

ベースだけ完成してて、
あとは追加機能とかつければいいだけのこの段階って一番おいしいですよね。
計画不足過ぎて楽しむ時間がすごく短いのが残念です。。。

あとgithubのreadmeなど全然整えていないのでなんとかせねば

どういうのが読みやすいのかわからないのですが、
改行がすごくメールチックですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?