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
は1024x0のcontentSizeを設定し、スケジュールされた呼び出しを使用して成長させます。
-(void) grow {
float height = [self contentSize].height + 2;
if (height >= 768){
[self unschedule:@selector(grow)];
height = 768;
}
[self setContentSize:CGSizeMake(1024, height)];
}
これは魅力のように機能します。CCLayer
高さは着実に成長し、完全にマスクされていません。ただし、アクションを使用していないため、イージング機能を使用できません。
イージング関数を使用できるようにする(スケーリングではなく)サイズを変更するアクションはありますか、CCLayer
またはこれを行う他の(より良い)方法はありますか?