我将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快得多......我做错了什么?
答案 0 :(得分:0)
动画仅受两个可能变量的影响:距离或时间,因为您将速度设置为600.0f,因此持续时间或距离导致问题。
我确定你已经介入了你的代码,但是如果标签从屏幕外移动,暂停在中间,然后再次移动屏幕,那么距离是相同的,因此移动它所需的时间必须也是平等的。
你检查过duration1 == duration2吗?
如果duration1 == duration2,那么另一个罪魁祸首可能是在同一时间范围内,标签行进的距离不同,因此实际上并没有以相同的速度移动。根据你上面的代码,这看起来不太可能。我唯一能想到的是它是由于你的锚点不是你的标签的中心...也许你的边界情况是你的动画向右倾斜,导致距离变得不同,尽管它想要它甚至向下中间。