東京工業大学 ロボット技術研究会

東京工業大学の公認サークル「ロボット技術研究会」のブログです。 当サークルの日々の活動の様子を皆さんにお伝えしていきます。たくさんの人に気軽に読んでもらえると嬉しいです。
新歓特設ページ        ロボット技術研究会 HP        ロボット技術研究会 twitter公式アカウント

イベント

「ロボット技術研究会」通称「ロ技研」は、その名前の通りロボットの制作や研究はもとより、電子工作や機械工作、プログラミングなどの幅広い分野にわたるものつくり活動を行っています。

カテゴリ一覧: loading

rogy2016冬合宿 in 戸狩

皆様ごきげんよう.部長のありすです.
2/27から3/1にかけて,長野県の戸狩スキー場に行ってきました.
2年ぶりの冬合宿です.

 OOCyqgxV
2泊3日と短かったですが,3日とも晴れていたので気持ちよくスキーをすることができました.
また,片道1時間かかる野沢温泉まで徒歩で往復する部員もいて,各々の冬合宿を楽しめたと思います!

2017年部長就任挨拶

どうも皆さんおはこんばんにちは.

先日,今年度のロボット技術研究会の部長になりましたありすです.

本サークルの部長の決め方はとてもユニークです.部員ほぼ全員による選挙によって部長/副部長を決めます.
 そんな部長選挙によって不幸にも幸運にも部長をすることになってしまいました.
 
ロ技研は,どちらかと言えばチームプレイよりもスタンドプレイが好きな人が多いと思います.
サークル全体の目標が存在するわけでもなく,ロボコンも他の競技も一部の部員が興じているだけです.
そんなサークルにおいて部長とは一体どういった立ち位置なのでしょうか.
部長になってしまった僕自身があまりよくわかっていません.


しかし,それがロ技研らしさということなのでしょう. 
何はともあれこれから1年間よろしくお願いします.

 SSRに栄光あれ!

rogyサバゲ:†革命†をもっと

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

2016年も終わろうという12月28日にrogyサバゲが行われました.
サバゲことサバイバルゲームは互いにエアガンを打ち合う紳士のスポーツです.

本来冬休みに開催されるのは珍しいのですが,前回開催される予定だった夏休みの回はあいにくの台風で中止になったため,久方ぶりのゲームとなりました.
15732093_652591708281105_1779056469561587975_o


今回の会場となったのは埼玉県にあるHill'sというフィールドです. 
屋外フィールドなので,前日の雨の影響がやや心配ではありましたが,快晴とよい水はけに恵まれました.
全体的に傾斜がかかったフィールドにはやぐらや塹壕などがあり,屋外ならではの立体的な戦闘ができました.
15726599_1228503630575771_2036406070086735663_n


工場長がジープで登場するところから始まった今回のサバゲですが,
rogy外,OBも含めて偶数代のみ13人が参加しました.
1年生は4人も参加してくれました.
4人とも強い人たちだったので今後が楽しみです.
15747737_1228503600575774_8476560239373215874_n

途中工場長のジープ試乗会などを挟みつつ,
耐久戦,フラッグ戦,殲滅戦などを行いました.
15780725_1228503743909093_3170315155516138104_n



我々は Kid's なので打ち上げは上尾駅前の居酒屋のキッズルームで行われました.
(荷物が多かったのでここに通されました)
1年生も来てくれたので,今後の発展が楽しみですね.
15697786_1228503843909083_8576273997596078773_n

15732417_652591548281121_2449955285315302044_o
 
今回が工場長の企画してくれる最後のサバゲになります.
4回分ほど,お疲れさまでした.
また後輩から企画者が出てくれることを祈りつつ,締めようと思います.
それでは,この一年がよいサバゲイヤーとなりますように. 

コミックマーケット91 出展のおしらせ

SSRコミケット部隊です!
いよいよコミックマーケットが目前と迫っておりますね!
コミックマーケットとは、世界最大の同人誌即売会の名称です。
開催地である有明・国際展示場にて三日間に60万人近く入場するスゴイイベントなのです。



