2014-09-24 2 views
0

Мне нужна помощь, я попытался удалить ccnode, который постоянно обновляется в разных местах и ​​добавляет их в массив, чтобы получить контроль над тем, какие спрайты находятся на экране, но дело в том, что я не могу их удалить, он обнаруживает штрихи но не удаляются ли какие-либо идеи? здесь используется код im, используемый для перехода на узел. Заранее спасибо.Как удалить CCnode прикосновением?

- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 

CGPoint location = [touch locationInView:[touch view]]; 
location = [[CCDirector sharedDirector] convertToUI:location]; 
for (CCNode *sprite in _spritesOnScreen) { 
if (CGPointEqualToPoint(sprite.position, location)) { 
    [_spritesOnScreen removeObject:sprite]; 
    [self removeChild:sprite cleanup:YES]; 

} 
} 
} 
+1

шансы получить точку в соответствии с точкой очень тонкие, если учесть, что прикосновение - это какое-то среднее геометрическое всех точек, которые активируются одним кончиком пальца. Лучше всего проверить, есть ли UITouch, который вы получаете, в ограничивающей коробке яблок. Много примеров и вопросов по SO на эту тему. Кроме того, вы удаляете из _appleOnScreen во время итерации массива. Это будет бомбить, если вы не выполните итерацию в обратном порядке. – YvesLeBorg

ответ

0

Позвольте мне предложить вам несколько иной подход. Подкласс CCNode в CCAppleNode и в файле CCAppleNode.m обнаруживает касание и вызывает removeFromParent на touchBegan. Таким образом, класс CCAppleNode берет на себя ответственность за удаление себя от родителя при его касании, отнимая эту ответственность от вашей основной игровой сцены.

-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event{ 
    [self removeFromParentAndCleanup:YES]; 
    [super touchBegan:touch withEvent:event]; 
} 
+0

Спасибо, что сработали отлично, он решил проблему удаления спрайта со сцены, но все же мне нужно внедрить систему баллов, добавляя точки каждый раз, когда спрайт прикасается и удаляется, система оценки должна отображаться в главном сцена заключается в том, что теперь метод удаления внутри CCAppleNode и системы подсчета очков на главной сцене, что я могу сделать, чтобы каждый раз обнаруживать метод удаления и изменять счет? –

+0

Есть много вариантов для этого .. один из самых простых, даже если немного перехитрить - использовать NSNotificationCenter, где вы запускаете событие в CCAppleNode и заставляете систему управления оценкой прослушивать это событие. вы обнаружите, что эта проблема была решена «так» несколько раз раньше. –

+0

Эй. NSNotificationCenter был отличным предложением, идеально подходящим для кода, и вы были правы, что проблема была решена много раз ... извините, если я рассматриваю вас как моего развивающегося гуру, но есть ли у вас какие-либо предложения о том, как обнаружить, сталкиваются ли два объекта, я попытался используя ccPhysicsCollisionBegin без успеха, необходимо определить, сталкивается ли CCAppleNode с узлом, который я создал в SpriteBuilder, как статическим телом, в котором я запускаю приложение, и спрайт сталкивается с узлом, но он не обнаруживается как столкновение. Есть ли у вас какие-либо предложения? Заранее спасибо. –

Смежные вопросы