画像描画はレンダラーで実装。 ユーザがタッチした際の処理はビュー上に実装。
ビューは
- 画像を描画し、ユーザーに情報を伝える。
- ユーザーからの入力(画面のタッチ)を受け取り、それを処理する。
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