2013-08-12 4 views
0

У меня есть основное непонимание указателей. Я хочу создать много спрайтов, и я хочу, чтобы они были известны всему классу. Что я сделал - и его вид чуда, что он работает, это:Создание множества спрайтов - неправильный путь?

Я определил в .h файле: CCSprite *brokenBox;, поэтому весь класс может его увидеть. Позже у меня есть функция, которая создает многих из них и добавляет тело каждому из них.

-(void)someF 
{ 

    brokenBox=[CCSprite spriteWithFile:@"brokenBox.png"]; 
    brokenBox.tag=5; 
    brokenBox.position=ccp(point.x*relativeX, point.y); 
    //now attach abody to him 
    .... 
    .... 
    [self addChild:brokenBox]; 


} 

Теперь эта функция вызывается много раз (здесь много ящиков). Что я не понимаю, так это то, как один указатель может изменить файл, на который он указывает снова и снова, и как я могу снова и снова добавлять его в качестве ребенка? Создает ли он много указателей?

Каков правильный способ работы, поэтому я могу получить доступ ко всем этим спрайтам? (теперь для доступа к ним я делать:.. [self getChildByTag:5]; и все они имеют один и тот же тег = 5

Спасибо большое

ответ

1

Указатель brokenBox изменяется каждый раз, когда вы создаете спрайт Таким образом, после того, как вы сделали. .. создавать свои «много» спрайтов, точки brokenBox до последних спрайтов вы создали

getChildByTag возвращает только первый он встречает в детском списке с тэгом вы дали вы, вероятно, хотите иметь что-то вроде этого:

в .h

NSNutableArray *_brokenBoxes; 

@property (nonatomic,readonly) NSArray *brokenBoxes; 
// remove your property for brokenBox, it would be invalid (see above) 

в ом,

глобального

@synthesize brokenBoxes = _brokenBoxes; 

INIT

_brokenBoxes = [[NSMutableArray array] retain]; 

dealloc

[_brokenBoxes release]; 

очистка:

[_brokenBoxes removeAllObjects]; 

НЕКОЕ:

CCSprite *brokenBox=[CCSprite spriteWithFile:@"brokenBox.png"]; 
.... 
.... 
[brokenBoxes addObject:brokenBox]; 
[self addChild:brokenBox]; 

Из ваших других классов, получить доступ к спрайтов с brokenBoxes массива.

for (CCSprite *brokenBox in self.brokenBoxes) { 
    // do your stuff. 
} 
Смежные вопросы