今回私達ロボット技術研究会は、1日目(29日木曜日)・西ほ41bブースにて出展しております!


出展物紹介 


研究報告書 「公開版」 No.β
112ページ 500円
多分ロ技研として初の「部誌」を創刊します!
表紙はこの様になっております(実際に頒布する表紙は予算の関係でグレースケールです)。内容は技術書です。

 ssr_hyoshi
あれ・・・どっかで見たことあるな・・・


サンプルです。
キャプチャ
emoi
※一部配慮しました
 ロ技研っぽい部誌になったんじゃないかなと思っています^ᴗ^。収益赤字確定です


CG-SQUARE COMPILATION Vol.3
500円
ssrcomp


前回と前々回の出展で頒布していたコンピレーションの新作です。
工大祭展示を主に、ロ技研でゲームを作りたい人々が集っている研究室である"CG-SQUARE"のメンバーが個々に作ったミニゲームをまとめました。
今回

・Cyan Collects Chocolate! (シアンちゃんが飛ぶSTG)
・ひかうき(ひかうき)
・Infinity Masakari(無慈悲なマサカリを避けるゲーム)
・フォッカチオ襲来(フォッカチオが襲来するゲーム)
・REPUNKUR(魔法で敵を倒すゲーム)
・集金ロボ性能試験(金集めゲーム)
・TROLLEY Train(チャリ走って言うなスーパードンキーコング2-2)
・Wand of Dawn(ハッピーハロウィン!)

を収録しています。
thumbthumbthumbthumbthumbthumb
thumbthumb



SALT ORDER -first order-
500円

アクションゲームです。詳しくは別の記事で。
jacket

 

・その他、既刊物を少数持って行きます。

ワインレッドのテーブルクロスロ技研みに溢れるナード三名の男性が目印(予定)です! 
では、当日西ほ41bにてお待ちしております! 

RPGツクールMVでのシューティングゲーム作成について

こんにちは、13の折重です。今回はrogy Advent Calendar 2016の16日目として記事を書きます。
凄い更新が遅くなってしまって申し訳ないです。アドベントカレンダーは日付が変わった瞬間に投稿するのが普通っぽいですよ奥さん

 screenshot
こんな感じのを作ります

の前に宣伝とか

Advent Calenderに登録した時書くことが決まってなかったので記事概要みたいなところに超ナメたこと書いてますね、すいません。実際何も考えてなかったわけではなく逆に色々考えてて、一回書く内容変えたりしてます。じゃあ前まで何書こうと思っていたのかというと、今までのゲーム制作についての色々です。それは結局別の機会に書くことにしたので今回はこっちを書くことにしました。

とここで宣伝。
来るコミックマーケット91にて、我々ロボット技術研究会もサークルとして参加し、有志による記事をまとめた部誌を発行することにしました。そしてそこに僕も「学園祭におけるゲームプレイの観察」と題して寄稿しております。興味がある方は是非買って読んでみてください。スペースは木曜日(12/29) 西地区 "ほ"ブロック41bです。

ここから本題

今回の記事について

今回はシューティングゲームを作る過程で、RPGツクールMVの仕様とプラグイン作成について紹介していこうと思います。
RPGツクールMVはRPGツクールシリーズの最新版で、誰でも気軽にRPGを制作することができます。更にMVからはHTML5をベースにすることによりブラウザで動作するゲームを簡単に作れるようになりました。また、今回扱ったようにプラグインによる拡張でシューティングゲームを作成できるなど、非常に広い汎用性を持ちます。
ゲームエンジンならばUnityなど他のものもあるのではないかと言われるかもしれませんが、RPGツクールはRPGであれば特別な知識などなくても簡単に作成できますし、先ほども言ったようにHTML5がベースなのでwebなどでの公開も簡単で迅速(当然公開場所は自分で用意しなくても公式に用意されています)、更にJavaScriptでプラグインが作成できるため拡張性も高くweb関係の機能の実装とも親和性が高い、という利点があります。今回のようなシューティングゲームを作るようなのはできなくもないだけで極端な使い方ですが、基本普通のRPGを作りそこに独自の機能を追加したいというのには非常に向いていると思います。
シューティンゲームにした理由ですが、バイトでRPGツクールを使って色んなものを動的に生成したり意味不明な使い方を色々したんで、もしかしたらシューティング作れるんじゃないのかって思ったことと、僕が好きなジャンルだからなのと、なんとなくゲーム制作初心者向けってイメージがあるからです。シューティング作れればあらゆるジャンルのゲームが作れますよ、多分。

