【问题标题】:How can I control the size of a CCScrollView?如何控制 CCScrollView 的大小?
【发布时间】:2014-08-01 20:15:41
【问题描述】:

使用 CCScrollView 时,我希望能够将可视区域限制在某个边界框内。如何实现?

设置内容大小不会影响可视区域。

【问题讨论】:

  • 无法在滚动视图中使用,可能会将其与剪切节点结合或在其上绘制帧精灵
  • 您愿意看看我找到的解决方案吗?您认为这是一种合理的做法吗?

标签: cocos2d-iphone ccscrollview


【解决方案1】:

所以我找到了似乎是一种合理的方法来做到这一点。 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 并添加了这个方法。我最终不得不稍微调整坐标以获得准确的剪裁区域。似乎是一个笨拙的答案,所以我希望有人有更好的答案。

【讨论】:

  • 是的,CCClippingNode 也是这样做的
  • 谢谢!这似乎是一个更好的机制。是否要将其添加为答案,以便我将其标记为正确?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多