記事一覧

Landscape な cocos2dのウィンドウにUITextFieldを貼り付ける

fieldWidth, fieldHeight はテキストフィールドのサイズ、
fieldX, fieldY はLandscape状態で画面左上から見た座標。M_PIは定数πでありんす。

UITextField* field = [[UITextField alloc]
initWithFrame:CGRectMake(320-fieldY-fieldHeight, fieldX, fieldHeight, fieldWidth)];
field.text = @"text";
field.transform = CGAffineTransformMakeRotation(2.0/M_PI);
field.bounds = CGRectMake(fieldX, fieldY, fieldWidth, fieldHeight);
[[[Director sharedDirector] openGLView] addSubview:(UIView*)field];

UITextField の貼り付け自体はあっけないくらい簡単だった。
でも Landscape 方向だととたんにややこしくなりますね。
座標が左下原点ってのも非常に馴染みがなくてやりずらい・・・

あと、boundsの設定は自信無し; とりあえず動いているので放置してあるが・・・

TouchDispatcher @ cocos2d

cocos2d の TouchDispatcher を使ってタッチの振り分けをしようと思ったらうまく動かない。
cocos2dフォーラムとかも調べてみたがだいたいありがちな対策はとってある・・・
と、途方にくれていたのだけど、突然 priority の値設定がテキトーだったことに気づいていじってみたら動いた。
どうやらディスパッチを特に指定しないで受け取った場合の priority が 0 で、これより優先する場合は負の数を指定しないといけないようですね。というわけで、
[[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:YES];
が正解か。

あと、ここでswallowsTouchesを指定するとすべてのタッチが飲み込まれてしまうかというとそうではなくて、
ccTouchBegan で return NO; を返すと優先度の低いデリゲートへとタッチをスルーできるようだ。