CCScrollView滚动和触摸事件永不开火

我找不到任何有用的教程或解释如何使用CCScrollView 。 我有一个网格布局的精灵和标签(iOS游戏上市成果)。 在屏幕上有超过可以适合,所以我希望用户能够滚动。

为了滚动,用户将向上滑动/向上滑动,以显示较低的精灵等。

我find了一些代码示例,他们似乎表明你只需要添加你的内容节点到滚动节点,它会照顾剩下的事情。

这似乎并不奏效。 没有滚动,并且滚动层上的平移/触摸事件似乎不会被触发。 closuresbutton,我在同一个孩子(兄弟的滚动视图)不再工作。

我没有使用SpriteBuilder。

 // Node to hold all sprites/labels scrollContents = [CCNode node]; // I add a bunch of sprites/labels in a grid view for( NSString *key in badgeKeys ){ // logic to load the sprite would be here CCSprite *badge = [CCSprite spriteWithSpriteFrame:frame]; badge.positionType = CCPositionTypeNormalized; badge.position = ccp(xPos,yPos); [scrollContents addChild:badge]; // some logic to increment x/y position logic, for grid layout } // Scroll view scrollView = [[CCScrollView alloc] initWithContentNode:scrollContents]; scrollView.horizontalScrollEnabled = NO; scrollView.verticalScrollEnabled = YES; [scrollView setBounces:NO]; // My sprites never even show unless I manually set this scrollContents.contentSize = CGSizeMake(self.contentSize.width,960); NSLog(@"scrollContents contentsize: %f %f", scrollContents.contentSize.width,scrollContents.contentSize.height); [self addChild:scrollView]; 

好吧,这里是一个工作示例(我解构了我的代码的一部分,给你一个完整的工作代码示例)的滚动菜单里面的“活”button。 我只是testing了这个“解构”,它的工作原理

 - (void) scrollingMenuWithCharmsTest { // setup something to scroll GameInventory *gi = [GameInventory sharedGameInventory]; while (gi.armorCharms.count < 20) { [gi addArmorCharm:[ArmorCharm createRandomArmorCharm]]; } CCNode *contentNode = [self charmsContentNodeFor:gi.armorCharms showEquiped:NO spacingBetweenMenuItems:8 target:self selector:@selector(onArmorCharmSelected:)]; // setup a clipping node to crop out the CCScrollingMenu CCNodeColor *ccn = [CCNodeColor nodeWithColor:[CCColor blackColor] width:180 height:200]; ccn.anchorPoint = ccp(0, 0); CCClippingNode *cn = [CCClippingNode clippingNodeWithStencil:ccn]; cn.alphaThreshold = 0.05f; [self addChild:cn]; cn.inverted = NO; cn.positionInPointsV = ccp(50, 50); cn.anchorPoint = ccp(0, 0); cn.contentSizeInPoints = CGSizeMake(180, 200); // setup scrolling menu CCScrollView * bsm = [[CCScrollView alloc] initWithContentNode:contentNode]; bsm.contentSize=CGSizeMake(180,200); [cn addChild:bsm]; bsm.position = ccp(0, 0); bsm.bounces = YES; bsm.pagingEnabled = NO; bsm.verticalScrollEnabled = YES; bsm.horizontalScrollEnabled = NO; bsm.contentSizeInPoints = CGSizeMake(180, 200); // inPoints only after the node has a parent for (CharmAbstractBoxMenuItem *lmi in bsm.contentNode.children) { TRACE(@"item %@ is at %@", lmi.item.description, NSStringFromCGPoint(lmi.positionInPointsV)); } TRACE(@"number of pages : %i", bsm.numVerticalPages); } - (CCNode *)charmsContentNodeFor:(NSDictionary *)keyedItems showEquiped:(BOOL)isShowEquiped spacingBetweenMenuItems:(float)inSpacing target:(id)inTarget selector:(SEL)inSelector { NSSortDescriptor *sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]; NSArray *sortedKeys = [[keyedItems allKeys] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortOrder]]; float initialY = 0; float currentY = initialY; NSUInteger itemNumber = 0; CGFloat width = 0; CGFloat height = 0; CCNode *contentNode = [CCNode node]; for (NSUInteger loopi = 0; loopi < [sortedKeys count]; loopi++) { NSString *key = [sortedKeys objectAtIndex:loopi]; CharmAbstract *ci = [keyedItems objectForKey:key]; if (ci) { CharmAbstractBoxMenuItem *cmi = [CharmAbstractBoxMenuItem itemBoxFor:ci target:inTarget selector:inSelector ]; cmi.toolTip = ci.toolTip; cmi.position = ccp(deviceOffset(0), currentY); cmi.key = key; [contentNode addChild:cmi z:0 name:[NSString stringWithFormat:@"%li", (long) itemNumber]]; currentY += cmi.contentSizeInPoints.height + inSpacing; itemNumber++; if (cmi.contentSize.width > width) width = cmi.contentSize.width; height += cmi.contentSize.height; if (loopi < sortedKeys.count - 1) height += inSpacing; } else { MPLOG(@"*** Key [%@] yielded no items.", key); } } contentNode.contentSizeType = CCSizeTypePoints; contentNode.contentSize = CGSizeMake(width, height); return contentNode; } 

一些说明:

  • 我给了你我的“构build内容节点”的例程,让你知道位置和大小的细节。
  • 我的charmMenuItemss派生自'CCButton',并且很热…在这个代码片段的完整版本中,我扩展了CCScrollView以防止button在作物区域之外“热”(虽然它们从视图中被裁剪掉,但它们仍然默认情况下为“可见”,并且当在作物区域上方或下方发生随机拍打时可以响应)。
  • 对于使用模板裁剪节点,您需要将其添加到setupCocos2dWithOptions行中:

    CCSetupDepthFormat:[NSNumber numberWithUnsignedInt:GL_DEPTH24_STENCIL8_OES]

在你附近的模拟器上看到:)