Изменение текстуры на SKSpriteNode

У меня есть SKSpriteNode, и я хочу изменить текстуру на нем, когда пользователь коснется экрана. Но не могу понять, как это сделать.

Создание и добавление головы. (Объявлено в заголовке).

    head = [SKSpriteNode spriteNodeWithImageNamed:[NSString stringWithFormat:@"%@",face]];
    head.position = CGPointMake(size.width / 2, size.height / 2);
    [self addChild:head];

Когда обнаружено касание, выполняется следующее: но я не могу понять, как применить его к SKSpritenode?!

            SKAction* changeFace = [SKAction setTexture:[SKTexture textureWithImageNamed:[NSString stringWithFormat:@"%@",face]]];
            [self runAction:changeFace];

Я пробовал также и ниже, но, похоже, не работает...

            head.texture = [SKTexture textureWithImageNamed:[NSString stringWithFormat:@"%@",face]];

Надеюсь, кто-то сможет указать мне в правильном направлении!

Ответы

Ответ 1

Похоже, вы пытаетесь запустить действие на сцене (или любой другой объект, кроме вашего спрайта). Второй код должен работать, но вместо этого используйте SKAction.

[head runAction:changeFace];

Ответ 2

У меня он работает здесь, посмотрите на код ниже:

1 - Создайте SKSpriteNode

self.ninja = [SKSpriteNode spriteNodeWithImageNamed:@"ninja1"];
self.ninja.position = CGPointMake(self.ninja.size.width/2, self.frame.size.height/2);
[self addChild:self.ninja];

2 - Измените текстуру:

self.ninja.texture = [SKTexture textureWithImageNamed:@"ninja2"];

Обс: Я меняю текстуру в событии touchhesBegan, но это должно работать так, как вы хотите.

Ответ 3

Я тоже переживаю это, мне удалось изменить текстуру, но текстура растянута. Что вызывает это?

Ответ 4

Попробуйте это

SKAction*animation=[SKAction animateWithTextures:actions timePerFrame:0.1 resize:NO restore:YES];