Cocos2d iphone 调整CCLayer的大小。不缩放

Cocos2d iphone 调整CCLayer的大小。不缩放,cocos2d-iphone,Cocos2d Iphone,我有一个CCLayer,它应该从上到下“无遮罩” 我实施了GLScissorpre-vision和post-vision以减少超出层边界的内容: #pragma mark Clipping -(void)visit { [self preVisit]; [super visit]; [self postVisit]; } -(void)preVisit { if (!self.visible) return; glEnable(GL_SC

我有一个
CCLayer
,它应该从上到下“无遮罩”

我实施了
GLScissor
pre-vision和post-vision以减少超出层边界的内容:

#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);
}
我通过将contentSize设置为1024x0并使用定时调用,使
CCLayer
增长:

-(void) grow {
    float height = [self contentSize].height + 2;
    if (height >= 768){
        [self unschedule:@selector(grow)];
        height = 768;
    }
    [self setContentSize:CGSizeMake(1024, height)];
}
这很有魅力。
CCLayer
高度稳定增长,完美无瑕。但是,我不能使用任何缓解功能,因为我没有使用任何动作


是否有任何调整<代码>CCLayer(非缩放)大小的操作允许我使用缓解功能,或者有任何其他(更好的)方法可以做到这一点?

最好的选择是使用CCActionTween(以前称为CCPropertyAction)并将其包装在缓解操作中:

id tween = [CCActionTween actionWithDuration:5 key:"sizeHeight" from:1024 to:0];
id ease = [CCEaseInOut actionWithAction:tween];
[layer runAction:ease];
这将修改图层名为
sizeHeight
的特性。您可以使用它来调整contentSize,因为您不能直接在CGSize或CGPoint等C结构属性之间切换:

-(void) setSizeHeight:(float)height
{
    self.contentSize = CGSizeMake(self.contentSize.width, height);
}