如何通过触摸删除CCnode?

如何通过触摸删除CCnode?

问题描述:

我需要帮助我试图删除一个不断在不同位置重生的ccnode,并将它们添加到一个数组中,以获得对这些精灵的控制,但事情是我不能删除它们,它检测到触摸但没有得到任何想法?这里是我用来获取节点的代码。提前致谢。如何通过触摸删除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是否在苹果的边界框中。关于该主题的许多示例和问题。另外,在迭代数组时,您正在从_appleOnScreen中删除。除非您按相反顺序进行迭代,否则这将炸弹。 – YvesLeBorg 2014-09-24 02:39:32

允许我为您提供一个稍微不同的方法。子类CCNode到CCAppleNode并在CCAppleNode.m文件中检测触摸并在touchBegan上调用removeFromParent。通过这种方式,CCAppleNode类在触动父母时承担了将其从父母中移除的责任,从主游戏场景中带走了这一责任。

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

谢谢你的工作完美,它解决了从场景中删除精灵的问题,但仍然需要通过每次接触和删除精灵时添加点来实现一个分数系统,分数系统需要显示在主现场的情况是,现在在CCAppleNode中的移除方法和主场景中的评分系统我可以做什么来检测每次调用remove方法并修改分数? – 2014-09-26 22:30:21

+0

这有很多选项..即使有点矫枉过正的是使用NSNotificationCenter,在触发CCAppleNode中的事件并让分数管理系统监听该事件时,也是最简单的选项之一。你会发现这个问题已经多次被'so'解决了。 – 2014-09-27 09:32:26

+0

嘿。 NSNotificationCenter是一个完美的代码很好的建议,你是对的,这个问题已经解决了很多次...对不起,如果我对待你喜欢我的发展宗师,但你有任何建议如何检测两个对象是否碰撞,我试过使用ccPhysicsCollisionBegin没有成功,需要检测CCAppleNode是否与我在SpriteBuilder中创建的节点发生碰撞,并将其作为静态主体运行应用程序,并且精灵会与节点发生冲突,但它不会作为碰撞检测出来。你有什么建议吗?先谢谢你。 – 2014-09-28 23:05:02