1

我有一个CCLayer,应该从上到下“不掩饰”。

我实施GLScissor了访问前和访问后以减少超出层范围的内容:

#pragma mark Clipping
-(void)visit {
    [self preVisit];
    [super visit];
    [self postVisit];
}
-(void)preVisit {
    if (!self.visible)
        return;

    glEnable(GL_SCISSOR_TEST);
    CGRect clipRect = [self boundingBox];
    CGPoint origin = [self convertToWorldSpaceAR:clipRect.origin];
    CGRect scissorRect = CGRectMake(origin.x - self.anchorPoint.x * clipRect.size.width, 768 - origin.y - self.anchorPoint.y * clipRect.size.height, clipRect.size.width, clipRect.size.height);

    scissorRect = CC_RECT_POINTS_TO_PIXELS(scissorRect);

    glScissor((GLint) scissorRect.origin.x, (GLint) scissorRect.origin.y,
          (GLint) scissorRect.size.width, (GLint) scissorRect.size.height);
}
-(void)postVisit {
    glDisable(GL_SCISSOR_TEST);
}

CCLayer通过将 contentSize 设置为 1024x0 并使用预定的调用来实现增长:

-(void) grow {
    float height = [self contentSize].height + 2;
    if (height >= 768){
        [self unschedule:@selector(grow)];
        height = 768;
    }
    [self setContentSize:CGSizeMake(1024, height)];
}

这就像一个魅力。CCLayer高度稳步增长,它被完美地揭开。但是,我不能使用任何缓动函数,因为我没有使用任何动作。

是否有任何动作可以调整CCLayer(不缩放)允许我使用缓动函数的大小,或者是否有任何其他(更好的)方法可以做到这一点?

4

1 回答 1

2

最好的选择是使用 CCActionTween(以前:CCPropertyAction)并将其包装在一个缓动动作中:

id tween = [CCActionTween actionWithDuration:5 key:"sizeHeight" from:1024 to:0];
id ease = [CCEaseInOut actionWithAction:tween];
[layer runAction:ease];

这将修改sizeHeight图层命名的属性。您可以使用它来调整 contentSize,因为您不能直接补间 C 结构属性(如 CGSize 或 CGPoint):

-(void) setSizeHeight:(float)height
{
    self.contentSize = CGSizeMake(self.contentSize.width, height);
}
于 2012-09-20T15:02:42.657 回答