Pages

2013年9月30日月曜日

thunderbolt ファームウェア1.2

かなり前からApp Storeで「thunderbolt ファームウェア1.2」とかいうアップデートが表示されてて気になってたんですけど、アップデート→再起動すると再起動途中でステータスバーが表示されてすぐ電源が切れるという現象になっていたので諦めていました。

けど、今日やっとアップデートの仕方が分かったんですよっ!

アップデートが表示されてから数ヶ月。これでやっとApp Storeのが消える!!

で、そのやり方なんですけど

ACアダプターをつなぎながらアップデートする

たったこれだけ。。。。。。。。っざけんなよ。



2013年9月4日水曜日

cocos2d + UITapGestureRecognizer でどハマりした

cocos2dでUITapGestureRecognizerを使おうと以下の実装をAppDelegateに追加しました

GameLayer *layer = [[[GameLayer scene] children] objectAtIndex:0];
UITapGestureRecognizer *gestureRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:layer action:@selector(handleTapFrom:)] autorelease];
[viewController.view addGestureRecognizer:gestureRecognizer];

で、ゲームの画面遷移的には以下のような流れとしていました。

タイトル画面(こいつがAppDelegaterunWithSceneされる)
→ ゲーム画面(ここでタップを検出する。上でいうGameLayer
→ 終了画面 → タイトル画面

タイトル画面ではCCMenuItemImageを使ってメニューを作成して、そのメニューが押されたらゲームが始まるという流れです。

で、ここで終了画面からタイトル画面に戻ると、メニューを押しても反応しない
メニューは確実に押されている(というのもCCMenuItemImageは通常の画像と押されたときの画像を設定していて、メニューを押したときにちゃんと切り替わっている)のにも関わらず、selectorで設定したメソッドが呼ばれない。という状態に陥りました。

エラーが出るなら何とかなるんですが、ただただ反応しないだけなので、何が原因か全く分からない。

まぁ、UITapGestureRecognizerだろうとあたりを付けて、その箇所を削除してみたらちゃんと動きますよ。

UITapGestureRecognizerがCCMenuItemをよりも先に反応してるんだろうなーというのは何となく想像ついたんですけど、どうしたらそれを回避できるのかの対策にどハマリしました。

開発時間は1日2時間程度とれたら良い方なので、正直4日くらい彷徨いました。

んで、何かの拍子にstackoverflowにかなり良く似た現象を発見(それまでもstackoverflow見てたのに発見できなかったという)。

で、対策として如何ほど難しい実装をするんだろうと、その質問の回答をみたところ

「OK、言いたいことは分かった!
gestureRecognizer.cancelsTouchesInView = NO;
と書いてみなっ!!」(訳:オレ)

って3行が…

で、実際に意図する状態に出来ましたとさって話でした。

分かった後でcancelsTouchesInViewについて色々調べると、これ結構有名な話でして、いかに自分の検索脳力の低いかを痛感した次第で。。。

まぁ、実際にはコレだけ書いたらOKって訳ではないのですが、
そのあたりはcancelsTouchesInViewでググると嫌味なほどヒットするので、その中からいい感じのやつを探してくださいな。

日々修行ですね。やっぱ。