检测OpenGl中的图像纹理触摸

时间:2012-07-26 06:58:31

标签: iphone objective-c animation opengl-es glkit

我正在尝试使用openGL开发游戏,其中我使用了GLTextureLoader类来加载图像,这些精灵正在以一定的计算速度从左向右移动,我需要检测这些图像上的触摸。

3 个答案:

答案 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;
}