如何实现Cocos2d多点触控精灵旋转?

时间:2011-02-03 13:40:52

标签: objective-c core-graphics cocos2d-iphone

我已经使用标准iOS图形库(Core Graphics)实现了多点触控图像旋转。

看起来像这样:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([touches count] == 2) {
        NSArray *twoTouches = [touches allObjects];
        UITouch *first = [twoTouches objectAtIndex:0];
        UITouch *second = [twoTouches objectAtIndex:1];

        CGFloat currentAngle = angleBetweenLinesInRadians([first previousLocationInView:self.view], [second previousLocationInView:self.view], [first locationInView:self.view], [second locationInView:self.view]);

        pic1.transform = CGAffineTransformRotate(pic1.transform, currentAngle);

    }
}

现在我正在尝试在我的Cocos2d项目中实现此解决方案。首先,我在init方法中注册了CCTouchDispacher。

- (id) init
{
    ...
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    ...
}

在我的ccTouchMoved函数中,我将(UITouch *)更改为(NSSet *)并构建项目以确保一切正确。结果我得到了以下警告:“不兼容的Objective-C类型初始化'struct NSSet *',期望'struct UITouch *'”。

由于一切似乎仍然正常工作,我继续尝试从(NSSet *)touch中提取第一个和第二个触摸对象。

- (void)ccTouchMoved:(NSSet *)touch withEvent:(UIEvent *)event {
    if ([touch count] == 2) {
        NSArray *twoTouches = [touch allObjects];
        UITouch *first = [twoTouches objectAtIndex:0];
        UITouch *second = [twoTouches objectAtIndex:1];
    }

}

现在我尝试编译它,但是在我通过iPhone模拟器触发ccTouchMoved后,我收到以下错误消息:“ - [UITouch count]:无法识别的选择器发送到实例0x542d6a0'”。

有人可以解释一下,如何让这个Cocos2d ccTouchMoved方法识别和处理多点触控事件?

感谢。

1 个答案:

答案 0 :(得分:3)

您使用了错误的CC2D方法。

你应该使用

- (BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

而不是

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event

因为您想要捕获多个触摸,ccTouchMoved只捕获一个