在Cocos2d V3中使用CCScrollView

时间:2014-10-24 09:47:13

标签: ios objective-c uiscrollview cocos2d-iphone cocos2d-swift

我想知道是否有人可以帮助我。我想在CCNode上添加4个水平滚动的CCScrollViews。以纵向模式定位和保持在设备上的CCNode将在整个屏幕上填充标准化的contentSize,以覆盖整个屏幕。

所以从本质上讲,滚动视图会堆叠在一起,第四个位于屏幕的底部,第一个位于顶部。现在,我已经设法添加 4个CCScrollViews,但只有一个响应触摸。其他人是扁平的,不可移动的。这几乎就像添加到节点的最后一个CCScrollView覆盖了其他三个,它是唯一响应触摸请求的东西。所有4个CCScrollView都将其委托属性设置为self。

我是来Cocos2d的人,有一点UIKit经验。所以,我正在尝试将我的UIScrollView思维模式应用于所有这些。我有一个很好的谷歌,并提出很少,我想知道是否可以提供帮助。我甚至一直在考虑将UIScrollView卷入Cocos2d。

我想我的主要问题是双重的。一,我的触摸响应问题。二,我的分页方面和内容大小的控制存在问题。通过试验和错误,我有点相处,但是如果有人可能会写一些CCScrollView实现的最佳实践指南,特别是在没有设置CCNode或CCspriteFrame的contentSize时添加到更大的contentView的内容没有填满整个屏幕的宽度。

提前致谢。

#import "CCToolKit.h"
#import "GameShip.h"

typedef enum ShipPart
{
    ShipPartHead,
    ShipPartBody,
    ShipPartWings,
    ShipPartBoosters
} ShipPart;

@implementation GameShip

-(instancetype)init {
    if (self = [super init]) {
        [self addBackground];
        [self addScrollTo:ShipPartHead forQtyOfParts:3];
        [self addScrollTo:ShipPartBody forQtyOfParts:4];
        [self addScrollTo:ShipPartWings forQtyOfParts:3];
        [self addScrollTo:ShipPartBoosters forQtyOfParts:3];

    }

    return self;

}

-(void)addBackground {

    CCSprite *bg = [CCSprite spriteWithImageNamed:kGameMainBackGround];
    bg.positionType = CCPositionTypeNormalized;
    bg.position = ccp(0.5f,0.5f);
    [self addChild:bg];

}

-(void)addScrollTo:(ShipPart)shipPart forQtyOfParts:(int)partQty {

    NSString *imageFileNameSegment;
    switch (shipPart) {
        case ShipPartHead:
            imageFileNameSegment = @"head";
            break;

        case ShipPartBody:
            imageFileNameSegment = @"body";
            break;

        case ShipPartWings:
            imageFileNameSegment = @"wings";
            break;

        case ShipPartBoosters:
            imageFileNameSegment = @"boosters";
            break;

        default:
            break;
    }

    CCNode *scrollViewContents = [CCNode node];
    scrollViewContents.contentSizeType = CCSizeTypeNormalized;
    scrollViewContents.contentSize = CGSizeMake(partQty * 0.65, 0.25f);
    NSLog(@"scrollView,height %f", scrollViewContents.boundingBox.size.height);

    for (int i = 1; i <= partQty; i++) {
        NSString *imageFileName = [NSString stringWithFormat:@"%@%d.png", imageFileNameSegment, i];

        CCSprite *shipPartSprite = [CCSprite spriteWithImageNamed:imageFileName];
        shipPartSprite.positionType = CCPositionTypeNormalized;
        shipPartSprite.position = ccp((i + 0.5f) / partQty, 0.5f);

        [scrollViewContents addChild:shipPartSprite];
    }

    CCScrollView *scrollView = [[CCScrollView alloc] initWithContentNode:scrollViewContents];
    scrollView.pagingEnabled = YES;
    scrollView.horizontalScrollEnabled = YES;
    scrollView.verticalScrollEnabled = NO;
    scrollView.color = [CCColor redColor];
    scrollView.contentSize = CGSizeMake(0.5f, 0.25f);
    scrollView.positionType = CCPositionTypeNormalized;
    scrollView.position = ccp(-1.0f, ((shipPart * 0.25f) -0.1f));
    scrollView.delegate = self;
    //scrollView.description = [NSString stringWithFormat:@"%d", shipPart];

    [self addChild:scrollView];
    //[scrollView setHorizontalPage:1];
}

0 个答案:

没有答案