我正在尝试使用 openGL 开发游戏,其中我使用 GLTextureLoader 类加载图像,并且这些精灵以一些计算的速度从左到右移动,我需要检测这些图像上的触摸。
问问题
332 次
3 回答
1
由于您的目的非常简单,您所要做的就是将您拥有的任何对象绘制两次,一个可见的,另一个只在不可见的缓冲区上绘制颜色。然后你检查用户在不可见缓冲区中按下的位置,看看它是什么颜色,你有你的对象。
http://www.lighthouse3d.com/opengl/picking/index.php3?color1
这就是基本理论。
于 2012-07-26T07:27:40.583 回答
0
OpenGL 是一个渲染 API。它只画东西。像 lighthouse3d 这样的技术确实有效,但 glReadPixels 很慢。
你应该在 CPU 上检查一下;也就是说,对于每个绘制的精灵,测试触摸位置是否在内部。
于 2012-07-26T08:04:13.417 回答
0
根据我的要求,我发现了如何做到这一点,正如我所说,我不是 openGL 的专家,但设法以某种方式做到了。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[touches allObjects] objectAtIndex:0];
CGPoint touchLocation = [touch locationInView:self.view];
touchLocation = touchLocation = CGPointMake(touchLocation.x, 320 - touchLocation.y);
//self.player.moveVelocity = GLKVector2Make(50, 50);
//NSLog(@"Location in view %@", NSStringFromCGPoint(touchLocation));
//NSLog(@"bounding box is %@",NSStringFromCGRect([self.player boundingBox]));
GameSprite *temp;
for (GameSprite *tempSprite in self.children) {
if (CGRectContainsPoint([tempSprite boundingBox], touchLocation)) {
NSLog(@"touched the player");
temp =tempSprite;
}
}
[self.children removeObject:temp];
}
- (CGRect)boundingBox {
CGRect rect = CGRectMake(self.position.x, self.position.y, self.contentSize.width, self.contentSize.height);
return rect;
}
于 2012-07-26T11:12:27.373 回答