Cocos2D iOS之旅:如何写一个敲地鼠游戏(八):为动画建立属性列表

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!

在之前的博文中,我们创建了游戏的基础 — 小可爱的地鼠从洞中呼之欲出.我们花了大量的时间思考关于如何组织素材以及坐标置位,以让我们的游戏在iphone,ipad以及高清屏上看起来更好,也更有效率.

在后续的博文中,我们将为地鼠的笑和被K的表情添加一些有趣的动画,增加游戏逻辑便于你可以敲击和得分,并且当然还有一些必不可少的音效.

如果你还没有项目的copy,可以从这里下载 grab a copy 之前项目的源代码.

定义动画:实用性

为了使游戏更加有趣,我们将为地鼠制作2个动画.首先,它弹出洞时会略带笑容(使你更想扁它),然后如果你敲中了它,它将换一张”被敲中的”脸给你看.

但在我们开始之前,让我们先讨论下在代码中定义动画的实用性.

回忆一下 cocos2d animations tutorial 其中创建动画的一个步骤是建立精灵帧列表.为你动画中的每一幅不同图片,你必须将精灵帧像下面一样加入一个数组中:

[animFrames addObject:
    [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"myImage.png"]];

我们地鼠傻笑的动画的图片顺序是这样的:
mole_laugh1.png,mole_laugh2.png,mole_augh3.png,mole_augh2.png,mole_augh3.png,mole_laugh1.png.

我们可以硬编码将这么多行写到动画代码中去,像这样:

[animFrames addObject:
    [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"mole_laugh1.png"]];
[animFrames addObject:
    [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"mole_laugh2.png"]];
[animFrames addObject:
    [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"mole_laugh3.png"]];
[animFrames addObject:
    [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"mole_laugh2.png"]];
// And so on...

但是它不怎么漂亮.说的在清楚一点,我们更愿意用一个属性列表来代替上面的硬编码.

属性列表(Property Lists)

如果你从未用过属性列表,在Xcode中它们就好比是特殊包含数据(比如数组,字典,字符串,数字等等)的层次格式的文件,创建它非常简单,从代码中读取也很简单.

让我们看看在XCode中如何完成.右击Resources,选择Add\New File…”,选则Mac OS X\Resource\Property List,点击next.命名新文件为laughAnim.plist,点击结束.此时编辑器中laughAnim.plist应该是下面这个样子:

每一个属性列表都有一个根元素.它常常是一个数组或是字典.本例中的属性列表将包含一个数组,每个元素是组成微笑动画的图片名称,所以点击根元素的第二列(类型,当前是字典),并且把它改为数组类型.

接下来,最右侧的小按钮 — 添加一个新的entry到数组中,默认该entry类型为String — 这正是我们想要的.将其名称改为”mole_laugh1.png”.

点击 + 按钮增加新的一行,然后重复添加动画的所有帧,如下图:

下一步,重复该过程到地鼠被敲时的动画上.建立一个新属性文件名称为hitAnim.plist,然后像下图那样设置:

现在是时候添加代码加载这些动画了.打开HelloWorldScene.h然后为每一个动画添加一个成员变量,如下:

// Inside @interface HelloWorld
CCAnimation *laughAnim;
CCAnimation *hitAnim;

这样做是在代码中为每个动画保持一个便于访问和重用的引用.

下面添加一个方法基于属性列表中的图片去创建一个CCAnimation:

- (CCAnimation *)animationFromPlist:(NSString *)animPlist delay:(float)delay {

    NSString *plistPath = [[NSBundle mainBundle] pathForResource:animPlist ofType:@"plist"]; // 1
    NSArray *animImages = [NSArray arrayWithContentsOfFile:plistPath]; // 2
    NSMutableArray *animFrames = [NSMutableArray array]; // 3
    for(NSString *animImage in animImages) { // 4
        [animFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:animImage]]; // 5
    }
    return [CCAnimation animationWithFrames:animFrames delay:delay]; // 6

}
时间: 2024-09-12 09:37:56

Cocos2D iOS之旅:如何写一个敲地鼠游戏(八):为动画建立属性列表的相关文章

Cocos2D iOS之旅:如何写一个敲地鼠游戏(九):创建动画

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 理解上述代码非常重要,让我们一行一行的看一下: 属性列表包含在项目文件中,所以在app的"main bundle"里.这里是一个帮助方法取得属性文件在main bu

Cocos2D iOS之旅:如何写一个敲地鼠游戏(七):弹出地鼠

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 弹出地鼠 现在我们已经确认地鼠被放置在正确的位置上了,让我们添加它们弹出洞的代码吧. 首先,将原来999的z序改回0,使地鼠呆在地底下. 然后添加如下代码到init方法的底部

Cocos2D iOS之旅:如何写一个敲地鼠游戏(十一):完善游戏逻辑

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 好了,现在我们用userData标志来确定是否可以点击精灵,我们可以最后添加如下敲击反馈代码了: -(void) registerWithTouchDispatcher {

Cocos2D iOS之旅:如何写一个敲地鼠游戏(六):放置地鼠

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 放置地鼠 对于这个游戏,你将要在场景中添加3只地鼠 - 每个洞一只.地鼠一般躲在草丛中的洞里 - 但会偶尔弹出来,所以你可以狠K它们喽. 首先,让我们在每个洞里添加一只地鼠.

Cocos2D iOS之旅:如何写一个敲地鼠游戏(二):Cocos2D中的高清支持

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 高清显示和Cocos2D 好吧,有一个好消息 - 在最新版本的Cocos2D中包括了高清屏的完整支持,你可以用下面1-2-3步就可简单搞定! 在调用CCDirector的en

Cocos2D iOS之旅:如何写一个敲地鼠游戏(一):高清屏显示和UIKit

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 原文由Ray Wunderlich写成,地址在: http://www.raywenderlich.com/2560/cocos2d-tutorial-for-ios-how

Cocos2D iOS之旅:如何写一个敲地鼠游戏(四):创建TexturePacker自动脚本

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 开始吧 打开Xcode,选择新建项目,选择cocos2D模板.命名新项目为WhackAMole,点击保存. 接下来将你下载的Art文件夹拷贝到WhackAMole项目的目录中

Cocos2D iOS之旅:如何写一个敲地鼠游戏(五):设置背景

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 设置背景 接下来,打开HelloWorldScene.m文件,然后找到你的init方法.删除创建HelloWorld标签的4行,用以下代码替换: // Determine n

Cocos2D iOS之旅:如何写一个敲地鼠游戏(十):创建游戏逻辑

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 增加游戏逻辑 现在我们准备添加游戏逻辑进来.想法是地鼠会钻出一定次数,你每敲击一次会得到一定分数.你尽可能试图多得分. 我们需要保持跟踪分数,然后把它显示给玩家.并且当地鼠结