【发布时间】:2014-08-01 20:15:41
【问题描述】:
使用 CCScrollView 时,我希望能够将可视区域限制在某个边界框内。如何实现?
设置内容大小不会影响可视区域。
【问题讨论】:
-
无法在滚动视图中使用,可能会将其与剪切节点结合或在其上绘制帧精灵
-
您愿意看看我找到的解决方案吗?您认为这是一种合理的做法吗?
标签: cocos2d-iphone ccscrollview
使用 CCScrollView 时,我希望能够将可视区域限制在某个边界框内。如何实现?
设置内容大小不会影响可视区域。
【问题讨论】:
标签: cocos2d-iphone ccscrollview
所以我找到了似乎是一种合理的方法来做到这一点。 cocos2d论坛上有一些代码可以使用GL_SCISSOR裁剪区域:
http://forum.cocos2d-swift.org/t/cocos2d-3-1-beta-gl-scissor-test/13608/4
-(void)visit:(CCRenderer *)renderer parentTransform:(const GLKMatrix4 *)parentTransform
{
CGPoint positionInWorldCoords = [self convertToWorldSpace:ccp(0, 0)];
CGFloat contentScaleFactor = [[CCDirector sharedDirector] contentScaleFactor];
positionInWorldCoords = ccpMult(positionInWorldCoords, contentScaleFactor);
[renderer enqueueBlock:^{
glEnable(GL_SCISSOR_TEST);
glScissor(positionInWorldCoords.x, positionInWorldCoords.y, self.contentSize.width * contentScaleFactor, self.contentSize.height * contentScaleFactor);
} globalSortOrder:0 debugLabel:nil threadSafe:YES];
[super visit:renderer parentTransform:parentTransform];
[renderer enqueueBlock:^{
glDisable(GL_SCISSOR_TEST);
} globalSortOrder:0 debugLabel:nil threadSafe:YES];
}
所以我继承了CCScrollView 并添加了这个方法。我最终不得不稍微调整坐标以获得准确的剪裁区域。似乎是一个笨拙的答案,所以我希望有人有更好的答案。
【讨论】: