2018 ソフトウェア設計及び演習用の班Wiki
18::gr12::企画書
モジュール一覧
主人公
<クラス>
- Player
- LongAttack
- ShortAttack
- 導入したい動き
-
十字キーの入力による主人公の向き変更
移動はマップが担当するため、主人公の座標は固定 - zボタン入力による攻撃(遠距離、近距離)
攻撃力の値は武器から貰う。攻撃エフェクトを発生させ、そのエフェクトを当たり判定にする。
- 遠距離攻撃
- ゲーム座標上の主人公の座標は変わらないので、撃った弾が主人公の移動に合わせて動くようにする。
- 近距離攻撃に比べて、むやみに連射できないようにする(主人公の弾は画面内に一つしか存在できないようにする。一回弾を発射した時にリロード状態に遷移し、弾が画面外に出た際に消滅して初めて再び弾を発射できるようになる)
- 近距離攻撃
- 主人公が剣を振り、斬撃を発生させる。
- 当たり判定はあくまで斬撃。主人公の剣には発生しない。
-
敵から攻撃を受けた際の処理
グラフィックを点滅させHPを減らし、一定時間無敵になる
メニュー
概要
任意のタイミングでメニュー画面を表示させる
詳細
- 特定のキー入力でメニュー画面を表示
- ↑↓キーでカーソル移動
- 武器、アイテムアイコンを選択後特定のキー入力で詳細画面を表示
- セーブアイコンを選択後キー入力でデータをローカルストレージに書き込み
↑モジュール一覧に戻る
UI
<クラス>
-
LifeLabel
- 実装したい機能
-
画面左上に主人公のHPゲージ(或いはハートなどの記号)を表示
主人公が敵から攻撃を受けた時の処理のモジュールは別の担当なのでここではHPバー(記号)の表示とその増減ができるように目指す。 - 画面上の中央付近に主人公の装備している武器のアイコンを表示する
画面上の中央付近にフレームを用意し、そこに現在主人公が装備している武器が表示される。武器の切り替えに対応してフレーム内の表示も切り替わるように目指す。
敵AI
< クラス >
-
Monster
< メソッド >
-
setStatus(敵id,X座標,Y座標)
- 生成された敵のステータス設定(初期化)
- イベントリスナの登録
- moveNormal()
-
主人公未発見時の通常移動状態
-
主人公未発見時の通常移動状態
- moveToPlayer(プレイヤーオブジェクト)
-
接近攻撃タイプの敵が主人公発見状態時に主人公に急接近してくる
-
接近攻撃タイプの敵が主人公発見状態時に主人公に急接近してくる
- escapeFromPlayer(プレイヤーオブジェクト)
-
遠距離攻撃タイプの敵が主人公から逃げるように動く
-
遠距離攻撃タイプの敵が主人公から逃げるように動く
- attackToPlayer(マップ上での識別番号(配列番号))
-
急接近した近接攻撃タイプの敵が攻撃範囲に入ると攻撃を行う
-
急接近した近接攻撃タイプの敵が攻撃範囲に入ると攻撃を行う
- shootAttack(マップ上での識別番号(配列番号),プレイヤーオブジェクト)
- decreaseHP(プレイヤーオブジェクト)
-
敵が主人公による攻撃を受けた際にHPを減らし、ノックバックさせて少しの間無敵状態にする
-
敵が主人公による攻撃を受けた際にHPを減らし、ノックバックさせて少しの間無敵状態にする
< その他関数 >
-
makeMonster(マップオブジェクト,マップ上の設定敵数)
-
main内で現在のマップに応じて設定された敵を一斉に作成する
-
main内で現在のマップに応じて設定された敵を一斉に作成する
- changeMap()
-
マップ切り替え時に現在表示されてる敵を消去する
-
マップ切り替え時に現在表示されてる敵を消去する
- loopMove()
-
100ミリ秒毎にそれぞれの敵の状態に応じて敵の行動を選択する
-
100ミリ秒毎にそれぞれの敵の状態に応じて敵の行動を選択する
< 必要データ >
- monster_data
< 他モジュールでの使い方(表記したもののみ使用の必要あり) >
-
makeMonste(マップ番号)
- 事前に用意しておいたマップごとの敵配置データを元に指定された番号のマップの敵を生成する。マップ切り替え時に呼び出してもらえれば現在の敵の削除も同時に行う。
- ex) makeMonster(0);
-
(仮)敵オブジェクト.decreaseHP(プレイヤーオブジェクト,対象の敵のマップ上番号)
- Monsterクラスのメソッドのひとつ。使い方としては『主人公の攻撃を与えたい対象の敵』と引数として当たり判定のための『プレイヤーオブジェクト』と対象の敵のマップ上番号(この値はexist_monstersという配列の番号に値する)を与える。フレーム毎に主人公が攻撃を行った際に攻撃範囲にいる(複数の)敵を対象にしているためforループで回してすべてのマップ上の敵に適用する。
- ex) for(i=0;i<monster_count;i++) { if(exist_monsters[i].within(yusha,50)) {exist_monsters[i].decreaseHP(yusha,i);}}
-
(仮)敵オブジェクト.moveWithPlayer(主人公が動く方向)
- 現状では主人公のオブジェクトにstatusというプロパティを与え(それぞれの動く方向を表す)、それに応じてマップ上の敵全員を動かす。こちらも上同様、主人公の動き(カーソル入力)に応じて全員を動かすためexsit_monsters上の敵をforループで回して全員に適用する必要がある。しかし、こちらは少し扱いにくくなってしまっているため改善に向け検討中。
マップ表示
- 概要
- スクロールに対応したマップの構築・表示を行う関数郡
- 詳細
- PCを常にマップの中心に置き、その周囲を一定範囲に渡り描画
- マップを動かすことによりPCの移動を表現
- 広範囲のマップデータと表示用のマップデータを用意し、入力に合わせて表示用のマップデータをその都度更新
- 当たり判定を用いて、PCの行動範囲の管理
- 具体的な関数
-
make_map_c()
- 表示する範囲のマップデータを元のマップから読み取り、表示用マップデータ(var map_b)へと格納する。
- 直接データ用の変数を操作するため、引数・戻り値はなし。
- new_map_display(id)
- 引数(id)から表示に必要な変数のデータを設定する。
- mapオブジェクトを作成し、PCが初期位置にいるマップを表示する。
- 当たり判定とマップの移動(PCの移動)を表示データに反映するための関数をイベントリスナへと登録する。
- 利用するデータ
- 連想配列を用いてそれぞれのマップに関する情報を格納
- "mx":初期位置のx座標
"my":初期位置のy座標
"image":画像データの名前
"mapdata_i":マップの画像配列用のデータ
"mapdata_a":マップの当たり判定用のデータ
- 注意!
- 表示するマップタイル(マップの座標)が縦横どちらも偶数個であり、中心の座標は存在しない。そのため、中心4つのマップタイルのうち左上のタイルを中心として扱う(予定)。
最終更新日:2018/07/18 16:32:18