我想知道是否有更有效的方法来使用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];
答案 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];