前述したように筆者はRPGツクールMVを使用しはじめたのが今年の4月から(しかもバイトは月数回)、ついでにJavaScript経験もそれに毛が生えた程度なので不格好なコードもあるかもしれませんが、これからRPGツクールを使いたい人、現在使っている人の助けに少しでもなれれば幸いです。あとバイトを引き継ぐ人が決まったら読んでもらいたいです(主目的)

前提

前置きが多いですね、申し訳ないです。
今回の記事ではJavaScriptについての説明はしません。必要なJavaScriptの知識は各自で勉強してください。すいません。
またクラスがどうとか言っていますがprototypeを使用してクラスっぽい実装をしています。継承って言ったらプロトタイプチェーンを利用してメソッドを親クラスから引き継いでるんだと思ってください。なんか最近JavaScriptにclass構文が実装されたそうですが、RPGツクールでの実装が全てprototypeになっているのでそれに倣います。もしかしたら次のRPGツクールでは実装が変わっているかもしれませんね。というかクラスに限らずRPGツクールの元からの実装に倣っている部分が結構あります。

オリジナルシーン、ウインドウの作成

シーンは、RPGツクールではrpg_scene.js内で定義されており、Scene_TitleやScene_Map、Scene_Battleなどがあります。今回はシューティングゲームということでScene_Shootinを作成したいのですが、基本的にはRPGでのマップ画面とあまり変わらないのでScene_Mapを継承したScene_Shootingクラスを作成することで実装します。
Scene_Shooting.jsとうファイルをpluginsフォルダの中に作り、以下を記述します。

Scene_Shooting.jsに追加

ここまでで保存し、いったん動かしてみます。プラグインを使うにはRPGツクールのエディタ側でツール→プラグイン管理からプラグインを追加しなければならないので忘れないようにしましょう。動かしてもScene_Mapと全く同じ機能を持ったScene_Shootingが代わりに呼ばれるだけなので見た目は全く変わりません。
では少し変更を加えていきます。まず既存の関数をオーバーライドし書き換えることで不要な画面遷移やウインドウ表示などをしないようにしてしまいましょう。

Scene_Shooting.jsに追加 

ここで実行してもまだWindow_SideMenuクラスを作成していないためエラーが出ます。
というわけでウインドウを作っていきます。シューティングゲームにおいてスコアや残機を表示するウインドウです。
ウインドウはrpg_window.jsというファイル内にたくさん定義してあり、それをシーンに追加していく形で表示します。ウインドウ自体が表示する画像や文字などの内容や大きさの情報を持っており、シーンからはウインドウ作成時に表示位置を指定するのみです。新しいウインドウを作成したいと思ったらそれを実現するウインドウクラスを新しく作成してあげましょう。場合によってはそのウインドウを表示する用の新しいシーンも必要になるかもしれませんね。
rpg_window.jsには色々なウインドウのベースとしてwindow_BaseやWindow_Selectableなどがあります。今回は選択肢は必要ないのでWindow_Baseを継承し新たにWindow_SideMenuクラスを作成していきます。

Scene_Shooting.jsに追加

というわけでここまでで自作のシーンとウインドウを追加することができるようになりました。これだけでもかなり制作の自由度は上がるかと思います。

自機の作成とSpriteの追加

