Использование CCScrollView в Cocos2d V3
Мне интересно, может ли кто-нибудь помочь мне с этим. Я хочу добавить 4 CCScrollViews, которые будут прокручиваться горизонтально, на CCNode. CCNode, установленный и удерживаемый на устройстве в портретном режиме, заполнит весь экран нормализованным размером содержимого, установленным для охвата всего экрана.
Таким образом, в сущности, виды прокрутки будут накладываться друг на друга, причем четвертое находится внизу экрана, а первое - сверху. Теперь мне удалось добавить 4 CCScrollViews, но только один отвечает на прикосновения. Другие квартиры неподвижны. Похоже, что последний CCScrollView, добавленный к узлу, перекрывает остальные три, и это единственное, что отвечает на запросы касания. У всех 4 CCScrollViews свойство делегата установлено в self.
Я прихожу на Cocos2d с большим опытом работы с UIKit. Итак, я пытаюсь применить мой стиль мышления UIScrollView ко всему этому. Имея хороший Google и придумывая немного, я задаюсь вопросом, может ли ТАК помочь. Я даже рассматривал возможность включения UIScrollView в Cocos2d.
Я думаю, что мои основные проблемы здесь двояки. Во-первых, у меня есть проблема с сенсорным ответом. Во-вторых, у меня проблема с подкачкой и контролем размера контента. Путем проб и ошибок я вроде как поладил, но если бы кто-то мог написать немного лучшего практического руководства по реализации CCScrollView, особенно там, где не задано contentSize CCNode или CCspriteFrame, добавляемый в более крупный 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];
}