0

我在 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:

但是从我放的图片中可以看出,这种方法不存在.. 在此处输入图像描述

我错过了什么?

谢谢大家

4

3 回答 3

2

我认为[SKAction setTexture:resize:]仅在 iOS 7.1 中可用。查看API 差异

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

于 2014-03-11T16:29:35.027 回答
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;

除非您想延迟纹理更改,否则无需(并且效率较低)使用操作来更改纹理。

于 2014-03-11T16:30:49.337 回答
0

就像@user867635[SKAction setTexture:resize:]的建议可以从 7.1 .. 所以我找到了另一个解决这个问题的方法:

初始化场景时:

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

touchesBegan如上所述调用此纹理后,preloadWithCompletionHandler解决了我的问题

于 2014-03-11T16:44:48.200 回答