首次播放动画时游戏冻结

Posted

技术标签:

【中文标题】首次播放动画时游戏冻结【英文标题】:Game freezes when first playing animation 【发布时间】:2013-11-02 17:48:37 【问题描述】:

我正在使用 Sprite Kit 制作游戏,当我第一次播放动画时,游戏会停止几帧,这很烦人。我该如何解决这个问题? 当我加载我的 SKSpriteNode 时,我会像这样加载动画纹理:

    self.frames = [[NSMutableArray alloc] init];
    SKTextureAtlas *shieldAtlas = [SKTextureAtlas atlasNamed:@"shield"];

    for (int i = 0; i < [shieldAtlas.textureNames count]; i++) 
        NSString *tempName = [NSString stringWithFormat:@"shield%.3d", i];
        SKTexture *tempTexture = [shieldAtlas textureNamed:tempName];
        if (tempTexture) 
            [self.frames addObject:tempTexture];
        

到了玩的时候,我像往常一样做动作,它就在这里冻结。第一次之后一切正常,没有任何减速。

[self.shield runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:self.frames timePerFrame:0.1 resize:YES restore:NO]] withKey:@"shield"];

【问题讨论】:

【参考方案1】:

在将纹理添加到数组后立即添加此代码块对我有帮助。我猜它们是延迟加载的,只有在访问时才加载到内存中。

[tempTexture preloadWithCompletionHandler:^
    // duh duh
];

【讨论】:

以上是关于首次播放动画时游戏冻结的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 应用首次加载查询时的动画

首次加载时动画滞后

Unity中的线程以避免动画冻结

UITableView 拖动阻止所有其他动画

Android游戏开发之游戏帧动画的播放与处理

开源java游戏框架libgdx专题-09-动画的使用