2016-03-03 97 views
1

大家好一点卡在这一个, 我希望通过名称列举通过它们添加到屏幕上的精灵(我第一次尝试在枚举),所以我很确定它将是简单的,我错过了 - 代码低于 任何帮助表示赞赏。使用枚举更改精灵的颜色

添加精灵层:

for(int keyCount = 0; keyCount < ammountOfSprites; ++keyCount) 
    //other code here.... 

    Star01 = [SKSpriteNode spriteNodeWithImageNamed:@"Actions-rating-icon.png"]; 
    Star01.position = CGPointMake(-30,StarHeight); 
    [MyLabel addChild:Star01]; 
    **Star01.name** = [NSString stringWithFormat:@"Star01_%@",[NSString stringWithFormat:@"%@",dataFromArray]]; 
    NSLog(@"%@", Star01.name); 

///名称登录为:

Star01_Owl 
Star02_Owl 
Star03_Owl 

触摸内部开始

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
for (UITouch *touch in touches) { 
    CGPoint touchLocation = [touch locationInNode:self]; 
    SKNode *node = [self nodeAtPoint:touchLocation]; 

//colour to add to the 
UIColor *blackColour = [UIColor greenColor]; 


    //function takes sprite.names and enumerates them 
    //name match those logged however dont work. 
[self changeStarScorestar01:@"Star01_Owl" star02:@"Star02_Owl" star03:@"Star03_Owl" colour:blackColour]; 

后来......

//function takes sprite.names and enumerates them 
-(void)changeStarScorestar01:(NSString*)star01 star02:(NSString*)star02 star03:(NSString*)star03 colour:(UIColor*)Starcolour 
{ 

[self enumerateChildNodesWithName:star01 usingBlock:^(SKNode *node, BOOL *stop) 
    { 

     NSLog(@"node.name isEqualToString:star01"); 
     SKSpriteNode *star01Found = (SKSpriteNode*)[self childNodeWithName:star01]; 
    star01Found.color =Starcolour; 
    star01Found.colorBlendFactor =1.0; 

} 

关于测试它无法找到精灵,所以我必须针对错误的对象> <什么?

[self enumerateChildNodesWithName:star01 usingBlock:^(SKNode *node, BOOL *stop) 
    { 
     if ([node.name isEqualToString:star01]) 
     { 
      NSLog(@"FOUND STAR"); 

     }} 
+1

因此,你有一个名为'MyLabel'的SKNode中的小精灵?是否将MyLabel添加到场景中?如果是这样,那么我相信你需要枚举'MyLabel'的孩子,而不是现场 – Knight0fDragon

+0

Knight0fDragon - 这的确是问题所在 - 谢谢:) – StackBuddy

回答

1

你有你的精灵在SKNodeMyLabel

然后MyLabel被添加到场景中。

您现在在实际的场景中调用enumerateChildNodesWithName

不幸的是,这个函数不叫做enumerateDecendentNodesWithName,并且不会影响到孙辈或孙子女的节点。

相反,您需要枚举节点的父节点,您需要查找的节点的父节点,在本例中为MyLabel

[MyLabelenumerateChildNodesWithName:star01 usingBlock:^(SKNode *node, BOOL *stop) 
{ 
    if ([node.name isEqualToString:star01]) 
    { 
     NSLog(@"FOUND STAR"); 
    } 
}]; 
+0

完成enumeratingSelf ThroughDecendentStagesOfInsanity :) 经验教训! 感谢Knight0fDragon! – StackBuddy

+0

如果你真的想要它,你总是可以编写enumerateDecendentNodesWithName扩展函数,但我不会推荐它。哈哈。 – Knight0fDragon