对于动画精灵,CGRect是ZERO

时间:2014-03-13 11:44:14

标签: ios iphone ipad sprite-kit

这似乎是SpriteKit的一大失败。

我有一堆动画精灵,他们有这样的类:

- (id)init {

  self = [super init];

  if (self) {

    NSMutableArray *images=[NSMutableArray arrayWithCapacity:14];
    for (int i=1; i<=14; i++) {
      NSString *fileName=[NSString stringWithFormat:@"boat%d.png",i];
      SKTexture *tempTexture=[atlas textureNamed:fileName];
      [images addObject:tempTexture];
    }

    NSUInteger numberOfFrames = [images count];

    SKAction *animate = [SKAction animateWithTextures:images timePerFrame:1.0f/numberOfFrames resize:YES restore:NO];
    SKAction *forever = [SKAction repeatActionForever:animate];
    [self runAction:forever];


  }

  return self;
}

所有类都是SKSpriteNode类的子类。

在某些时候我想得到精灵框架,高度或其他什么,然后我做

MySprite *sprite = [[MySprite alloc] init];

CGRect frame = sprite.frame;  // frame returned is (0,0,0,0)

// or you may think
CGRect frame2 = [sprite calculateAccumulatedFrame]; // frame returned is (0,0,0,0)

// or you may also suggest
CGSize size = sprite.texture.size; // result is (0,0)

或者换句话说,没有办法获得该精灵的框架或尺寸。

所以,除非我在sprite初始化时创建代码以读取一个图像的大小并将其存储在属性上,否则我会被搞砸。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

MySprite *sprite = [[MySprite] init];

此外,您忘记添加alloc方法调用。

你的帧是(0,0,0,0)&#39;因为你没有在初始化过程中为你当前的精灵设置当前纹理,所以它是0,0,0,0。