@neiraza

2匹の怪獣が寝た後にプログラマーしてる、最近はサイバーエージェントでゼミ長もしてる僕のネタ帳

cocos2dの画面回転制御ネタ

前置き

以前リリースしたゲームで使っているcocos2dがずっとv0.9ぐらいで古かったので、
このたび、バージョンをあげることにした。
iTunes App Store で見つかる iPhone、iPod touch、iPad 対応 ChickenGame

最新はv2とか出ているみたいだけど、まずはv1.0.1で。
※本当は管理にCocoaPodsとか使った方がいいんだけど、まいっか。

使用中のcocos2dのバージョン確認

使用中のcocos2dのversionは、
cocos2d.mを見ればわかります。

回転がくるった

でも起動すると全く回転してないような。
f:id:redogu:20121110235202p:plain

iPhone6シュミレータを使ってると上手くいかない。
悩むこと数分。

回転の制御ネタだろうなと思い、こんなことをした。
GameConfig.hのGAME_AUTOROTATIONの値を変更した。
kGameAutorotationUIViewControllerがデフォルトで入ってたので、
kGameAutorotationCCDirectorにしただけ。

  • kGameAutorotationNone

回転しない

  • kGameAutorotationCCDirector

回転はcocos2dに委ねる、UIKitは使わない

  • kGameAutorotationUIViewController

回転はcocos2d、UIKitの両方を使う、但しパフォ落ちる

下記ソース

//
// Supported Autorotations:
//		None,
//		UIViewController,
//		CCDirector
//
#define kGameAutorotationNone 0
#define kGameAutorotationCCDirector 1
#define kGameAutorotationUIViewController 2

// 3rd generation and newer devices: Rotate using UIViewController. Rotation should be supported on iPad apps.
// TIP:
// To improve the performance, you should set this value to "kGameAutorotationNone" or "kGameAutorotationCCDirector"
#if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR
#define GAME_AUTOROTATION kGameAutorotationCCDirector

結果、こんな感じに。
f:id:redogu:20121110235156p:plain

小さな島国にずっといると、こーなる事例

普段、日本語しか使わない。
あとはせいぜい、英語を少しかじるていど。

こんな生活、環境にいるとLocale.ROOTを忘れる時がありますよね。

なに言ってんだ。valuesだのvalues-frだのvalues-jaだのvalues-koだの。


