我有一个图像图集,它们是80乘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
)
为什么?我的动画完全失控,它从一边移到另一边等等。
答案 0 :(得分:6)
我找到了问题的解决方案。我使用方法
制作动画[self.player runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:self.runningFrames timePerFrame:0.05 resize:NO restore:YES]] withKey:@"playerRunning"];
将调整大小更改为YES修复了我的所有问题。
答案 1 :(得分:1)
尽管问题相当陈旧,但在我的跑步者中仍存在碰撞检测问题。早些时候我曾经使用过这样的方法:
- (CGRect)collisionBoundingBox
{
return self.frame;
}
然而,似乎SKAction或其他东西改变了我的精灵的框架,尽管&#34; resize&#34; flag(iOS 7.1)。一旦我将实施改为:
- (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是不变的!无论如何,我认为这是一个小故障 - 我不想让一些引擎改变我的精灵框架!