2012年10月20日土曜日

独自ライブラリを作った理由



Androidのゲーム開発をOpenGLESを用いて行なっている人

OpenGL…使えるようになるまで時間がかかりました。
初めはC言語でしたが、OpenGLを使ってみました。
座標系が面倒になって挫折。(ただただ作りたいと思えるものが、当時無かったのかも)

昔にiアプリを作っていましたが、自分のケータイがXperia SO-01BになってからAndroid開発に移りました。

iアプリの時もですがCanvasが用意されていたので
比較的楽に開発できました。(当時高校生の僕でも動かせるレベル)

Androidに話を戻しますが
一番初めは普通のViewを使いました。
次は速度を上げるためSurfaceView、確かに楽でしたが思ったように速度が出なくて
開発が進まず、長い期間開発がツール系へ移行

Fast NoteText Balloon Widgetを配布後
やっぱりゲーム作りたいと思い始めOpenGLを再度勉強することに…

正直今読んでも、描画設定とか面倒臭くて嫌になります。
ですが、現段階で良いパフォーマンスが出せるのはOpenGLES
なので、ラッパーライブラリを作ってしまいました。

作ってしまいましたと簡単に言いましたが
初めてまともにライブラリを作ることになるので開発が難航(今まで何度も中身を作り直していた)
分からないことだらけで手探り状態

2ヶ月以上を費やしなんとか、MGEngineという独自ライブラリを開発しました。(初めて作ったサイトの名前がEngineだったこともありMGEngineと名付けてしまった。)

MGは現在のサイト名MAGNIFLOPから…(普通はMFと名付けるところだが、パッとしなかったので)

プロジェクトライブラリという形で使用しています。
ライブラリとゲームで2つのプロジェクトを必要とします。

ゲームプロジェクトのマニフェストファイルにMGEngineのActivityを設定

とにかく起動は簡単にしたかったので
ゲームのActivityから

MGEngine mg = new MGEngine(this, 60, 480, 800);
mg.setScene(new Title());
mg.start();

これだけで済みます。
引数は左から自身,FPS,画面幅,画面高さ
setSceneは最初に表示するシーン
startで起動です。

最低限必要だと思って組み込んだ物は

シーン管理
描画、フォント
ベクトル
当たり判定
ファイル
通信
ループ
サウンド(今回のゲームでは訳あり未使用)
タッチ

ちょっと欲張り過ぎましたが
かなり満足しています。

必要に応じて、機能を追加していく予定。
フォント、サウンド周りは特に見直しが必要です。


プログラミング言語はプログラマの道具
道具は磨き上げる人によって輝き方が違ってきますよね。
僕はそう考えています。

汚いソースでも自分なりに考えて使いやすくできたのならそれでいいと思います。
ただし、人と共有するものならしっかり書かないとよろしくないです。
僕は他の開発者さんにアドバイスをもらってからは、綺麗に書くように心がけています。

あと注意点ですが
ライブラリを作ったことに満足してゲームを作れなかったなんてこともあります。

目的はあくまで、アプリ開発を楽にすること。
先に苦労すれば、その後の開発が格段と楽になるはず!

しかも、僕が作ったのはあくまでOpenGLESのラッパーライブラリ
Android、OpenGLの開発者には本当に感謝しなければなりませんね。


色々と偉そうに語ってますが
そんな暇あったら次のアプリを開発しろと
誰かに言われる前に取り掛かりたいと思います…(´・ω・`)