2014-09-24 56 views
0

我需要幫助我試圖刪除一個不斷在不同位置重生的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

回答

0

允許我爲您提供一個稍微不同的方法。子類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