iPhone Cocos2D - 手指旋转精灵

时间:2011-11-12 08:36:53

标签: iphone ios ipad cocos2d-iphone uigesturerecognizer

我已经将CCSprite类子类化,并为其添加了UIRotationGestureRecognizer。所以,在我的init方法中我有这个

UIRotationGestureRecognizer *rot = [[[UIRotationGestureRecognizer alloc]
                         initWithTarget:self action:@selector(handleRotation:)] autorelease];
[rot setDelegate:self];
[[[CCDirector sharedDirector] openGLView] addGestureRecognizer:rot];

然后我有方法

- (void)handleRotation:(UIRotationGestureRecognizer *)recognizer {

    float rotation = [recognizer rotation];
    self.rotation += rotation;
}

它完美地工作但是它在实际手势和旋转本身之间存在巨大的延迟。我会说手势和精灵响应之间差不多0.5秒。

我该如何解决?感谢。


注意:在第一个评论之后,我为精灵添加了两个识别器:UIPinchGestureRecognizer和UIPanGestureRecognizer。我还添加了委托方法shouldRecognizeSimultaneouslyWithGestureRecognizer并将其设置为YES。

执行此操作并检查后,捏合和平移手势很快。另一方面,旋转继续缓慢。通过添加这两个其他手势识别器,没有降低旋转速度。另外两个响应流畅而快速,UIRotationGestureRecognizer很慢。

1 个答案:

答案 0 :(得分:4)

手势旋转以弧度为单位,而Cocos2D旋转以度为单位。所以你需要将其转换如下:

- (void)handleRotation:(UIRotationGestureRecognizer *)recognizer 
{
    float rotation = CC_RADIANS_TO_DEGREES([recognizer rotation]);
    self.rotation += rotation;
}

你也可以节省这些麻烦并使用Kobold2D,它不仅可以向Cocos2D添加easy to use interface for gestures(和其他输入类型),还可以相应地将值转换为Cocos2D视图坐标和度数。你永远不必考虑再次转换价值。