我已经将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很慢。
答案 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视图坐标和度数。你永远不必考虑再次转换价值。