我正在尝试使用openGL开发游戏,其中我使用了GLTextureLoader类来加载图像,这些精灵正在以一定的计算速度从左向右移动,我需要检测这些图像上的触摸。
答案 0 :(得分:1)
由于你的目的非常简单,你所要做的就是在一个看不见的缓冲区上绘制你有两次的对象,可见的和另一个只有颜色的对象。然后你检查用户在不可见缓冲区中按下的位置,看看它是什么颜色,你有你的对象。
http://www.lighthouse3d.com/opengl/picking/index.php3?color1
这是基本理论。
答案 1 :(得分:0)
OpenGL是一种渲染API。它只画东西。 像lighthouse3d这样的技术确实有效,但glReadPixels很慢。
你应该在CPU上检查一下;也就是说,对于每个绘制的精灵,测试触摸位置是否在内部。
答案 2 :(得分: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;
}