更改SKSpriteNode上的纹理

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

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


“似乎不起作用”...所以它实际上是在工作的,只是看起来好像没有?描述一下正在发生的事情。并检查您是否加载了正确的文件和纹理不为nil。 - CodeSmile
4个回答

15

看起来你正在尝试在场景上运行动作(或者是在你的精灵以外的任何其他对象上)。第二段代码应该可行,但请改用SKAction而不是现在所使用的方法。

[head runAction:changeFace];

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

注意:我在touchesBegan事件中更改了纹理,但这应该可以按照您想要的任何方式进行操作。


3

我也遇到了这个问题,我能够改变纹理但纹理被拉伸了。 是什么导致了这个问题?


在你改变纹理后尝试这个:self.size = self.texture.size; - Ron Myschuk

0

试一试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接