知易Cocos2D-iPhone 游戏开发教程003

 从本章开始,我们开始讲解Cocos2d-iPhone库的动作(Action)。游戏的世界是一个动态的世界:无论是主角精灵还是NPC精灵都是处于不断的运动当中;甚至是背景中的飘落的树叶,随风而动的小草。这些明显的或者不明显的运动构成了我们栩栩如生的游戏世界。

仔细研究游戏中精灵的运动,我们发现:所有这样的运动都可以细分为若干个基本动作和基本动作的组合动作。进一步通过动作扩展,我们可以将同一精灵的更多动作和不同精灵之间的不同动作连贯起来,形成关于整个运动世界的连续模拟。

我们给出示例ZYG003,展示Cocos2D-iPone支持的主要动作:

基本动作

 从技术上来说,基本动作的本质就是改变某个图形对象的属性:位置,角度,大小等。根据改变的内容和方式的不同,Cocos2d-iPhone的基本动作可以分为19种。根据改变完成所需要的时间,可以分为延时动作和瞬时动作。其中,延时动作的执行速度又可以按照不同的方式来改变(位置、大小、颜色、闪烁)。因此,我们可以从3个角度来掌握Cocos2d-iPhone提供的基本动作:瞬时动作、延时动作、动作速度。

 再进一步介绍具体基本动作之前,我们先来简单明确一下动作是如何与CocosNode关联起来的。CocosNode有一个方法叫runAction

 定义为: - (Action*) runAction:

(Action *)

action

 此接口的导入确保所有的精灵都可以执行各种动作。也正是为了服从这个接口的定义,导致后续各种组合动作也都从Action对象派生。该函数从0.8.0开始,不再 retain action 指针。因此,如果要重复使用某个动作,需要考虑手工 retain

 下面的代码是通常调用某个动作的方法:

// 创建动作

id actionTo = [CCMoveTo actionWithDuration: 2 position:ccp(s.width-40, s.height-40)];

// 使用动作。(说明:tamara是一个CCSprite。)

[tamara runAction: actionTo];

接下来,我们从以下3个方面介绍基本动作。

瞬时动作

 顾名思义。瞬时动作就是不需要时间,马上就完成的动作。瞬时动作的共同基类是InstantAction

Cocos2d-iPhone提供以下瞬时动作:(示例代码G04中的CCInstantActionLayer实现了下面的代码):

l 放置 – Place

效果类似于node.Position = ccp(x, y)。之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。下面为示例代码:

- (void) OnPlaceMenue:(id) sender

{

 CGSize s = [[CCDirector sharedDirector] winSize];

 CGPoint p = ccp(CCRANDOM_0_1() * s.width, CCRANDOM_0_1() * s.height);

 [sprite runAction:[CCPlace actionWithPosition:p]];

}

l 隐藏 – Hide

效果类似于 [node setVisible:NO]. 之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。下面为示例代码:

- (void) OnHideMenue:(id) sender

{

 [sprite runAction:[CCHide action]];

}

l 显示 – Show

效果类似于 [node setVisible:YES]. 之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。下面为示例代码:

- (void) OnShowMenue:(id) sender

{

 [sprite runAction:[CCShow action]];

}

l 可见切换 – ToggleVisibility

代码如下:

- (void) OnToggleMenue:(id) sender

{

 [sprite runAction:[CCToggleVisibility action]];

}

还有几个较为特殊的二个(网格重用 – ReuseGrid、停止网格 – StopGrid)我们后面介绍。

延时动作

 延时动作就是指动作的完成需要一定时间。因此,actionWithDuration是延时动作执行时的第一个参数,延时动作的共同基类是CCIntervalAction(包含了组合动作类)

Cocos2d-iPhone提供以下瞬时动作:(示例代码G04中的IntervalActionLayer实现了下面的代码)。函数命名规则是

XxxxTo: 意味着运动到指定的位置。

XxxxBy:意味着运动到按照指定的xy增量的位置。(xy可以是负值)

l 移动到 – CCMoveTo

l 移动– CCMoveBy

l 跳跃到 – CCJumpTo

设置终点位置和跳跃的高度和次数。

l 跳跃 – CCJumpBy

设置终点位置和跳跃的高度和次数。

l 贝塞尔 – CCBezierBy

支持3次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。

首先设置定Bezier参数,然后执行。

l 放大到 – CCScaleTo

设置放大倍数,是浮点型。

l 放大 – CCScaleBy

l 旋转到 – CCRotateTo

l 旋转 – CCRotateBy

l 闪烁 – CCBlink

设定闪烁次数

l 色调变化到 – CCTintTo

l 色调变换 – CCTintBy

l 变暗到 – CCFadeTo

l 由无变亮 – CCFadeIn

l 由亮变无 – CCFadeOut

...

如果您对本文感兴趣,可以到这里下载完整PDF示例源代码下载

你可能感兴趣的:(cocos2d)