読者です 読者をやめる 読者になる 読者になる

ひっきぃのメモ帳

趣味で作るプラモデル製作の過程と作品、日々の資格取得へ向けての活動、Apple中心のIT関連ネタを書いています。

OpenGL ESでタッチした座標を取得する。

今日もこの本の内容から

OpenGLで作るiPhone SDKゲームプログラミング

OpenGLで作るiPhone SDKゲームプログラミング

第2章のハエたたきゲームをつくり始めましたが、SDK4.2での壁に再びぶつかりました。
この本ではビューとレンダラーを連携するように記述されていますが、そこがうまくいきません。

ビュー側(EAGLView.m)に次のコード

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
	UITouch* touch=[touches anyObject];
	CGPoint pt = [touch locationInView:self];
	
	float glX = (pt.x / 320.0f) * 2.0 -1.0;
	float glY = (pt.y / 480.0f) * -3.0 +1.5;
	[renderer touchedAtX:glX andY:glY];
 }

レンダラー側(ES1Renderer.m)に次のコード

 - (void) touchedAtX:(float)x andY:(float)y
 {	
	NSLog(@"%f,%f がタッチされました",x,y);
 }

を書いてビュー側から、レンダラー側のメソッドを呼び出して、連携させているようです。(全体が無いと意味が通じないでしょうが)
iOS SDK4.2では、レンダラーのインスタンスを保持している renderer という変数は存在していないので動かないのも当然ですが。
どうすれば良いか悩んでいたのですが、初期化ルーチンの中で直接ビューを参照している部分を見つけました。

結局レンダラー側(SDK4.2では ◯◯◯◯ViewController.m)の中に書けば良いみたいです。
連携させなくても、これ自身がViewを持っているんですね。

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
	UITouch* touch=[touches anyObject];
	CGPoint pt = [touch locationInView:self.view];
	
	float glX = (pt.x / 320.0f) * 2.0 -1.0;
	float glY = (pt.y / 480.0f) * -3.0 +1.5;
	
	NSLog(@"%f,%f がタッチされました",glX,glY);
 }

これでまた先に進めそうです。



よろしければ、ボタン↓押してくださいませ。
にほんブログ村 携帯ブログ iPhoneへ
にほんブログ村
人気ブログランキングへ