2014-05-02 3 views
2

Я как-то спросил вопрос в названии, но предположим, что у меня есть UIColor (то есть [UIColor redColor]. я получаю NSString равным @ «красный» или как я могу узнать, является цвет такой же, как [UIColor redColor]Как получить НАЗВАНИЕ UIColor/SKColor (т.е. [UIColor redColor] -> @ "red"

Например, я попытался,

SKSpriteNode *player = [SKSpriteNode spriteNodeWithImageNamed:@"image"]; 
[player runAction:[SKAction colorWithColor:[SKColor blueColor] withColorBlendFactor:1 duration:0.01]; 
[self addChild:player]; 

Тогда позже:

if (player.color == [SKColor blueColor]) { //Also I have tried 'isEqual' and that didn't work either! 
} 

ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ! Заранее благодарим!

+1

Там нет стандартного способа получить имя цвета в. Вы можете создать словарь цветов и имен. Но это работает только с конечным списком цветов. Вы должны использовать 'isEqual:' для сравнения двух цветовых объектов. Что такое 'player.color'? Это строка или «SKColor»? – rmaddy

+0

Это SKSpriteNode, поэтому это SKColor. Как сделать словарь? – user3473834

+0

Вы имеете в виду 'player' - это' SKSpriteNode'? Вы создаете словарь с 'NSDictionary'. – rmaddy

ответ

1

Я предполагаю, что вы не знаете о userData, как уже было предложено rmaddy, поэтому я дам вам пример кода. Во-первых, это то, что Apple говорит о userData:

Это свойство используется для хранения собственных данных в узле. Например, вы можете хранить игровые данные о каждом узле для использования внутри вашей логики игры. Это может быть полезной альтернативой созданию собственных подклассов узлов для хранения игровых данных. Sprite Kit ничего не делает с данными, хранящимися в узле. Однако данные архивируются, когда узел архивируется.

@implementation MyScene 
{ 
    SKSpriteNode *frank; 
    SKSpriteNode *sally; 
} 

-(id)initWithSize:(CGSize)size 
{ 
    if (self = [super initWithSize:size]) 
    { 
     frank = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(50, 50)]; 
     frank.position = CGPointMake(100, 100); 
     frank.userData = [NSMutableDictionary dictionary]; 
     [frank.userData setValue:@"blue" forKey:@"color"]; 
     [self addChild:frank]; 

     sally = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(50, 50)]; 
     sally.position = CGPointMake(200, 100); 
     sally.userData = [NSMutableDictionary dictionary]; 
     [sally.userData setValue:@"red" forKey:@"color"]; 
     [self addChild:sally]; 
    } 
    return self; 
} 

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

    NSMutableDictionary *tempDictionary = node.userData; 
    NSString *tempString = [NSString stringWithFormat:@"%@",[tempDictionary objectForKey:@"color"]]; 

    if([tempString isEqualToString:@"blue"]) 
     NSLog(@"My color is blue"); 

    if([tempString isEqualToString:@"red"]) 
     NSLog(@"My color is red"); 
} 
+0

Это было бы хорошо, но как бы я это сделал, так как у меня есть цвета, выбранные случайным образом из массива, и это не позволяет мне сравнивать цвета. У меня он настроен как: – user3473834

+0

NSArray * colors = @ [[SKColor blueColor], [SKColor redColor], [желтый цвет SKColor]; – user3473834

+0

player.color = colors [rand% colors.count]; – user3473834

Смежные вопросы