如何使用CCClippingNode剪切CCTableView的顶部和底部

时间:2014-10-25 08:51:00

标签: ios objective-c cocos2d-iphone

我是Cocos2d的新手,我“真的”在调整CCTableView的大小。我所指的是如何控制它的高度,以便我在顶部和底部有空间。

我的桌面视图正常运行,我试图用精灵在视觉上包裹顶部和底部,以提供框架的外观和感觉。但是当我触摸桌面视图滚动时 它向上或向下,它垂直占据屏幕的大部分。我开始搞乱contentSize,认为这会改变每个单元格出现的位置,并从顶部和底部消失。但这没有效果。

关于Google的问题,我正在读到我必须使用带有模板的剪切节点?来自UIkit,这看起来有点像faff。有没有人喜欢在一个教程中使用一个简单的CCTableView表示的代码,坐在每个单元格出现的场景中间并在内容框架下消失?

2 个答案:

答案 0 :(得分:1)

您应该查看cocos2d扩展包中的CCCropNode:

https://github.com/cocos2d/cocos2d-swift-ext/tree/master/Extensions/CCCropNode

CCCropNode使用glScissor将绘图剪辑到指定区域:比CCClippingNode(使用模板缓冲区)简单得多。

此论坛帖子也可以提供帮助:

http://forum.cocos2d-swift.org/t/ccclippingnode-woes/14752

你仍然会遇到触及目标区域之外触摸滚动/表格区域的问题(我发现CCCropNode触摸剪辑不起作用 - 需要调查它,因为它导致我的问题)

答案 1 :(得分:1)

我遇到了同样的问题,我设法通过向CCScrollView.m添加代码来解决表区域外的问题,如下所示: -

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(CCTouch *)touch
{
    // Added by Season
    //*************************************************************
    CGPoint lcgpTouch = [touch locationInWorld];
    if (!(lcgpTouch.x >= [self position].x && lcgpTouch.x <= [self position].x + [self contentSize].width &&
        lcgpTouch.y >= [self position].y && lcgpTouch.y <= [self position].y + [self contentSize].height)) {
        return NO;
    }
    //*************************************************************

    if (!_contentNode) return NO;
    if (!self.visible) return NO;
    if (!self.userInteractionEnabled) return NO;

并且您需要将SetContentSize设置为CCTableView才能使这段代码正确地获得大小。

其他信息: 我在外部目标区域之上有一些CCSprite,假设在上面的编码之后对touchBegan的响应失败,那么我将所有CCSprite更改为CCButton,它就像一个魅力。你不需要做我在这里做的事情,你可以修改编码以允许CCSprite轻松响应touchBegan。

希望上面的编码可以帮助你们所有人。