편집 : 방금 전에 균열이 있었을 것입니다. 깨끗하고 또 다른 재건은 그것을 고쳤다.touchesBegan에서 SKNode 트리를 제거하십시오
나는 이것에 대한 두 번째 시각 집합이 내가 무엇을 놓치고 있는지 알려주 길 바란다. "HUD"SKSpriteNodes ... 음소거 버튼, 마지막 점수 표시 등 SpriteKit 게임 장면 (iOS 7.1)이 있습니다. 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를 올바르게보아야합니다.
의견이 있으십니까?
어떤 종류의 오류가 발생합니까? 아니면이 메서드가 전혀 호출되지 않습니까? – ZeMoon
오류 없음 ... removeFromParent가 출력을 생성하기 전에 NSLog를 입력하면 출력이 생성되므로 생성됩니다. –