有效的方式来创建动画

时间:2014-12-16 22:06:17

标签: objective-c animation sprite-kit

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

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

2 个答案:

答案 0 :(得分:2)

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

而不是高效,我会看灵活。为此,最好的方法之一是创建自己的“格式”来表示动画。

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

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

我用-1代表“永远”。

您的动画格式加载器可以根据需要“高效”。地图集是更好的方式,但这只是意味着调整格式以适应这种情况。

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

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

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

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

答案 1 :(得分:0)

你可以在这样的循环中创建框架

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