Динамическое меню с cocos2d для ipad - PullRequest
1 голос
/ 11 августа 2011

Уважаемое сообщество stackoverflow,

У меня есть простое меню, которое должно быть динамическим.Под динамикой я подразумеваю, что каждый раз, когда я открываю это меню, у меня разное количество элементов.

Итак, у меня есть NSMutableArray:

NSMutableArray *answerList = [[NSArray alloc]init];

for(int i=0; i<countAnswers; i++){

    CCLabelTTF *labelAnswer = [CCLabelTTF labelWithString:answer fontName:@"Marker Felt" fontSize:40];        
    CCMenuItemLabel * MenuItemAnswer = [CCMenuItemLabel itemWithLabel:labelAnswer target:self selector:@selector(vedidimorire)];
    [answerList addObject:MenuItemAnswer];


}

код упрощен, но важно то, что у меня есть массив с различными CCMenuItem.Теперь я не буду создавать элементы меню с этими элементами

CCMenu * myMenu = [CCMenu menuWithItems: ????? ];

Как я могу это сделать?

Заранее большое спасибо за ответ!Benza

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Я столкнулся с этой проблемой некоторое время назад, и есть действительно простой способ сделать это. Просто добавьте ваш CCMenuItem как дочерний элемент вашего CCMenu в каждом цикле. Заменить [answerList addObject: MenuItemAnswer]; с помощью [myMenu addChild: MenuItemAnswer];; избавьтесь от массива MenuItemAnswer и создайте myMenu с этим кодом: CCMenu * menu = [CCMenu menuWithItems: nil]; и не забудьте добавить это меню как дочерний элемент другого CCNode.

1 голос
/ 12 августа 2011

Как я вижу, у вас есть несколько вариантов здесь.

Вы должны быть в состоянии передать va_list в CCMenu Прочитайте это для получения дополнительной информации: http://cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html

в противном случае

Просто не используйте CCmenu. Создайте собственный класс, который может обрабатывать сенсорные события.

Надеюсь, это поможет

Адам

0 голосов
/ 12 августа 2011

В вашем answerList изменяемом массиве есть CCMenuItemLabel объекты.

Теперь, если вы хотите создать меню, сначала вы должны посчитать, сколько ответов есть в answerList, а затем создать CCMenu для каждого из этих пунктов в [CCMenu menuWithItems:.

Сначала определите минимальный и максимальный ответы, которые могут быть в массиве answerList. Пусть minAnswer = 3 и maxAnswer = 6 Тогда,


int currentAnswerCount = [answerList count];
CCmenu  myMenu;

if (currentAnswerCount == minAnswer) {
myMenu = [CCMenu menuWithItems:[answerList objectAtIndex:0], [answerList objectAtIndex:1], [answerList objectAtIndex:2]];
}
else if (currentAnswerCount == minAnwer + 1 {
myMenu = [CCMenu menuWithItems:[answerList objectAtIndex:0], [answerList objectAtIndex:1], [answerList objectAtIndex:2], [answerList objectAtIndex:3]];
}
..
.. 
upto maxAnswer.

[self addChild:myMenu];

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...