次はプレイヤー周りをいじっていきます。と言ってもやることはあまり変わらないです。 
プレイヤーに関する記述はrpg_object.js内に書かれています。rpg_object.jsはその名の通りゲーム内に出てくるオブジェクトについての記述がなされています。マップに表示されるプレイヤーに関してはGame_Playerクラスに書かれています。

まずGame_Player.jsというファイルを作成します。この中でGame_Playerクラスの関数を改変していきます

Game_Player.jsに追加 

RPGでの移動はマス目単位ですがシューティングではその必要はないので毎フレーム移動し進行方向のマス目の状態を確認する部分なども削ります。これだけだと超高速移動をしてしまうので移動距離の計算部分も変更します

 Game_Player.jsに追加 

これでシューティングゲームのように動きました。最後に向きを上向きに固定します。移動処理を書き換えたタイミングでキャラの向きの更新の処理も消してしまったので初期化する時方向を上向きにしてあげれば大丈夫です。

Game_Player.jsに追加  

これで自機を動きはできました。え、なんかデフォルトだと仲間が3人くらい表示されてる?忘れるなかれこれはRPGツクール、そこらへんの設定はエディタ側でできます。ツール→データベース→システムから初期パーティを変更してしまいましょう。

自機をシューティングっぽく動かすことができたので、次は弾を出せるようにしていきたいと思います。ですがその前に、ここでRPGツクールの描画の仕組みについて少し触れます
RPGツクールは画像の描画にpixi.jsというライブラリを使用しています。rpg_core.js内のSpriteというクラスがpixi.jsを用いた画像描画を行う上でのラッパーのような役割をしており、rpg_sprite内にあるSprite_CharacterやSprite_ActorクラスなどがSpriteクラスにゲーム内で扱う上で必要な機能や情報を目的ごとに追加したものになっています。更にrpg_sprite.js内にはSpritesetというSpriteをまとめて管理するためのクラスがあります。各シーンはこのSpritesetを持っており、ここにSpriteを追加していくことで画面に描画するものを管理しています。
実はRPGツクールはマップのロード時に必要なオブジェクトの画像なんかは全てロードしてしまい、まだ発生しないイベントなんかも画像非表示になっているだけでマップには存在していたりします。RPGなので当然と言えば当然なのですが、そのためオブジェクトの動的生成は少しやりずらかったりします。色々がんばるとできます。 
今回Scene_ShootingはScene_Mapを継承して作成したため、Spriteset内のtilemapにSpriteを加えていきます
 
Scene_Shooting.jsに追加

これを呼ぶことによって描画対象を追加することができます。

弾と弾幕の作成

弾クラスと、それを管理する弾幕クラスを作成することにより実装することにします。自機や敵キャラはそれぞれ1つの弾幕クラスを持つようにします。弾については、Game_CharacterBaseクラスを継承したGame_Bulletクラスを弾クラスとして作成します。RPGツクールではマップに表示されているキャラや扉なんかのオブジェクトは基本的にrpg_objectにあるGame_CharacterBaseというクラスを継承しています。Game_CharacterBaseでは画像や座標などの情報を持っており、座標を変更すると勝手に描画位置も変わるなど、ゲーム中の視認できる物体を扱いやすくしています。弾には無駄な情報も多いですが楽なので利用します。
まずGame_Bullet.jsを作成しクラスを作成します。プラグイン追加も忘れずに。

Game_Bullet.jsを追加 

基本的には初期化関数やアップデート関数をオーバーライドしているだけですが、initialize()内でsetParams()を、refresh()内でsetImageData()を読んでいます。これらは弾の当たり判定の範囲や画像データなど弾固有の情報を初期化するものです。後ほどGame_Bulletクラスを継承して新たにクラスを作成する時にまた説明します。

これで一応弾を出すことができるようになりましたが、まだ生成部分の処理を作っていないので画面は何も変わっていません。試しに入力をされたらプレイヤーが弾を出すようにしてみましょう。

Game_Player.jsに追加
 
既存のupdate関数を以下のように変更