values-arだの(笑


今日、アラビックでアプリを操作してたら、
( ´∀`)<ぬるぽ
が発令されました。

原因は、

//これでも、たぶん大概の言語圏は通ってるんじゃ
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
//こうしておけばいいんじゃないかと
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ROOT);

ここ見落としていて、長考してもーた。

Androidの端末設定が標準で色んな言語に変更できるようになって、
初めて検証したって人も多いのかもなーと思ったり。

EditTextのhintに画像を使いやがれ

AndroidのEditTextでhintってのがあると思うんだけど、
こいつで画像を使うネタを今日は仕込みたいと思います。

hintで画像(画像はandroid.R.drawable.start_big_on)

f:id:redogu:20120904095524p:plain

入力されると、hintが消えるので当然、画像も消える

f:id:redogu:20120904095528p:plain

ポイントは2つ。

  • EditTextでandroid:bufferTypeをeditableにしやがれ
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:bufferType="editable"/>

これでSpannableStringBuilderが使えるです

  • SpannableStringBuilderでImageSpanをsetSpanしやがれ
EditText editText = (EditText) findViewById(R.id.edit_text);
SpannableStringBuilder ssb = (SpannableStringBuilder) editText.getText();
ssb.append("カメラほしー");
ImageSpan imageSpan = new ImageSpan(this, android.R.drawable.star_big_on);
ssb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(ssb);
editText.setText("");

ここで良く分かってないのが、3行目でappendした内容を
全文表示したいんだけど、うまくいかない。空文字つっこむとか無しで。
今のままだと、メラか米良がほしーみたいな話しに。
(ここがうまく行かないからblogネタにしたんだけど)
もう一点、最後の行でsetText("")しないと、hintの前にtextが入っちゃって・・・。


そのうち、きっとどうにかなる。

Androidアプリを駆け込みリリースしたった

6月からOceans-inc ( http://oceans-inc.com/ ) って会社で働いている。
SNSサービスをやってるスタートアップで、Eyeland ( http://eyeland.in/ )というサービスをやってる。
このサービスで使ってる、iOSとAndroidアプリのうち、僕はAndroidの方を担当してる。

ちなみにこのアプリ、以前は出会い系アプリとして2chでスレたってたけど、
最近だと、竹島上陸アプリとして紹介されてた。

それはどうでもいい。

今月から、色々あってAndroidの開発から何やらを1人でやってて、
ついこの間、自分の誕生日に2.1.1をリリースした。
ここでのリリース作業自体が初めてだったので、少し緊張したけど問題なさげ。


というわけで、調子にのってマーケットに出してなかった
自作のAndroidアプリを自分名義で登録したった。

このアプリはスライドショーアプリなんだけど、
以前作成した、幼稚園児レベルなiOSゲームとは違い、大人しすぎて面白みが無い。
機能は色々実装してあるんだけど、面白くないからほとんど外してコア部分だけ公開した。
公開したい気分に負けた。
※この記事を書いている時は、まだマーケットにでてこない


負けたついでにGitHubの月7ドルってやつを契約してしまた。

負荷テストをやりながら自分も負荷った1ヶ月

半月くらいはまるまるやってたとおもう・・・。

最初はabでやってたんだけど、複数URLに対応してないってことで、
curlを使ったスクリプトやらシェルを書いた。
しかし、abや他のツールのように同時接続数を確保するような仕組みを作れず。
実現したいのは、

  • 今回はGETとPOSTを中心にテストしたい
  • 複数URLに対応したい
  • リクエストヘッダも固定ではなく、一部ランダムに変更したい

curl-loaderもいいかなーと思ったけど、
サイトみたらconfigに全部書くぽかったので、パス。
投げたいリクエストのみを丸ごと外だしとかの方がいいな。

と探しててみつけたのが、httperf。
前の会社でインフラな人たちが、hpのパフパフとか言ってたことを思い出しつつチェック。

テイストが近くて、もっと単純なhttp_loadってのを発見。
よし、ここから確認していこう。

以下、参考URL

ab
http://httpd.apache.org/docs/2.2/programs/ab.html

curl-loader
http://curl-loader.sourceforge.net/

httperf
http://www.hpl.hp.com/research/linux/httperf/

http_load
http://www.acme.com/software/http_load/

初めてのMongDBで怒られた

すんごい初歩的な話しなんだけど。

  1. サーバーがあがってねーよ(苦笑)
Wed Jul  4 18:55:13 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84

mongodしろって事ですね。

  1. どこのサーバーだよ(藁)
Wed Jul  4 18:56:50 [initandlisten] exception in initAndListen: 10296 dbpath (/data/db/) does not exist, terminating

/data/db/ってディレクトリを用意するか、
使用するディレクトリを自分で指定しろってことですね.

例えば、

mongod --dbpath /Users/blackhseep/hoge

とか。

ふー。

Android意味プ Gallery絡み

今回つまったこと

  • Gallery内の画像が重なっちゃう
  • Gallery内の画像開始位置が顔面センター

まじくそが。
Androidも、俺も糞すぎる。この糞豚野郎。

今回、勢いあまって逆引き本を買ってしまいました。
改訂2版 Android SDK逆引きハンドブック
無くても大丈夫だけど、あったらあったでど忘れしたキーワードとか拾いやすい。

解決編

  • Gallery内の画像が重なっちゃう

ポイントはandroid:spacingなわけで、初期値が意味プだから0を入れてやるらしい。なにそれ。

<Gallery
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/hoot_like_user_gallery"
    android:spacing="0px"
    android:layout_gravity="left"
/>
  • Gallery内の画像開始位置が顔面センター

たいした話しではなく、適当にマージンとっちまおうぜってこと。

ViewGroup.MarginLayoutParams mp = (ViewGroup.MarginLayoutParams)galleryView.getLayoutParams();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
mp.setMargins(-(metrics.widthPixels / 2), mp.topMargin, mp.rightMargin, mp.bottomMargin);


ほんとまじ、戸田恵梨香に責められまくりたい。