1

我一直在尝试在 cocos2d 中的 CCLayer 上实现标准的捏合/缩放(使用 Kobold2D 手势识别器),但只取得了部分成功。

下面是我的代码,它确实使捏/缩放工作,只要捏点不移动。但是,如果我放大图层上的一个点,然后抬起并移动我的手指以进一步放大另一个点,则图层会瞬间跳跃。如果我从一开始就放大第二个点,它会跳转到图层本来的位置,而不是简单地从它所在的位置平滑缩放。

你能看到我做错了什么还是我错过了一个现有的简单的捏/缩放算法来为 CCLayers 完成这项工作?

注意:我为 ignoreAnchorInPosition 保留了默认 (YES) 值。另外,一开始 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;
}
4

0 回答 0