これでZキーを押すとなんか変な光みたいな画像が表示されたと思います。まだ移動処理なども書いてないのでその場から動きませんが。SceneManagerはRPGツクールのシーンを管理しており、グローバルに定義されているのでどこからでもアクセスできます。内部に現在のシーンを保持しているのでそこからAddSprite関数を呼び出しましょう。
次はこれらの管理をする弾幕クラスを作成していきます。これは特に実体もなく画像もいらないので全て自作してしまいます。ひとまずの実装を書きます。プラグイン追加も忘れずに。

Shot.jsに追加 


addBullet関数でShotクラス内のArray配列であるbulletsに弾を入れ、同時にスプライトも登録してしまいます。
これは弾幕全体のスーパークラスであり、これを継承して更にPlayer_ShotクラスとEnemy_Shotクラスを作成します。generate関数やcollide関数、controlBullet関数は継承した先でオーバーライドします。
というわけで、Player_Shotを作成して自機についての処理を完成させてしまいましょう。

Game_Player.jsに追加


update関数を以下のように書き換え

これで先ほど表示された光が前方に向かって飛んでいくようになったと思います。ただし弾が画面外に行くようになってしまいました。現状画面外にある弾がいつまでも表示されているので、これを削除するようにしたいと思います。

Scene_Shooting.jsを変更
update関数に以下を追加

これで弾が消えるようになりました。以降衝突などで弾を消したいときは弾のqctiveの値をfalseにしてあげれば勝手に消えます。
 
現状Game_Bulletクラスに書いたてきとうなパラメーターの弾を生成していますが、自機用にGame_PlayerBulletクラスを作成しそれを生成するようにしましょう

Game_Bullet.jsに追加

Game_Player.jsを変更
generateEvent関数を以下のように書き換え

はい、画像が変わったと思います。弾の種類を増やす時はsetImageData()で弾の画像を、setParams()で弾の情報を書き換えるだけで増やすことができます。

ここまでで自機の実装と、基本的な機能の実装ができました。

次は敵と敵弾幕を実装...と言いたいのですがぶっちゃけここからはただのゲーム作りになってしまうので説明は割愛します。時間もないですし......
せっかくなので実装した部分までのソースコードはgithubに公開しておきます、記事の最後の方にあります。微妙にブログ用に修正したのと違いますが。敵の実装とかがすでに適当なのであまり参考にしない方がいいです。あとあくまで説明用に作ったものなのでゲーム部分はかなり適当です。当たり判定とかもっと色々できそうですね。関数は用意してありますしシューティング作りたいと思った方は自分で実装してみてください。
あとはエフェクトとかもつけてもいいかもしれませんね。弾から当たり判定抜いたものを作るだけで実装できそうです。というか弾のrangeを0にするだけでエフェクトと言い張れなくもなさそうです。

補足

RPGツクールはF2キーを押すことでFPSを表示させることができます。デフォルトは50FPSでいじる方法があるのかは知りませんが、それで見た感じかなり弾を出してもFPSは維持されていました。画像にこだわったりしたらブラウザで動作するかなり本格的なシューティングゲームが作れるのではないでしょうか。
他にもデバッグ用の機能が色々あるっぽいのでとりあえずファンクションキーとか押しまくってみるといいと思います。

では結構な長さになってしまいましたが読んでいただきありがとうございました。
明日はJpREOTTOくんによるまったり🍵とした内容を書くばい(放課後~)です。
 
Github
https://github.com/OrishigeMasato/RPG_ShootingPlugins
 
ギャラリー
  • 自作キーボードを作ろうver1.0
  • 自作キーボードを作ろうver1.0
  • 自作キーボードを作ろうver1.0
  • 自作キーボードを作ろうver1.0
  • 第14回ROBO-ONE Light 結果報告
  • ロボット技術研究会紹介
  • ロボット技術研究会紹介
  • rogy2016冬合宿 in 戸狩
  • rogyサバゲ:†革命†をもっと
記事検索
最新コメント