1

奇妙な行動の原因を見つけようとしています。私の SpriteKit シーンには、プロパティとして SKLabelNode があります。SKLabelNode は、 levelSelected というメソッドで初期化されます。

 -(void)levelSelected{
    SKSpriteNode* bar = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithHue:0.566f saturation:0.787f brightness:0.792f alpha:1] size:CGSizeMake(self.frame.size.width,60)];
    bar.anchorPoint = CGPointMake(0, 0);
    bar.position = CGPointMake(0, 50);
    float space = (self.size.width - 45*6) / 7;
    SKSpriteNode* letterBox = [SKSpriteNode spriteNodeWithImageNamed:@"letter_box_def"];
    letterBox.anchorPoint = CGPointMake(0.5, 0.5);
    letterBox.position = CGPointMake((space+((space + 45)*2)+22.5), 30);
    [bar addChild:letterBox];
    self.gl2 = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
    self.gl2.fontColor = [SKColor blackColor];
    self.gl2.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter;
    self.gl2.fontSize = 30;
    self.gl2.text = @"";
    NSLog(@"%@", self.gl2);
    [letterBox addChild:self.gl2];
    [self addChild:bar];
    self.gl2.text = @"D";
    }

予想どおり、実行時にノードに「D」が表示されます。私のタッチ方法は次のとおりです。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"Called touchesBegan");
    NSLog(@"Node : %@", self.gl2);
    NSLog(@"Text : %@", self.gl2.text);
    self.gl2.text = @"k";
    NSLog(@"Node : %@", self.gl2);
    NSLog(@"Text : %@", self.gl2.text);
    }

これで、タッチするとラベルが画面から消えます。ログには次のように表示されます。

2014-08-14 06:15:34.841 Guess[3125:607363] Called touchesBegan
2014-08-14 06:15:34.842 Guess[3125:607363] Node : <SKLabelNode> name:'(null)' text:'D' fontName:'Arial' position:{0, 0}
2014-08-14 06:15:34.843 Guess[3125:607363] Text : D
2014-08-14 06:15:34.846 Guess[3125:607363] Node : <SKLabelNode> name:'(null)' text:'k' fontName:'Arial' position:{0, 0}
2014-08-14 06:15:34.847 Guess[3125:607363] Text : k

私が試したことは、levelSelected メソッドから呼び出される別のメソッドを使用することです。

-(void)levelSelected{
    SKSpriteNode* bar = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithHue:0.566f saturation:0.787f brightness:0.792f alpha:1] size:CGSizeMake(self.frame.size.width,60)];
    bar.anchorPoint = CGPointMake(0, 0);
    bar.position = CGPointMake(0, 50);
    float space = (self.size.width - 45*6) / 7;
    SKSpriteNode* letterBox = [SKSpriteNode spriteNodeWithImageNamed:@"letter_box_def"];
    letterBox.anchorPoint = CGPointMake(0.5, 0.5);
    letterBox.position = CGPointMake((space+((space + 45)*2)+22.5), 30);
    [bar addChild:letterBox];
    self.gl2 = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
    self.gl2.fontColor = [SKColor blackColor];
    self.gl2.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter;
    self.gl2.fontSize = 30;
    self.gl2.text = @"";
    NSLog(@"%@", self.gl2);
    [letterBox addChild:self.gl2];
    [self addChild:bar];
    self.gl2.text = @"D";
    [self touchedSomething];
}
-(void)touchedSomething {
    NSLog(@"Called touchedSomething");
    NSLog(@"Node : %@", self.gl2);
    NSLog(@"Text : %@", self.gl2.text);
    self.gl2.text = @"k";
    NSLog(@"Node : %@", self.gl2);
    NSLog(@"Text : %@", self.gl2.text);
}

これは完全に機能し、D は k に置き換えられ、log が生成されます。

2014-08-14 06:20:09.934 Guess[3132:608100] Called touchedSomething
2014-08-14 06:20:09.935 Guess[3132:608100] Node : <SKLabelNode> name:'(null)' text:'D' fontName:'Arial' position:{0, 0}
2014-08-14 06:20:09.935 Guess[3132:608100] Text : D
2014-08-14 06:20:09.938 Guess[3132:608100] Node : <SKLabelNode> name:'(null)' text:'k' fontName:'Arial' position:{0, 0}
2014-08-14 06:20:09.939 Guess[3132:608100] Text : k

しかし、levelSelected から [self touchedSomething] 呼び出しを削除して touchesBegan に追加すると、機能せず、ラベルが再び画面から消えます。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"Called touchesBegan");
    [self touchedSomething];
}

-(void)touchedSomething {
    NSLog(@"Called touchedSomething");
    NSLog(@"Node : %@", self.gl2);
    NSLog(@"Text : %@", self.gl2.text);
    self.gl2.text = @"k";
    NSLog(@"Node : %@", self.gl2);
    NSLog(@"Text : %@", self.gl2.text);
}

2014-08-14 06:24:49.492 Guess[3145:609098] Called touchesBegan
2014-08-14 06:24:49.493 Guess[3145:609098] Called touchedSomething
2014-08-14 06:24:49.494 Guess[3145:609098] Node : <SKLabelNode> name:'(null)' text:'D' fontName:'Arial' position:{0, 0}
2014-08-14 06:24:49.494 Guess[3145:609098] Text : D
2014-08-14 06:24:49.498 Guess[3145:609098] Node : <SKLabelNode> name:'(null)' text:'k' fontName:'Arial' position:{0, 0}
2014-08-14 06:24:49.498 Guess[3145:609098] Text : k

ご協力いただきありがとうございます !

4

1 に答える 1

1

さて、解決できました(みたいな)。ラベルの zPosition を定義すると修正されました。なぜそれが適切に機能する場合とそうでない場合があるのか​​は、謎のままです。

于 2014-08-14T12:22:10.770 に答える