Spica*

プログラミングの話。

libGDX触ってる

なんかやることコロコロ変わってる感あるの、ほんとアレ…。 あんまり時間が無いので、メモ程度にまとめておく。。

libGDX

手の付け方みたいなの

あ、今触って見てるのは2D系です。

僕はゲーム制作ちゃんとやったことなくて、触ったことあるのは吉里吉里NScripterくらい。ほとんどノベルゲーに特化したもので、ゲーム制作という程のものは使ったことなかった。Spriteとか名前しか聞いたこと無いよみたいな。iOS7でSpriteKitってでましたね。 なので、今はすごいコード書いては消してみたいなの繰り返してます。

現段階で、手をつけるキーワード的なのは以下。すごい雑多…

        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);
  • リソース名散らからないようにしておいたほうが良いと思う。
    • 色んな所でファイル名指定することになるのですごいカオスになりやすいため
    • 僕は以下の様なシェルスクリプトで、リソースへのパスをJavaの定数として吐き出してる(AndroidのRクラス的な位置づけ)。そうすることで、使っているかどうかわかるし、リソースが消えた時はビルドエラーになってくれるから問題が判明しやすい。
#!/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";
}
  • MicrosoftXNAもちょいちょい引っかかる時がある。Frameworkとしては似たようなところがある(SpriteBatchとか)みたいなので、コードの組み方とかクラスの設計とかは参考になるかもしれないです
  • Music/soundは未調査

よく分からないところ

  • 画面遷移どうするのがベストなのかなぁというところ。 Screen インターフェースやScene2Dの Stage がキーワードになる感じだけど、どうするのがやりやすいのかまだ試行錯誤中。 libGDX入門 その04 画面遷移|ざる魂にも解説ある
  • Stage をdisposeするのはいいけど、なんかサンプルとか見てると Texture#dispose してないんじゃね?みたいなところがある。してなくて平気なのか、それとも解説のために省いてるのか、忘れているのか、よく分からない。。自分で確かめてみないといけないかなあ
  • 文章を一文字ずつ表示していくのどう実装するのが良いのかな。。今のところ Actor につけれる Actions という仕組みを使ってできないか見てるところ。なるべくScene2DのAPIを使って実装したい。速度とかも変更しやすくしたい。

参考ドキュメント

以下のドキュメントがすごい参考になってる

ゲーム作れるようになりたいなあ。がんばるんば。

  • (2015-04-25 LibGDX -> libGDXに表記変更)
  • (2015-04-30 BitmapFontについて、BMFont以外の選択肢書いてるところ追加)