Как заставить CCScrollLayer иметь несколько аватаров на страницу
У меня есть список из примерно 10 аватаров, и я использую CCScrollLayer для отображения подкачки. В настоящее время он показывает только 1 аватар на страницу, и я бы предпочел, чтобы он показывал 3 аватара на страницу, но я не уверен, как это сделать.
Я пытался убедиться, что новая страница генерируется, только если есть MODULUS из 3, но это вызывает проблемы, потому что части кода должны быть доступны, такие как добавление элементов в меню.
Когда я пытаюсь использовать MODULUS (связанный с оператором if), он жалуется, что мое меню выходит за рамки.
Мой код следует;
// Avatars are generally 70x72
//
GameStateManager *state = [GameStateManager sharedGameStateManager];
NSLog(@"listOfPlayers.size = %d", [state.listOfPlayers count]);
// Menu of playable characters
int i=0;
NSMutableArray *pagesArray = [NSMutableArray array];
// --
for (Player *p in state.listOfPlayers)
{
// create a blank layer for page
CCLayer *page = [CCLayer node];
[page setContentSize:CGSizeMake(200, 100)];
CCMenu *menu = [CCMenu menuWithItems:nil];
[menu setContentSize:CGSizeMake(200, 72)];
[menu alignItemsHorizontallyWithPadding:9.0f];
[page addChild:menu];
// --
NSLog(@"p: %@ (%@) -- locked: %d, playable: %d", p.name, p.fileName, [p.isLocked intValue], [p.isPlayable intValue]);
//int isLocked = [p.isLocked intValue];
int isPlayable = [p.isPlayable intValue];
NSString *fileName = [NSString stringWithFormat:@"hold_%@", p.fileName];
//if ( (isLocked == 0) && (isPlayable == 1) )
if (isPlayable == 1)
{
CCSprite *avatarOff = [CCSprite spriteWithSpriteFrameName:fileName];
CCSprite *avatarOn = [CCSprite spriteWithSpriteFrameName:fileName];
CCMenuItemSprite *menuItem = [CCMenuItemSprite itemFromNormalSprite:avatarOff selectedSprite:avatarOn target:self selector:nil];
[menuItem setTag:i];
[menu addChild:menuItem];
[pagesArray addObject:page];
i++;
}
} // next
// Now create the scroller and pass-in the pages (set widthOffset to 0 for fullscreen pages)
CCScrollLayer *scroller = [[CCScrollLayer alloc] initWithLayers:[NSMutableArray arrayWithArray:pagesArray] widthOffset: 200];
// finally add the scroller to your scene
[self addChild:scroller];
Скриншот следует. Показывает 1 аватар на страницу.
1 ответ
Решение
Мне кажется, вы видите, что вы программируете. Пытаться
// Avatars are generally 70x72
//
GameStateManager *state = [GameStateManager sharedGameStateManager];
NSLog(@"listOfPlayers.size = %d", [state.listOfPlayers count]);
// Menu of playable characters
int i=0;
NSMutableArray *pagesArray = [NSMutableArray array];
// --
CCLayer *page=nil;
CCMenu *menu=nil;
int avisOnPage=0;
for (Player *p in state.listOfPlayers)
{
if(0==avisOnPage) {
// create a blank layer for page
page = [CCLayer node];
[page setContentSize:CGSizeMake(200, 100)];
menu = [CCMenu menuWithItems:nil];
[menu setContentSize:CGSizeMake(200, 72)];
[menu alignItemsHorizontallyWithPadding:9.0f];
[page addChild:menu];
[pagesArray addObject:page];
} // if new page
// --
NSLog(@"p: %@ (%@) -- locked: %d, playable: %d", p.name, p.fileName, [p.isLocked intValue], [p.isPlayable intValue]);
//int isLocked = [p.isLocked intValue];
int isPlayable = [p.isPlayable intValue];
NSString *fileName = [NSString stringWithFormat:@"hold_%@", p.fileName];
//if ( (isLocked == 0) && (isPlayable == 1) )
if (isPlayable == 1)
{
CCSprite *avatarOff = [CCSprite spriteWithSpriteFrameName:fileName];
CCSprite *avatarOn = [CCSprite spriteWithSpriteFrameName:fileName];
CCMenuItemSprite *menuItem = [CCMenuItemSprite itemFromNormalSprite:avatarOff selectedSprite:avatarOn target:self selector:nil];
[menuItem setTag:i];
[menu addChild:menuItem];
avisOnPage++;
i++;
if(3==avisOnPage) avisOnPage=0;
} // if isPlayable
} // for player
// Now create the scroller and pass-in the pages (set widthOffset to 0 for fullscreen pages)
CCScrollLayer *scroller = [[CCScrollLayer alloc] initWithLayers:pagesArray widthOffset: 200];
// finally add the scroller to your scene
[self addChild:scroller];