なんかやることコロコロ変わってる感あるの、ほんとアレ…。 あんまり時間が無いので、メモ程度にまとめておく。。
libGDX
- Javaでマルチプラットフォーム対応なゲーム開発ができるツール
- Ingressも使ってるらしいので、導入事案もなかなか強力。
- クロスプラットフォームで、主要プラットフォームでの動作は可能ぽい。
- iOSではRoboVMっていうVM上でバイトコード動かすことで、動作を実現させてるらしい。
- IngressのCOMM開くとフリーズ場合があるのはその辺関係あるのかな?
- Gradleビルドに対応してて、Eclipse, IntelliJ IDEA, NetBeans で開発できるらしい。
- ちなみに僕はIntelliJでやってます
手の付け方みたいなの
あ、今触って見てるのは2D系です。
僕はゲーム制作ちゃんとやったことなくて、触ったことあるのは吉里吉里とNScripterくらい。ほとんどノベルゲーに特化したもので、ゲーム制作という程のものは使ったことなかった。Spriteとか名前しか聞いたこと無いよみたいな。iOS7でSpriteKitってでましたね。 なので、今はすごいコード書いては消してみたいなの繰り返してます。
現段階で、手をつけるキーワード的なのは以下。すごい雑多…
- 2Dでクロスプラットフォーム目指すのであれば、Scene2Dを基本使うのが良い
- ttfフォントを使用する場合は FreeTypeFontGenerator を利用する。
- ただ、初期化の段階で、利用する文字を列挙しておかないといけないっぽい感じ。僕はシナリオファイル的なのを作って、そこから文字をユニークに抽出し、テキストファイルにまとめるスクリプトを作った。
- BMFontっていうのもあって、libGDXの解説動画ではこれをつかってた。僕は上記でなんとかなったのでまだ使ってない
- BMFont以外にもいろいろあるっぽい: Hiero · libgdx/libgdx Wiki · GitHub
- 画面サイズは
Gdx.graphics.getWidth()
とかでとれる。わりと欲しくなる - Androidの 9-patch の仕組みがlibGDXにあり、利用可能。 Ninepatchesを参照。多解像度対応のゲーム作るのであればチェックしておいたほうが良い。
- 画像は1つずつ
Texture
にするのは、速度的にネックになってくるのでTextureAtlas
を利用する。 - RPGのフィールドマップみたいなの作りたい場合は、TiledMap とか使用するといけるらしい。
- データの簡単な保存は、簡易KVSである
Preferences
が使える。- libGDX入門 その05 ゲームデータの保存|ざる魂 がソースコードもあって良い
- desktop向けも考慮する場合、Preferenceの保存場所は、他のゲームも共通らしいので、プリファレンスの名前はパッケージ名入れておいたほうがいい。情報元:libgdxメモ
- キーボードの入力は、
if (Gdx.input.isKeyPressed(Input.Keys.ENTER))
みたいなので判定できる - クリック判定は、
Actor
へ#addListener(ClickListener)
を実装すればいける - 画面遷移時の、全体の部品のフェードアウトとか実装したい場合、Scene2Dだと
Stage
上に登録している要素全部をフェードアウトさせることで対応できそう。
Group root = stage.getRoot(); SequenceAction sequence = Actions.sequence(); sequence.addAction(Actions.fadeOut(1.f)); sequence.addAction(Actions.run(new Runnable() { @Override public void run() { // フェードアウト完了時 } })); root.addAction(sequence);
- リソース名散らからないようにしておいたほうが良いと思う。
#!/usr/bin/env bash # Print Header ########################################################### cat <<_EOT_ package myapp; /** * AUTO-GENERATED: `date +"%Y-%m-%d %H:%M:%S"` */ public interface RDef { _EOT_ # Print General data ########################################################### cd "./assets" echo " // Files" for rawPath in `find . |grep -v ".DS_Store" |grep -v "^./atlas/"` do if [ -f $rawPath ]; then filename=${rawPath##*/} filenameNoExt=${filename%.*} ext=${filename##*.} path=${rawPath%/*} extension=${rawPath##*.} pathNoDot=${path:2} variable=`echo "$pathNoDot/${filenameNoExt}" |tr '[a-z/\-]' '[A-Z__]'` echo " String $variable = \"$rawPath\";" fi done # print footer ########################################################### cat <<_EOT_ } _EOT_
以下のように生成される。
package myapp; /** * AUTO-GENERATED: 2015-04-14 00:09:15 */ public interface RDef { // Files String BGM_BGM = "./bgm/bgm.ogg"; String FONTS_YASASHISA = "./fonts/yasashisa.ttf"; String IMG_CHARACTERS_BOY_RAKU = "./img/characters/boy/raku.png"; }
- MicrosoftのXNAもちょいちょい引っかかる時がある。Frameworkとしては似たようなところがある(SpriteBatchとか)みたいなので、コードの組み方とかクラスの設計とかは参考になるかもしれないです
- Music/soundは未調査
よく分からないところ
- 画面遷移どうするのがベストなのかなぁというところ。
Screen
インターフェースやScene2DのStage
がキーワードになる感じだけど、どうするのがやりやすいのかまだ試行錯誤中。 libGDX入門 その04 画面遷移|ざる魂にも解説ある Stage
をdisposeするのはいいけど、なんかサンプルとか見てるとTexture#dispose
してないんじゃね?みたいなところがある。してなくて平気なのか、それとも解説のために省いてるのか、忘れているのか、よく分からない。。自分で確かめてみないといけないかなあ- 文章を一文字ずつ表示していくのどう実装するのが良いのかな。。今のところ
Actor
につけれるActions
という仕組みを使ってできないか見てるところ。なるべくScene2DのAPIを使って実装したい。速度とかも変更しやすくしたい。
参考ドキュメント
以下のドキュメントがすごい参考になってる
- 公式ドキュメント
- LibGDX Tutorial 9: Scene2D Part 1
- 1ページ目 - shinsan68kの投稿 - Qiita
- libGDX入門 その01 画像を表示したり音を鳴らしたり|ざる魂
- あとdesktop環境で実行するとき、多分Run Configurationで以下は一度ハマると思う
- libgdxメモ
- Androidに関して詳しい。僕はdesktop向けで今のところやってるのでまだちゃんと見てない。。
- libGDX関連情報まとめ 2014/4/19 (Androidで2Dゲーム) - Qiita
- 僕と同じような手探りの記事。実装サンプルとか
- libgdx/libgdx-demo-superjumper · GitHub
- 公式サンプル!これは勉強になる
ゲーム作れるようになりたいなあ。がんばるんば。
- (2015-04-25 LibGDX -> libGDXに表記変更)
- (2015-04-30 BitmapFontについて、BMFont以外の選択肢書いてるところ追加)