0

私は画像のアトラスを持っていますが、それらは 80 x 80 です。なにが問題ですか?アニメーションを実行すると、非常に正しく見えません。

コードは次のとおりです。

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"];

サイズ変更を 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 に答える