两个不同的CCMoveTo动画距离,但速度相同?

时间:2014-04-27 16:49:33

标签: cocos2d-iphone

我将CCLabelBMFont从右向中间滚动,然后从中心向左滚动。我试图让它在两个CCMoveTo动画之间的滚动速度相同。

这是我的代码:

@interface ScrollableText : CCLabelBMFont
@end

@implementation ScrollableText

-(instancetype)initWithString:(NSString *)string {
    if (self = [super init]) {
        self.scale       = 0.75f;
        self.fntFile     = MY_FONT;
        self.alignment   = kCCTextAlignmentLeft;
        self.anchorPoint = ccp(0.0f, 0.5f);
        self.string      = string;
        self.visible     = NO;
    }
    return self;
}

-(void)scrollLeft {
    [self scrollWithStart:[self offScreenRightXPos]
                   middle:[self centerXPos]
                   finish:[self offScreenLeftXPos]];
}

-(void)scrollWithStart:(CGPoint)start
                middle:(CGPoint)middle
                finish:(CGPoint)finish {
    self.position = start;
    self.visible = YES;

    ccTime duration1 = [self durationForStart:start end:middle];
    ccTime duration2 = [self durationForStart:middle end:finish];

    CCSequence *actions = [CCSequence actions:
                           [CCMoveTo actionWithDuration:duration1
                                               position:middle],
                           [CCDelayTime actionWithDuration:1],
                           [CCMoveTo actionWithDuration:duration2
                                               position:finish]
                        , nil];
    [self runAction:actions];
}

-(ccTime)durationForStart:(CGPoint)start end:(CGPoint)end {
    CGFloat speed = 600.0f;
    ccTime duration;
    CGFloat distance = ccpDistance(start, end);
    return distance / speed;
}

-(CGPoint)offScreenLeftXPos {
    return ccp(-[self scaledContentWidth], 0);
}

-(CGPoint)centerXPos {
    return ccp(((self.parent.contentSize.width - [self scaledContentWidth]) / 2), 0);
}

-(CGPoint)offScreenRightXPos {
    return ccp(self.parent.contentSize.width, 0);
}

-(CGFloat)scaledContentWidth {
    return self.contentSize.width * self.scale;
}

@end

我遇到的问题是,速度不匹配。从offScreenRightXPos迁移到centerXPos的速度比使用offScreenLeftXPos的centerXPO快得多......我做错了什么?

1 个答案:

答案 0 :(得分:0)

动画仅受两个可能变量的影响:距离或时间,因为您将速度设置为600.0f,因此持续时间或距离导致问题。

我确定你已经介入了你的代码,但是如果标签从屏幕外移动,暂停在中间,然后再次移动屏幕,那么距离是相同的,因此移动它所需的时间必须也是平等的。

你检查过duration1 == duration2吗?

如果duration1 == duration2,那么另一个罪魁祸首可能是在同一时间范围内,标签行进的距离不同,因此实际上并没有以相同的速度移动。根据你上面的代码,这看起来不太可能。我唯一能想到的是它是由于你的锚点不是你的标签的中心...也许你的边界情况是你的动画向右倾斜,导致距离变得不同,尽管它想要它甚至向下中间。