2018 ソフトウェア設計及び演習用の班Wiki

18::gr04::saitoh

5/18 モジュール分け

  • 戦闘システムを担当

6/1

  • 攻撃時のシステムを作成

6/22 戦闘画面、BGM

  • テキストボックス
  • 戦う、アイテム、土下座(仮)コマンド
  • LV
  • HPバー
  • HPを数値で表記
  • 戦うコマンド→攻撃モジュールへ移行
  • アイテムコマンド→レポート、過去問、単位をそれぞれ選択するかリターン
  • タイトル画面とOPで流すBGMを作成(ファミマの入店音と某タイトル曲を混ぜたアレンジ) 以上を作成

各モジュールについて

  • 白枠のテキストボックスclass:Textframe
    • テキストボックスや、FIGHT、ITEMコマンドなどを囲むためのボックスをかけるようなクラスを作成。
    • 引数はx y z u r g b(x座標,y座標,幅、高さ、rgbは色の設定);
    • 色を変えると枠ではなく、ボックス内の色が変わる。
  • 戦闘画面から、FIGHTやITEMを選択するまでの一連の流れをClassでまとめた。

6/29 戦闘画面

  • テキストボックスを相手の攻撃シーンに移行するとき、相手の攻撃(弾幕)合うようにtlを用いて移動させるようにした。 delayをうまく使わないと表現できず苦労した。
  • dogezaコマンドをランダム関数を用いて、戦闘シーンから抜ける場合と抜けられない場合を作成

発表用及び今まで作った各モジュール説明

  • 戦闘システム、戦闘画面の作成を担当
    • 最終的にcomanndclass.jsというソースファイルをui.enchant.jsのようにプラグインのような使い方ができるようにまとめた。chara.jsから戦闘シーンに入る際にcommandpart();で呼び出されている。

Screenshot from 2018-08-03 01-03-01.png

  • はじめの戦闘画面
    • 文字はui.enchant.js内のmutabletextを使用
    • 敵を表示
      • 敵はenemyidというグローバル変数を用意しその数値によって、用意している複数の敵のクラスから代入
    • 敵のHPを表示
      • 敵のクラス内にあるenemyhpというグローバル変数代入して表示
    • 動くテキストボックスを表示
    • 自キャラのLVを表示
    • 自キャラのHPを数値とバーで表示
      • バーは幅とhpが減る割合を合わせる計算をして、hpが減った分だけバーも減るようになっている。
      • 実際にはsetinterval関数によって赤色のバーを上塗りしている。
    • FIGHT,ITEM,DOGEZAコマンドを表示

Screenshot from 2018-08-03 01-08-35.png

  • FIGHTを選択(相手にダメージを与える場面のモジュールを表示)
    • テキストボックスが動いて攻撃シーンに移る。縦のバーが動いて再度クリックすると動くバーが止まり、赤いバーに近いほど攻撃力が高くなり、相手にダメージを与えることができる。(バーのx座標を数値として取ってきて攻撃力として計算)。こちらの攻撃が終わったあと、自動的に相手が弾幕攻撃をするモジュールに移る(こちらは玉川のクラス参照)
    • 攻撃によって相手のHPを0にした場合、敵を倒してマップシーンに遷移する。なおこの時レベルが上がり各ステータスが上昇する。
    • FIGHTを選択してから、相手の攻撃が終わるまでに重複してFIGHTを選択できるのだが、その場合にいつまでもFIGHTの画面が残り続けたりするバグがある。setTimeoutでシーンの移り変わりをしている関係上その間に新しいシーンが来ると良くない?
  • ITEMを選択

Screenshot from 2018-08-03 01-16-20.png

  • ITEMを選択
    • ITEM選択画面に移る。CREDIT(単位)、OLDTEST(過去問)、REPORT(レポート)、RETURN(戻る)を選択できる。 CREDIT、OLDTEST,REPORTはマップ段階で拾ってきたアイテムの数に応じて数値が対応。
    • CREDIT…攻撃力がかなり上がる。
    • OLDTEST…体力が全回復する。
    • REPORT…防御力が上がる。
    • RETURN…前の画面に戻る。
    • アイテムを使用したあとは相手の弾幕攻撃シーンに遷移。

Screenshot from 2018-08-03 01-29-16.png

  • DOGEZAを選択
    • 低確率でお許しをもらえる(倒した時と同じ処理になりマップシーンへ遷移する)。めちゃピンチの時に使うとワンチャンあるかも?なお、お許しがもらえなかった時は相手の攻撃に移る。
    • ただしお許しをもらえた場合、敵を倒した処理になるがレベルはアップしないため、次の戦闘がしんどくなるよ。
  • 他のモジュールとのつなぎ
    • 相手のHPが0になった時戦闘が終了しmap画面に移る。
    • 自キャラのHPが0になった時→GAMEOVERシーンに遷移する。
    • ラスボスのHPが0になった時→EDシーンに遷移する。

感想

  • 最初、Javascript、enchant.jsの仕様がまったくわからず、Spriteとはなんぞ、HTMLにソースを記述すればいいのかなど、右往左往の状態から始まったが、自分で調べたり教えてもらったりしてるうちに自然と、この処理はどうすればうまくいくかがなんとなくわかるようになり、なんとか完成までこぎつけた。
  • 自分のモジュール内で苦労した点は、テキストの白い枠が動くような動作をさせて相手の攻撃シーンでも残り、かつ相手の攻撃が終わったら枠が戻る処理を書くのが大変であった。実際今でもFIGHTを連続で押すとバグってしまうのが心残りである。また、ソースファイルに関しても簡潔にまとめられる部分をモジュール分割が曖昧のためにやたら長くなってしまっている記述も見られるので、モジュール分割の大切さをしった。
  • そして、やはり一番大変だったのは他の人が作ったモジュールとの統合作業であった。自分で作るのと共同作業とでは難しさのベクトルが違うというか、情報の共有が以下に大事かということを知った。特にモジュール分けに抽象的な部分が多く、統合した際に一人ひとりのモジュールが他のモジュールと干渉しあう場面が多々あった。特にアイテムやキャラのステータスの受け渡し部分において、どのような変数にするかなどを後半まで後回しにしてたのがゲーム制作の進行が遅れた大きな原因であったので、アイテムやキャラのステータスをモジュールを誰かが担当するべきであったと思う。人数が少ないため、モジュールを細かくわけずに一人ひとつの大きなモジュールで書いてしまったのが良くなかった。モジュールを細かく分けて、一人ひとり複数担当するようにしたほうが結果的にうまく行くと感じた。
  • また、個人的に心残りなのはBGM制作であり、タイトルで使うBGMは作ることができたのだが、他のBGMは作る時間がなく、結局フリーのBGMを使用することになってしまった。もっと時間をとってBGM制作に当てても良かったと思った。


最終更新日:2018/08/06 12:07:05