在Cocos2d-iPhone中制作视差图层的问题

时间:2010-01-11 15:22:52

标签: iphone cocoa-touch animation cocos2d-iphone

我正在尝试在Cocos2d中实现我自己的视差滚动,因为内置的视差功能并不是我正在寻找的(它会缩放图层,这不是我想要的)

所以,我自己的Parallax Layers会像这样覆盖setPosition方法

- (void) setPosition:(CGPoint)point
{
    [super setPosition:CGPointMake(point.x / pRatio, point.y / pRatio)];
}

pRatioint,它可以减少图层移动的数量,从而创建我正在寻找的视差效果。它完全像这样工作。

但是,有时我需要使用MoveTo将图层设置为特定位置,所以我创建了这个响应NSNotiification的方法

- (void) gotoStartPosition:(NSNotification *)notification
{
    CGPoint startPos = CGPointFromString([notification object]);
    id moveToStart = [MoveTo actionWithDuration:1 position:startPos];
    [self runAction:moveToStart];

}

直到我将pRatio设置为高于1的任何值才有效。如果pRatio高于1,则gotoStartPosition使图层跳转到CGPoint(0,0)并从那里动画到位置。

我无法弄清楚层数位置被设置为0,0,我不明白为什么只有当pRatio高于1时才这样做。

我怀疑这将是一件非常简单的事情,但我认为我的大脑是油炸的。任何帮助,非常感谢。

1 个答案:

答案 0 :(得分:0)

更新:我是一个doofus。发生的事情很明显。动画首先将图层位置设置为当前位置。但是我告诉图层用pRatio划分任何setPosition坐标。所以它不是CGPoint(0,0),而是像CGPoint(0.032,0)。我已经修好了这个:

- (void) setPosition:(CGPoint)point
{
    if(!animating){
        [super setPosition:CGPointMake(round(point.x / pRatio), round(point.y / pRatio))];
    }else{
        [super setPosition:point];
    }

}


- (void) gotoStartPosition:(NSNotification *)notification
{
    animating = YES;
    CGPoint startPos = CGPointFromString([notification object]);
    CGPoint pStart = CGPointMake(startPos.x / pRatio, startPos.y / pRatio);
    id moveToStart = [MoveTo actionWithDuration:1 position:pStart];
    id endAnim = [CallFunc actionWithTarget:self selector:@selector(endAnimation)];
    [self runAction:[Sequence actions: moveToStart, endAnim, nil]];
}

- (void) endAnimation
{
    animating = NO;
}

哪个不优雅,但它有效。我正在结束这个问题。