无法使用并找到setTexture:resize SpriteKit

时间:2014-03-11 16:15:36

标签: ios objective-c sprite-kit sktexture

我在SpriteKit游戏中遇到纹理问题:

touchesBegan我做:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

  UITouch *touch = [touches anyObject];
  CGPoint location = [touch locationInNode:self];

  SKNode *node = [self nodeAtPoint:location];

  if ([node.name isEqualToString:@"worm"]) {

    [node removeAllActions];
    SKAction *change = [SKAction setTexture:[SKTexture textureWithImageNamed:@"worm2"]];
    [node runAction:change];

此代码有效,但新纹理" worm2"按比例缩放,你会看到与它应该如何相比不好。

来自Apple文档,https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKAction_Ref/Reference/Reference.html#//apple_ref/occ/clm/SKAction/setTexture:resize

应该有方法:setTexture:resize:

但是你可以从我放的图片中看到,这种方法不存在.. enter image description here

我缺少什么?

谢谢大家

3 个答案:

答案 0 :(得分:2)

我认为[SKAction setTexture:resize:]仅适用于iOS 7.1。看看API Differences

如果您运行的是旧版本,可能会将Xcode更新到最新版本(5.1)。

答案 1 :(得分:1)

此代码:

SKAction *change = [SKAction setTexture:[SKTexture textureWithImageNamed:@"worm2"]];
[node runAction:change];

相当于直接更改纹理:

SKSpriteNode* sprite = (SKSpriteNode*)node;
sprite.texture = [SKTexture textureWithImageNamed:@"worm2"];
// optional: update sprite size to match texture size
sprite.size = sprite.texture.size;

除非你想延迟纹理变化,否则不需要(也效率较低)使用动作来改变纹理。

答案 2 :(得分:0)

来自@ user867635的建议[SKAction setTexture:resize:]可从7.1开始提供..所以我找到了解决此问题的另一种方法:

初始化场景时:

_texture = [SKTexture textureWithImageNamed:@"worm2"];
[_texture preloadWithCompletionHandler:^{}];

并在touchesBegan之后调用此纹理,preloadWithCompletionHandler解决了我的问题