[iPhone] [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

Related Posts Plugin for WordPress, Blogger...