18

我有一个 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]];

希望有人能够指出我正确的方向!

4

4 回答 4

15

看起来您正在尝试在场景(或除您的精灵之外的任何其他对象)上运行动作。但是第二个代码应该可以工作,但使用 SKAction 试试这个。

[head runAction:changeFace];
于 2013-11-13T18:27:56.260 回答
11

我在这里工作,看看下面的代码:

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"];

Obs:我在 touchesBegan 事件中更改了纹理,但这应该以您想要的任何方式工作。

于 2014-02-13T02:05:57.880 回答
3

我也经历过这个,我能够改变纹理,但纹理是拉伸的。这是什么原因造成的?

于 2014-03-04T02:17:11.927 回答
0

尝试这个

SKAction*animation=[SKAction animateWithTextures:actions timePerFrame:0.1 resize:NO restore:YES];
于 2014-05-13T12:54:39.883 回答