2011年5月24日火曜日

CALayer

最近CALayerを使いだした。
今まではOpenGLESオンリーだったのだが、
iPadらしく動くことを考えるとCALayerだとかUIViewだとかを使うほうがいいような気がして来た。
簡単にスレッドを意識せずにアニメを起動することもできる。
CALayerは便利だ。
パフォーマンスはまだ調べていないが、
きっと普通にゲームなんて組めるレベルのパフォーマンスは出ないだろうと思う。
ただ、ビューアとかを作るのであれば、CATransactionを使ってスレッド化したルーチンからページの先読みをさせたりも出来るし、コーディングのレベルはかなり落とせると思う。

CALayerは当り判定も出来るのだが、その前にポイントの変換しておかないといけない。

以下の例では、
touchはtouchesBegan のeventから画面上のタッチされた位置を設定している。
その後、BottomBar上にaddSubLayerしたLayerへの当り判定をするためにbarTouchPointへ変換している。

UITouch *touch = [event.allTouches anyObject];

touchBeganPoint = [touch locationInView:self];

// BottomBarレイヤー用に変換

CGPoint barTouchPoint = [self.layer convertPoint:touchBeganPoint toLayer:BottomBar];



実際の当り判定はこんな感じで、BottomBarにaddSublayerしたDoorへの当り判定が出来る

if([Door hitTest:barTouchPoint] ){

// 当たったよ

}



0 件のコメント: