【问题标题】:efficient way to create animations创建动画的有效方法
【发布时间】:2014-12-16 22:06:16
【问题描述】:

我想知道是否有更有效的方法来使用 pngs 创建动画 ..?

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"a1"];
    SKTexture *a1 = [SKTexture textureWithImageNamed:@"a1"];
    SKTexture *a2 = [SKTexture textureWithImageNamed:@"a2"];
    SKTexture *a3 = [SKTexture textureWithImageNamed:@"a3"];
    SKTexture *a4 = [SKTexture textureWithImageNamed:@"a4"];
    SKTexture *a5 = [SKTexture textureWithImageNamed:@"a5"];
    NSArray *animationFramesFarmer = @[a1, a2, a3, a4, a5];
    SKAction *action = [SKAction animateWithTextures:animationFramesFarmer timePerFrame:0.2];
    SKAction *endlessAction = [SKAction repeatActionForever:action];
    [sprite runAction:endlessAction];

【问题讨论】:

  • 您可以使用纹理图集。老实说,我更喜欢按照自己的方式做事,因为您所做的事情非常透明。

标签: objective-c animation sprite-kit


【解决方案1】:

出于某种原因,似乎大多数在这里发帖的人都喜欢在应用程序内以编程方式生成他们的数据。

比起高效,我更倾向于灵活。为此,最好的方法之一是创建自己的“格式”来表示动画。

例如,这是一个简单的 JSON,它代表您正在做的事情:

{
    "frames" : 
    [
        "a1",
        "a2",
        "a3",
        "a4",
        "a5"
    ],
    "timePerFrame": 0.2
    "iterations": -1
}

我用-1来代表“永远”。

然后,您的动画格式加载器可以像您想要的那样“高效”。地图集是更好的选择,但这实际上只是意味着调整您的格式以适应它。

有什么好处?好吧,您可以让艺术家为您生成数据。所以他们的可交付成果包含图像和数据文件。如果你有一个工具链来为你做这件事,那就更好了。

您也不是为了创建每种动画类型而编写特定的“生成器”部分。

这是我在上面概述的一个简单案例。我制作游戏,我有一个美术工具集,可以将数据导出为我需要的格式,并可以根据经验告诉你,从长远来看,你的生活会更轻松。

最后一点。追求效率很好,但要确保你需要它。我经常发现人们预先优化或不必要地优化。让它工作,运行它,看看你的瓶颈在哪里(即配置文件)。如果您只创建一次该角色,那么它可能是目前最高效的代码,但它不会影响您应用的整体帧速率/性能。

【讨论】:

    【解决方案2】:

    你可以像这样循环创建帧

    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"a1"];
    NSMutableArray *animationFramesFarmer = [[NSMutableArray alloc] init];
    for (int i = 1; i <= 5; i++)
    {
        NSString *name = [NSString stringWithFormat:@"a%i", i];
        SKTexture *a = [SKTexture textureWithImageNamed:name];
        [animationFramesFarmer addObject:a];
    }
    
    SKAction *action = [SKAction animateWithTextures:animationFramesFarmer timePerFrame:0.2];
    SKAction *endlessAction = [SKAction repeatActionForever:action];
    [sprite runAction:endlessAction];
    

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多