[Viewとの連携]OpenGL

画像描画はレンダラーで実装。 ユーザがタッチした際の処理はビュー上に実装。

ビューは

  • 画像を描画し、ユーザーに情報を伝える。
  • ユーザーからの入力(画面のタッチ)を受け取り、それを処理する。

OpenGL ESでは「EAGLView」が画面の処理を行っている設計になっています。

[cc lang="c" /* EAGLView.m

*/

-(void) touchesBegan:(NSSET )touches withEvent:(UIEvent )event { NSLog(@"画面をタッチしました"); } [/cc]

これでIPhoneをタッチした際に、コンソールに表示することができます。

レンダラーとの連携

今まではViewの記述でしたが、これを実際のレンダラーと連携をして使ってみます。 短いプログラミングでしたらRendererとViewだけでも大丈夫なんですが、プログラムが複雑になってくると読みにくくなってしまいます。 解決策としてはインターフェイスをViewに、グラフィックのデザインをRendererに、その他は別のクラスを作って代行させた方がいいです。

「連携の仕方」 Viewクラスに新しいクラスを参照できる変数を追加する。 [cc lang="c"] //EAGLView.h

import "NewClass.h"

//略

@private //略

  NewClass* currentGame;  //ゲームクラスを参照するための変数

} //略 @end [/cc] [cc lang="c"] // EAGLView.mm

-(id)initWithCoder:(NSCoder*)coder{ //略

 cuurentGame = [[NewClass alloc] init]; //MyClassのインスタンスを作成し、currentGameがそれを参照できるようにしている。

} return self; } [/cc]

次に新しいクラスとRendererが連携できるようにします。まずはES1Renderer.h [cc lang="c"] //ES1Renderer.h //略

import "NewClass.h"

//略 @private //略 NewGame currentGame; } @property(nonatomic,assign) MyGame currentGame; -(void)render; //略 @end [/cc] 次にES1Renderer.mm [cc lang="c"] //ES1Renderer.mm

@implementation ES1Renderer @synthesize currentGame; //略 [/cc] EAGLView.hにレンダラーからもアクセスできるようにする。 [cc lang="c"] // EAGLView.mm

-(id)initWithCoder:(NSCoder*)coder{ //略

 cuurentGame = [[NewClass alloc] init]; //MyClassのインスタンスを作成し、currentGameがそれを参照できるようにしている。
 renderer.currentGame = currentGame; //レンダラーからでも参照できるようにしています。

} return self; } [/cc]

???

UITouch* touch