2014-07-17 33 views
1

編輯:我一定剛剛在破解前。清潔和其他重建似乎已修復它。刪除SKNode樹在touchesBegan

我希望第二組眼睛會告訴我我錯過了什麼。我有SpriteKit遊戲場景(iOS 7.1)和一些「HUD」SKSpriteNodes ...靜音聲音按鈕,顯示最後的樂譜等。我正在檢測他們是否碰到了touchesBegan:withEvent。

當觸摸節點時,會調用相應的方法來顯示其內容(此部分工作正常)。他們不是SKScenes只是一個SKSpriteNode圖像,頂部有一些標籤。其中一個標籤是一個後退按鈕,我想要關閉該節點/將其從父項中移除。這不像我預期的那樣工作。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [touches anyObject]; 
    CGPoint touchLocation = [touch locationInNode:self]; 
    SKNode *touchedNode = [self nodeAtPoint:touchLocation]; 

    // --- Scores 

    if ([touchedNode.name isEqualToString:@"scoresButton"]) { 
     [self showScoresBoard]; 
    } 

    // --- Back 

    if ([touchedNode.name isEqualToString:@"backLabel"]) { 
     SKNode *chalkboard = [self childNodeWithName:@"chalkboard"]; 
     NSLog(@"Touched: %@", touchedNode.name); // backLabel shows in display 
     // chalkboard.alpha = 0.0; // Oddly, this works :/ 
     [chalkboard removeFromParent]; // This does not work ? 
    } 
} 

我showScoresBoard是非常標準的東西...

-(void)showScoresBoard { 
    // Root Node 
    SKNode *chalkboard = [SKNode node]; 
    chalkboard.name = @"chalkboard"; 

    // [Background, labels...] 

    // Back Label 
    SKLabelNode *backLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; 

    backLabel.name = @"backLabel"; 
    backLabel.text = @"Back"; 
    backLabel.fontColor = [UIColor whiteColor]; 
    backLabel.fontSize = 22; 
    backLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) - 165); 
    backLabel.zPosition = 150; 

    [chalkboard addChild:backLabel]; 

    [self addChild:chalkboard]; 
} 

所以我想我的問題是,爲什麼不是 「[黑板removeFromParent]」 做什麼?我在那裏錯過了什麼?它必須正確地看到SKNode正在改變它的alpha屬性。

有什麼想法?

+0

是否發生任何類型的錯誤或者這個方法根本不會被調用? – ZeMoon

+0

沒有錯誤...並且如果我在放棄之前removeFromParent產生輸出,所以我知道它使它在那裏的NSLog。 –

回答

0

嚴重不確定它爲什麼現在工作。在重新審視這個問題之前,我只做了一件事,就是在完成項目的另一部分之後進行清理和構建。一定是一些乾淨照顧的流浪者。

0

[self.parent removeFromParent];可能是工作