Androidアプリ開発したい!

IT屋がGalaxySを手に入れてからAndroidに興味が湧き、いろいろと開発したりしてます。 GalaxyNexusがメイン機となり、ようやく普及し始めたAndroid4.0への関心が高いです。 仕事では、iPhone向けとかのソシャゲ作ってます。

nodebrew入れたけど前に入れたnodeが邪魔だった

はじめに

ソーシャルゲームのサーバーサイドとフロント両方やってるんですが、サーバー側がJava(SASturts)ということで、PHPとかNodeJSとかPerlが主流なのに珍しいなーということで、

NodeJsやろうかなと思いました。

まずはインストール

と思ったら、すでにインストール済みでした(^ω^)

$ node -v
v0.8.11

でもバージョン古いので、更新します。

Nodeのバージョン管理は、nodebrewが便利らしいので入れます。perlが必要みたいです。

$ curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup

パスを通します。bashrc読み直します

$ export PATH=$HOME/.nodebrew/current/bin:$PATH
$ source ~/.bashrc

インストールでけたー

$ nodebrew
nodebrew 0.6.2

とりあえず最新情報取得します。

$ nodebrew install latest

すげー長かった。。。

インストールした最新バージョンを使うように指定し、listで確認。

$ nodebrew use 0.9.8
use v0.9.8

$ nodebrew list
v0.9.8

current: v0.9.8

良い感じ!!バージョン確認する!

$ node -v
v0.8.11

( ゚д゚)ポカーン

あれ。。。まだ0.8.11だ。。。どゆこと?

どうやら前にインストールしたやつを見てるようです。犯人は「.bash_profile」でのパス指定でした。というわけで修正します。

# nodebrewを使うのでコメントアウト
#export NODE_PATH=/usr/local/lib/node:$PATH
# nodebrewのcurrentを使う
export PATH=$HOME/.nodebrew/current/bin:$PATH

bash_profileはコンソール起動時に読んでるので一回閉じます。そしてバージョン確認。。。

$ node -v
v0.9.8

キタ━━━━(゚∀゚)━━━━!!

ということでnodeのバージョン最新にしました。

最後に

内容を見てればわかると思いますが、これはMacOSの話です。LinuxとかWindowはまた別の方法になると思います・・・

AndroidとかiOSのアプリからnodeに通信してごにょごにょしたいなー。と思ってます。気が向いたらやります。

AndEngineで文字入力のダイアログを表示する

AndEngineのソースを漁っていていたら中々便利そうなクラスがあったので、ちょっと試してみました。

StringInputDialogBuilder

String文字列を入力させるダイアログを簡単に生成するBuilderみたいです。

AndroidのリソースIDとコールバックを設定するだけで簡単に実装できました。

実装

大体こんな感じ。


コメントにもあるとおりToastとかDialogはUIスレッドでないと動かないので注意。

こういうエラー出ちゃいます。

FATAL EXCEPTION: UpdateThread
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.(Handler.java:121)

動かしてみた感じ

結構いい感じ。IMEはGoogle日本語IMEです。

device-2013-01-14-161319

device-2013-01-14-161340

入力系のウィンドウとか独自で作るのは嫌だなーと思ってたので、助かりました。他にもメニュー的なやつとかないのかな。。。あと画像が不要なテキストボタンSpriteクラスとかあればいいんだけど・・・

まあ、無ければ自分で作るしかないか。

ゲームエンジン側というかフレームワーク側のソースを追っていくのも慣れてきたのでガンガンいきますぞー

AndEngineのTextで改行させる方法

ええ、見事にハマりました。テキスト改行できないじゃん!

じゃあ自分でやるか!!!と思って独自実装で完成させた後にText.classみてたらAutoWarpとかなんかあるぞ。。。と俺の2時間返せー!!という状態に陥ったのでメモを残します。

あと、wiki文法で書いてみました。

Markdown対応しないかなぁ。

やりたかったこと

ノベルゲーム風な会話ウィンドウの作成。テキストを複数行に表示。

イマイチな実装方法

AndEngineのTextクラスをListでもっておいて、行毎にTextクラスの高さ分ずらして表示する。

※アンチパターンすぎる実装なので、全ソースは載せません。こんな感じという雰囲気だけ掴んで貰えればと

// 最大文字数でテキストウィンドウを作成
int textMaxLength = getMaxLength(talks);
int textMaxLine = getMaxLine(talks);
for (inti = 0; i < textMaxLine; i++) {
     Text talkText = new Text(16, 16, font, 
          getSizeToStr("-", textMaxLength), 
          new TextOptions(HorizontalAlign.LEFT), 
          baseScene.getBaseActivity().getVertexBufferObjectManager());
     
     talkText.setPosition(0, i * talkText.getHeight());
     talkTexts.add(talkText);
}

TextクラスのTextOptionsクラスについて

フィールド変数は、以下4つあります。

AutoWrap mAutoWrap;

テキストの折り返しについての設定。

  • AutoWrap.NONE : 自動折り返しなし、普通に「\n」で改行してくれる
  • AutoWrap.WORDS : 半角スペース毎に改行
  • AutoWrap.LETTERS : mAutoWrapWidthで指定した幅を超えたら改行
  • AutoWrap.CJK : 基本的にはLETTERSと同じで最後の行に空行を付与する感じなのかな?
float mAutoWrapWidth;

テキスト折り返しの基準となるWidthの設定。AutoWrap.LETTERSの時とAutoWrap.CJK時に有効。

float mLeading;

よくわからない。。。

HorizontalAlign mHorizontalAlign;

左寄せ、右寄せとかの設定。

  • HorizontalAlign.LEFT : 左寄せ
  • HorizontalAlign.RIGHT : 右寄せ
  • HorizontalAlign.CENTER : 中央寄せ

わからなかった奴は、分かり次第追記したいと思いますー。内容が間違ってたり謎の部分が分かる方は、コメントいただけると助かります!!!

実装した結果こんな感じ。

文章は外部テキストファイルとかを読み込むつもりなので、下手に文字数で改行とかされるよりこっちで改行文字入れたほうが扱い易いと思ったのでAutoWarp.NONEにしました。

device-2013-01-13-170653

何か( ー`дー´)キリッとしたセリフ吐いてますが、これはSAOのキリトさんの名言です。

あ、今回利用している画像について一応。

素材提供:臼井の会
素材の二次利用、販売、再配布を禁じます。
持ってる端末
・Galaxy S root化済    (2.3.6)
・Galaxy Nexus          (4.1.1)
・GALAPAGOS A01SH (4.0.4)
・ONDA Vi10              (4.0.3) 
・iPod Touch           (iOS 6.0)
記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

  • ライブドアブログ