首页 > ios > cocos2d一种动画的快方法

cocos2d一种动画的快方法

在一个工程中看到的一段源码,生成动画特别的方便。于是,在我写的游戏工程中几乎所有的动画都运用到了。

@interface CCAnimation (Helper)
/*
1.属性列表文件包含在工程当中,因此,它也在应用程序的“main bundle”中。
这个方法会返回main bundle中的文件的完整路径,也就是我们需要读取
的plist文件的完整路径。
2.为了读取一个plist文件,我们调用NSArray的arrayWithContentsOfFile方法,
然后把plist文件的完整路径传递给它。这样就会把plist文件中的内容初使化成一个数
组。(本例中,这个数组就是一系列图片名字的数组)。注意,这个方法可行,是因为
我们把根元素设置成了NSArray。如果我们把它设置成NSDictionary的话,那么我们
就要用一个NSDictionary去初使化它。具体的方法就是
调用 [NSDictionary dictionaryWithContentsOfFile...] 。
3.创建一个空的数组来存储这些动画帧。
4.从plist文件中循环遍历每一张图片并把它存到一个数组中去。
5.为每一张图片创建一个精灵帧,同时把它加到 animFrames数组里面去。
6.基于一个精灵帧数组,返回一个CCAnimation对象。
*/
+ (CCAnimation *)animationFromPlist:(NSString *)animPlist delay:(float)delay;
@end
@implementation CCAnimation (Helper)
+ (CCAnimation *)animationFromPlist:(NSString *)animPlist delay:(float)delay
{
    NSAssert(animPlist != nil, @"the plist may be empty!");
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:animPlist ofType:@"plist"];
    //CCLOG(@"plistPath: %@", plistPath);
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:plistPath];
    NSArray *animImages = [dict objectForKey:@"Root"];
    CCLOG(@"animImages: %@", animImages);
    NSMutableArray *animFrames = [NSMutableArray array];
    
    for (NSString *animImage in animImages) {
        
        CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:animImage];
        
        [animFrames addObject:frame];
    }
    
    return [CCAnimation animationWithFrames:animFrames delay:delay];
}
@end

把所需的png用texturePacker打包生成一张.pvr.ccz文件,plist文件包含一组动画的图片的列表,plist文件的生成可以用python脚本快速生成,一步到位,大大提高了开发的效率。
下面是自己写的一段python脚本:

# --- picknames.py ---  
import os  
filedirs=os.listdir(os.getcwd())  
for adir in filedirs:
    if os.path.isdir(adir):
        filenames=os.listdir(adir)
        for filename in filenames:
            filenames[filenames.index(filename)]='		<string>'+adir+'/'+filename[:]+'</string>\n'  
        out=open(adir+'.plist','w')
        pre='<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n	<key>Root</key>\n	<array>\n'
        suffix='	</array>\n</dict>\n</plist>\n'

        #output result
        out.write(pre)
        for name in filenames:
            if name[0] != '.':
                out.write(name)
        out.write(suffix)
        out.close()

呵呵,最后再次感谢python的强大!cocos2d的好用!

  1. 高级豕 9月 3rd, 2012 @ 17:12 | #1

    说的甚有道理,但总觉得有点偏激。

    • 阿凡树 9月 5th, 2012 @ 14:45 | #2

      ^_^! 无论是python还是cocos2d,请允许我加点个人的感情在内,呵呵⋯⋯

  2. i橡子树 9月 11th, 2012 @ 19:20 | #3

    我对你的文章写了篇有深度的评论,希望能交流一下。

  3. ixwebhosting 9月 20th, 2012 @ 11:18 | #4

    文章分享的好专业,来学习学习

  4. 魅力卡公主 9月 29th, 2012 @ 09:19 | #5

    总得留点什么??想来想去,就留个脚印吧。。哈哈

  5. Katie 11月 7th, 2012 @ 19:52 | #6

    I’ve been loonkig for a post like this for an age

评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 1 )
  1. 9月 13th, 2012 @ 01:08 | #1
    Trackback: How To Watercolor