編輯:我一定剛剛在破解前。清潔和其他重建似乎已修復它。刪除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屬性。
有什麼想法?
是否發生任何類型的錯誤或者這個方法根本不會被調用? – ZeMoon
沒有錯誤...並且如果我在放棄之前removeFromParent產生輸出,所以我知道它使它在那裏的NSLog。 –