0

我有一个图像图集,它们是 80 x 80。但是 SKTexture 说有些帧是 33x80,尽管它们显然是 80x80。怎么了?我的动画在运行时看起来非常错误。

这是代码:

SKTextureAtlas *myAtlas = [SKTextureAtlas atlasNamed:@"my"];
NSInteger numberOfImages = [run.textureNames count];

NSLog(@"atlas: %@", myAtlas);

for (int i = 0; i < numberOfImages; i++) {
    NSString *textureName = [NSString stringWithFormat:@"walk%.2d", i];
    SKTexture *temp = [myAtlas textureNamed:textureName];
    [self.runningFrames addObject:temp];
}

日志记录返回:

<SKTextureAtlas> 'my' 16 textures:
 (
    "<SKTexture> 'walk00.png' (33 x 80)",
    "<SKTexture> 'walk01.png' (80 x 80)",
    "<SKTexture> 'walk02.png' (33 x 80)",
... omitted
)

这是为什么?我的动画完全失控,它从一边移动到另一边,等等。

4

2 回答 2

6

我找到了解决问题的方法。我正在使用方法制作动画

[self.player runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:self.runningFrames timePerFrame:0.05 resize:NO restore:YES]] withKey:@"playerRunning"];

将 resize 更改为 YES 解决了我所有的问题。

于 2013-10-09T13:18:05.143 回答
1

尽管这个问题相当古老,但在我的跑步者中仍然存在碰撞检测问题。之前我曾经使用过这样的方法:

- (CGRect)collisionBoundingBox
{
    return self.frame;
}

然而,尽管“调整大小”标志(iOS 7.1),SKAction 或其他东西似乎改变了我的精灵的框架。一旦我将实现更改为:

- (CGRect)collisionBoundingBox
{
    CGFloat x = self.position.x;
    CGFloat y = self.position.y;
    CGFloat w = self.texture.size.width;
    CGFloat h = self.texture.size.height;
    return CGRectMake(x - w / 2, y - h / 2, w, h);
}

它工作得很好,因为 texture.size 是恒定的!无论如何,我认为这是一个小故障 - 我不希望某些引擎改变我的精灵的框架!

于 2014-09-10T13:28:13.673 回答