Как ущипнуть / увеличить на cocos2d (Kobold2D) CCLayer

Я пытался реализовать стандартное пинч / масштабирование на CCLayer в cocos2d (используя распознаватели жестов Kobold2D), но с частичным успехом.

Ниже приведен мой код, который делает пинч / зум работать, пока точка защемления не сдвигается. Однако, если я увеличиваю одну точку на слое, а затем поднимаю и двигаю пальцы, чтобы увеличить еще одну точку, происходит мгновенный скачок слоя. Он переходит туда, где был бы слой, если бы я увеличивал масштаб второй точки с начала, а не просто плавно увеличивал масштаб с того места, где он был.

Можете ли вы увидеть, что я делаю неправильно, или я пропустил существующий простой алгоритм пинч / масштабирование, который делает эту работу для CCLayers?

NB. Я оставил значение по умолчанию (YES) для ignoreAnchorInPosition. Кроме того, в начале self.scalePrePinch = 1.0f

-(void) update:(ccTime)delta
{
    KKInput* input = [KKInput sharedInput];
    if (input.gesturePinchBegan) {
        CGSize scr = [[CCDirector sharedDirector] screenSize];
        CGPoint pinchLocation = [self convertToNodeSpace:input.gesturePinchLocation];
        CGPoint anchor = ccp(pinchLocation.x/scr.width, pinchLocation.y/scr.height);
        CGFloat newScale = input.gesturePinchScale * self.scalePrePinch;
        self.anchorPoint = ccp(self.anchorPoint.x + self.scale / newScale * (anchor.x - self.anchorPoint.x), 
                               self.anchorPoint.y + self.scale / newScale * (anchor.y - self.anchorPoint.y));
        self.scale = newScale;
    }
    else
        self.scalePrePinch = self.scale;
}

0 ответов

Другие вопросы по тегам